【问题标题】:Flutter: Switch inside CupertinoActionSheet no updates stateFlutter:在 CupertinoActionSheet 内切换没有更新状态
【发布时间】:2020-11-15 09:47:39
【问题描述】:

我正在尝试在颤振中显示一个包含 Switch 的 showCupertinoModalPopup,它可以正确显示,但不会更新 Switch。为什么 Switch 在 CupertinoActionSheet 更新后不保持新状态?

https://github.com/flutter/flutter/issues/62264

  Future<int> countAsReturnVisit(CalendarEvent event) async {
        bool remember = false;
    
        var res = await showCupertinoModalPopup(
          context: context,
          builder: (BuildContext cnt) {
            return Material(
              color: Colors.transparent,
              child: CupertinoActionSheet(
                message: Wrap(
                  children: <Widget>[
                    Text(
                        'Do you want to count \'Completed\' events as part of Return Visits?'
                            .i18n),
                    Container(
                      height: 50,
                      child: Row(
                        mainAxisAlignment: MainAxisAlignment.spaceBetween,
                        children: <Widget>[
                          Text('Remember this selection'.i18n),
                          Switch(
                            value: remember,
                            onChanged: (value) {
                              setState(() {
                                remember = value;
                              });
                            },
                            activeTrackColor: Colors.lightBlue[200],
                            activeColor: Colors.blue,
                          ),
                        ],
                      ),
                    ),
                  ],
                ),
                actions: <Widget>[
                  CupertinoActionSheetAction(
                    child: Text('No'.i18n),
                    onPressed: () {
                      Navigator.pop(context, 0);
                    },
                  ),
                ],
                cancelButton: CupertinoActionSheetAction(
                  isDefaultAction: true,
                  child: Text('Yes'.i18n),
                  onPressed: () {
                    Navigator.pop(context, 1);
                  },
                ),
              ),
            );
          },
        ) as int;
    
        if (res != null && res == 1) {
          setCalendarAlwaysCountAsRrtuVist();
        }
    
        return res;
      }

【问题讨论】:

    标签: flutter


    【解决方案1】:

    setState 只会更新当前 StatefulWidget 的 Widget Build 函数。

    您应该使用 StatefulBuilder。

    对于您的情况,只需将 StatefulBuilder 添加为 Switch 小部件的父级,并在您想要更新 StatefulBuilder 的子级时使用 StateSetter。 它只会更新在 StateFulBuilder builder 函数下定义的小部件树。


    看到这个问题的答案:63008037

    有关 StatefulBuilder 的更多信息,请访问 StateFulBuilder 文档页面。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-08-09
      • 2018-07-28
      • 2020-09-04
      • 1970-01-01
      • 2020-10-10
      • 2020-05-06
      • 2021-02-19
      相关资源
      最近更新 更多