import 'package:flutter/material.dart'; import 'package:material_design_icons_flutter/material_design_icons_flutter.dart'; class PopupMenuText extends StatefulWidget { final String title; final T initialValue; final PopupMenuItemSelected onSelected; final PopupMenuItemBuilder itemBuilder; final String Function(T) getSelectTitle; const PopupMenuText({ super.key, required this.title, required this.initialValue, required this.onSelected, required this.itemBuilder, required this.getSelectTitle, }); @override State> createState() => _PopupMenuTextState(); } class _PopupMenuTextState extends State> { late T select = widget.initialValue; @override Widget build(BuildContext context) { final theme = Theme.of(context); return Row( mainAxisSize: MainAxisSize.min, children: [ Text('${widget.title}: '), PopupMenuButton( initialValue: select, onSelected: (value) { if (value == select) return; setState(() { select = value; widget.onSelected(value); }); }, itemBuilder: widget.itemBuilder, child: Row( mainAxisSize: MainAxisSize.min, children: [ Text( widget.getSelectTitle(select), style: TextStyle( height: 1, fontSize: 14, color: theme.colorScheme.secondary, ), strutStyle: const StrutStyle( height: 1, leading: 0, ), ), Icon( MdiIcons.unfoldMoreHorizontal, size: MediaQuery.textScalerOf(context).scale(14), color: theme.colorScheme.secondary, ), ], ), ), ], ); } }