我正试图在Ffltter中更新一个void方法中的变量值,try 使用StatefulBuilder,但该值没有改变.

以下是我的代码:

class HomeScreen extends StatefulWidget {
  const HomeScreen({super.key});

  @override
  State<HomeScreen> createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  final user = FirebaseAuth.instance.currentUser;
  
  String type = "";

  void checkUser() async {
    await FirebaseFirestore.instance
        .collection('users')
        .doc(user!.uid)
        .get()
        .then(
      (DocumentSnapshot documentSnapshot) {
        if (documentSnapshot.exists) {
          var data = documentSnapshot.data();
          var res = data as Map<String, dynamic>;
          if (res["type"] == "Salarié") {
            print('Salarié');
          } else if (res["type"] == "Auto entrepreneur") {
            print('Auto entrrepreneu');
          } else {
            showDialog<String>(
                context: context,
                builder: (_) => StatefulBuilder(
                      builder: (modalContext, modalSetState) => AlertDialog(
                        title: const Text('Choissisez votre type'),
                        content: const Text('Choisir votre type de user'),
                        actions: <Widget>[
                          TextButton(
                            onPressed: () {
                              setState(() {
                                type = "Salarié";
                              });
                              Navigator.pop(context, 'Cancel');
                            },
                            child: const Text('Salarié'),
                          ),
                          TextButton(
                            onPressed: () {
                              setState(() {
                                type = "Auto entrepreneur";
                              });
                              Navigator.pop(context, 'OK');
                            },
                            child: const Text('Auto-entrepreneur'),
                          ),
                        ],
                      ),
                    ));

            return FirebaseFirestore.instance
                .collection("users")
                .doc(user!.uid)
                .update({
              "type": type,
            });
          }
        } else {}
      },
    );
  }

  @override
  void initState() {
    super.initState();
    checkUser();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(...);

不过,所有值都在StatefulWidget以内,我不确定这样做是否正确,因为值不会改变!我很感谢你的帮助.

编辑:我在initState()内调用此方法

推荐答案

ShowDialog不是同步操作,代码基本上发送对话框并立即继续.为了解决这一问题,我不得不添加异步和等待,这就像一个护身符.

Flutter相关问答推荐

我可以在iOS设备上使用Ffltter实现Google Pay按钮吗?

DART 3.3:为什么扩展类型不起作用?

Fighter:基于ChangeNotifier状态动态更新AppBar中的图标

在保持标高=1的情况下更改AppBar立面 colored颜色 /遮罩

点击表情符号按钮后,Flutter 文本域文本编辑控制器将文本恢复为原始值

有没有什么方法可以加快在Flutter 中加载Quill HTML编辑器的速度?

为什么PUT方法没有发出任何响应?

如何在Flutter Webview包中触发基于URL导航的事件

如何在Flutter中将背景 colored颜色 更改为黑色?

参数类型void Function()无法分配给参数类型void Function(LongPressEndDetails)?

自定义绘画未显示 - Flutter

Riverpod 2.3.6:AutoDisposeNotifier和ref.onDispose自动处理

Flutter 中的 Provider 不会在第一次构建 App 时返回

如何更改 DropDownMenu 的显示方向?

为什么 ref.watch(otherProvider.stream) 在 Riverpod 2.x 中被弃用并且将在 3.x 中被删除?

如何为文本主题设置多种 colored颜色 ?

Flutter 活跃的互联网连接

我的主屏幕上的 FutureBuilder 不断重新加载(但仅在其他屏幕上时)?

如何在Flutter 中制作自定义微调器?

如何在Flutter 中专注于列表视图中最新添加的项目