android - Flutter - 在一个 Widget 中调用 setState() 后更新同级 Widget

标签 android flutter dart

我有一个对话框小部件,那里有一个按钮和文本字段。按下按钮后,会出现一个 setState() 和变量发生变化的函数。我没有立即在屏幕上的文本字段中看到这些更改,我需要再次关闭并打开对话框。为什么以及如何才能实现它(因此整个类/父级将被重建?(这是关于“获取位置”按钮和下一个字段)

class MyDialog extends StatefulWidget {
  MyDialogState createState() => MyDialogState();
}

class MyDialogState extends State<MyDialog> {
  String userLocation;
  double sleepLength;

  @override
  Widget build(BuildContext context) {
    return FloatingActionButton(
      onPressed: () {
        showDialog(
            context: context,
            builder: (context) {
              return Dialog(
                  shape: RoundedRectangleBorder(
                      borderRadius: BorderRadius.circular(30)
                  ),
                  elevation: 20,
                  child: ListView(
                    children: <Widget>[
                      FlatButton(
                        child: Text("Get location $userLocation"),
                        onPressed: () {
                          final Geolocator geolocator = Geolocator();
                          geolocator
                            .getCurrentPosition()
                            .then((Position position) async {
                              List<Placemark> place = await geolocator
                                .placemarkFromCoordinates(position.latitude, position.longitude);
                              Placemark p = place[0];

                              setState(() {
                                //userLocation = "${p.locality}, ${p.country}";
                                userLocation = Random().nextInt(10).toString();
                                print("A");

                              });

                          }).catchError((e) {
                            print("------------");
                            print(e);
                            print("------------");
                          });
                        },
                      ),
                      Padding(
                        padding: EdgeInsets.all(10),
                        child: Center(child: Text("$userLocation"))
                      ),
                      Divider(),
                      FlatButton(
                        child: Text("Set sleep length"),
                        onPressed: () {
                          //TODO
                        },
                      ),
                      Padding(
                          padding: EdgeInsets.all(10),
                          child: Center(child: Text("$sleepLength"))
                      ),
                      Divider(),
                    ],
                  )
              );
            }
        );
      },
      child: Icon(
          Icons.settings
      ),
      backgroundColor: Colors.black12,
    );
  }
}

enter image description here

最佳答案

就我而言,StatefulBuilder 有效。 StatefulBuilder 最适合您拥有中型/大型部件树并且需要为该树的一小部分引入状态的情况。

StatefulBuilder包裹你的 child 希望它有帮助..

关于android - Flutter - 在一个 Widget 中调用 setState() 后更新同级 Widget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59293125/

相关文章:

java - 如何从 xml 获取字符串数组到 fragment 的 java 文件?

android - Flutter 应用程序未运行。它给出了这种类型的错误

Flutter path_provider 和 sdk 版本不匹配

dart - 触发从小部件到状态对象的函数

flutter - 饼图 flutter

全屏模式下的 Android NavigationUI fragment

java - TabLayout 最终位于搜索栏(EditText)上方,我希望它位于搜索栏下方

java - Android sqlite 查询以匹配包含文本的列

flutter - 无法显示表单中的数据

android - MultiProvider 必须指定一个子 'package:provider/src/inherited_provider.dart' : Failed assertion: 'builder != null || child != null'