简体   繁体   English

Flutter:在 StatefulBuilder 的 AlertDialog 上使用 OK 按钮设置全局变量

[英]Flutter: Set global variable using OK button on AlertDialog in StatefulBuilder

How to set global variable using OK button on AlertDialog in StatefulBuilder?如何使用 StatefulBuilder 中 AlertDialog 上的 OK 按钮设置全局变量?

String stringMain = "My String";

 Future<String?> dialogChangeMainContent(BuildContext context) { return showDialog<String>( context: context, builder: (BuildContext context) { return StatefulBuilder(builder: (context, setState) { return AlertDialog( title: const Text('AlertDialog Title'), content: const Text('AlertDialog description'), actions: <Widget>[ TextButton( onPressed: () { Navigator.pop(context, 'OK'); setState(() { // setState2(); stringMain = "New String"; }); }, child: const Text('OK'), ), ], ); }); }); }

I changed StatefulWidget from StatelessWidget, but nothing changes.我从 StatelessWidget 更改了 StatefulWidget,但没有任何变化。 What I know is the problem is because the button is in the StatefulBuilder.我所知道的问题是因为按钮在 StatefulBuilder 中。 If using BLoC etc, it's too wasteful for only small applications.如果使用 BLoC 等,对于小型应用程序来说太浪费了。

I found a way to solve my problem, redrawing (refreshing) the Text (or other widget) in a Stateless Widget from an AlertDialog in a StatefulBuilder.我找到了解决问题的方法,从 StatefulBuilder 中的 AlertDialog 重绘(刷新)无状态小部件中的文本(或其他小部件)。 By creating a setState with a different name , for example setStateTarget .通过创建具有不同名称的 setState ,例如setStateTarget Without having to rebuild the entire page, or without state management like BLoC.无需重新构建整个页面,也无需像 BLoC 那样进行 state 管理。 My code:我的代码:

String stringMain = "My String";

 @override Widget build(BuildContext context) { return Column( //.... children: [ StatefulBuilder(builder: (BuildContext context, setStateTarget) { return Column(children: [ Text(stringMain), // <--- target TextButton( onPressed: () => dialogChangeMainContent(context, setStateTarget), child: const Text('Show Dialog')) ]); }) ], ); } Future<String?> dialogChangeMainContent(BuildContext context, StateSetter setStateTarget) { return showDialog<String>( context: context, builder: (BuildContext context) { return StatefulBuilder(builder: (context, setState) { return AlertDialog( title: const Text('AlertDialog Title'), content: const Text('AlertDialog description'), actions: <Widget>[ TextButton( onPressed: () { Navigator.pop(context, 'OK'); setStateTarget(() { // setState2(); stringMain = "New String"; }); }, child: const Text('OK'), ), ], ); }); }); }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 有没有办法为 Flutter StatefulBuilder 设置一个定期计时器,以每 1 秒用 setState() 更新一次? - Is there a way to set a periodic timer for a Flutter StatefulBuilder to update with setState() every 1 second? 在 StatefulBuilder 小部件之外设置 StatefulBuilder state - Set StatefulBuilder state outside of StatefulBuilder widget Flutter 中的 StatefulBuilder VS StatefulWidget - 性能 - StatefulBuilder VS StatefulWidget in Flutter - performance Flutter - modalBottomSheet 中 StatefulBuilder 中的 TextField 不起作用 - Flutter - TextField in StatefulBuilder in modalBottomSheet not working 如何启用/禁用 AlertDialog 中的确定按钮 - How to enable/disable OK button in AlertDialog 按钮未对齐到颤动警报对话框中的中心 - Button not aligning to center in flutter AlertDialog 在 flutter 中的堆栈小部件上使用 AlertDialog - Using AlertDialog on a stack widget in flutter 颤动确定按钮导航中的时间选择器 - Timepicker in flutter OK button navigation Flutter - StatefulBuilder - 声明 setState 未被引用 - Flutter - StatefulBuilder - The declaration setState isn't referenced 在 flutter 我正在使用 AlertDialog,它有 2 个操作按钮确定和取消,单击确定,我想 go 到新屏幕,并结束当前屏幕? - In flutter I am using AlertDialog, which has 2 action buttons Ok and Cancel, on click on Ok , I want to go to new screen, and end the current screen?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM