【问题标题】:Flutter dynamic checkbox will not changeFlutter 动态复选框不会改变
【发布时间】:2018-08-16 02:12:03
【问题描述】:

我正在动态构建一个 CheckboxListTile,它运行良好,但是当我单击复选框时,我会收到此错误

The following assertion was thrown building NotificationListener<KeepAliveNotification>:
'package:flutter/src/rendering/object.dart': Failed assertion: line 2730 pos 14:
'_debugUltimatePreviousSiblingOf(after, equals: _firstChild)': is not true.

似乎与重复键有关,所以我在我的顶级列表视图中添加了一个键并且错误停止了,但是现在

我的复选框列表是使用此代码构建的

new FutureBuilder(
            future: _getRefDocs(),
            builder: (BuildContext context, AsyncSnapshot<List> snapshot) {
              switch (snapshot.connectionState) {
                case ConnectionState.none:
                  return new Text('Waiting to start');
                case ConnectionState.waiting:
                  return new Text('');
                default:
                  if (snapshot.hasError) {
                    return new Text('Error: ${snapshot.error}');
                  } else {
                    //myInitialData = snapshot.data;
                    return new ListView(
                      key: new Key(key['docid'].toString())
                      children: snapshot.data.map((dynamic key) {
                        bool myvalue = false;
                        if (key['selected'] == 1) {
                          myvalue = true;
                          selectdocs.add(key['docid']);
                        }
                        return new CheckboxListTile(
                            title: new Text(key['docname']),
                            value: myvalue,
                            //selected: myvalue,
                            onChanged: (bool value) {
                              setState(() {
                                myvalue = value;
                              });

                              if (value == true) {
                                selectdocs.add(key['docid']);
                              } else {
                                selectdocs.remove(key['docid']);
                              }
                            }
                        );
                      }).toList(),
                    );
                  }
              }
            });

现在,但是在我添加键之后,键盘不会弹出,单击时复选框不会更改,当我单击它时,它会弹回顶部的文本框焦点。如果我删除密钥,那么每次单击复选框时都会出现错误。

有什么想法吗?

【问题讨论】:

  • 为什么selected: myValue这一行被注释掉了?这就是控制复选框是否被选中的原因。
  • 我尝试了两种方法,它没有改变错误,或者当我通过向列表视图添加键来消除错误时,它仍然跳回顶部并且键盘不起作用。我还添加了一个滚动控制器,但没有帮助。
  • 好的,检查一下
  • @Robert:你找到解决方案了吗?我有同样的问题。
  • 看来错误指向你的NotificationListener。我试图检查您的代码,但找不到您调用NotificationListener 小部件的确切位置。如果您可以分享您的complete 代码,是否有可能?

标签: flutter


【解决方案1】:

此问题似乎已在此GitHub issue ticket 中提到的更新方式上得到修复。我建议尝试使用最新版本的 Flutter SDK 并尝试再次运行它。如果您仍然遇到问题,如果您能够提供一个我们可以运行的minimal repro,将会有所帮助。

【讨论】:

    猜你喜欢
    • 2013-08-30
    • 2020-06-04
    • 2019-12-14
    • 2014-09-24
    • 2016-02-02
    • 2017-11-13
    • 2016-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多