在颤动的 ListView.builder 中,我得到了 Null 值

Posted

技术标签:

【中文标题】在颤动的 ListView.builder 中,我得到了 Null 值【英文标题】:In flutter ListView.builder I got Null value 【发布时间】:2021-07-02 02:41:51 【问题描述】:

我创建了一个名为“记录”的地图,当用户按下“保存”按钮时,该地图的键取自用户,值来自我在代码中的计时器。 但问题是当我创建一个 ListView.builder 将此地图索引导出到卡片时,它给了我每个卡片索引中的 Null 值! 我怎样才能显示真正的价值而不是 Null ?!!

这是我的代码:

var _item;
  List listCount = [];

  Map<String, dynamic> records = ;
  String name;

  createAlertDialog(buildContext, context) 
    TextEditingController controller;
    return showDialog(
      context: context,
      // barrierDismissible: false,
      builder: (context) 
        return AlertDialog(
          title: Text(
            'Type record name',
            textAlign: TextAlign.center,
            style: TextStyle(fontSize: 18.0),
          ),
          content: TextField(
              controller: controller,
              onChanged: (value) 
                name = value;
              ),
          actions: [
            MaterialButton(
              elevation: 5.0,
              child: Text('Save'),
              onPressed: () 
                listCount.add(_item);
                print(_item);
                records[name] = _item;
                print(records);
                Navigator.pop(context);
              ,
            ),
            MaterialButton(
              elevation: 5.0,
              child: Text('Cancel'),
              onPressed: () 
                Navigator.pop(context);
              ,
            ),
          ],
        );
      ,
    );
  

变量 _item 正在从另一个站点获取它的值,请参见:

StreamBuilder<int>(
                          stream: _stopWatchTimer2.rawTime,
                          initialData: 0,
                          builder: (context, snap) 
                            final value = snap.data;
                            final displayTime = StopWatchTimer.getDisplayTime(
                                value,
                                hours: _isHours2);
                            _item = displayTime;
                            return Padding(
                              padding: EdgeInsets.all(5.0),
                              child: Text(displayTime,
                                  style: TextStyle(
                                      fontSize: 30.0, color: Colors.white)),
                            );
                          ,
                        ),

我在这里创建 ListView.builder:

ListView.builder(
              scrollDirection: Axis.vertical,
              shrinkWrap: true,
              itemCount: records.length,
              itemBuilder: (context, index) 
                return MyCard(
                  colour: Colors.cyanAccent,
                  maker: Container(
                    width: 250.0,
                    height: 75.0,
                    child: Text(
                      '$records[index]',
                      style: TextStyle(fontSize: 25.0),
                      textAlign: TextAlign.center,
                    ),
                  ),
                );
              ,
            ),

链接中的图片是我的应用程序的屏幕截图。

Image

【问题讨论】:

【参考方案1】:

查看最初为 null 的 _item 变量。您没有为它分配任何价值。请检查您的代码。您正在为您的记录分配一个空值,因为 _item 没有被赋予任何值。

onChanged: (value)
  _item = value;

【讨论】:

实际上我给出了值,我在控制台中打印它们但是当试图在应用卡中显示它时,它失败并显示 Null !! 您能否发布完整的代码以显示记录列表以及为变量_item 赋值的位置。此外,您能否打印列表计数的最后一个值以确保它也不会返回 null 我已经编辑了我的帖子,并在代码中显示了变量 _item 获取它的值的位置。如果有必要,我可以发布整个代码吗?在同一页中大约有 278 行【参考方案2】:

你没有给 _item 变量赋值,我假设你想像这样在 onChanged 事件中赋值:

onChanged: (value) 
                _item = value;
              

或者您可能想将名称添加到列表中?

【讨论】:

实际上我给出了值,我在控制台中打印它们但是当试图在应用卡中显示它时,它失败并显示 Null !!【参考方案3】:

如果我理解正确,您已根据保存按钮 onPressed 事件中的名称变量将项目值存储到记录中。但是您正在通过 ListView 索引值获取记录。因此,在基于该索引的记录集合中没有找到记录。所以它返回空值。

提供索引以将项目存储在“保存”按钮中,而不是名称。或者根据 ListView 构建器中的名称而不是索引来检查记录。

【讨论】:

以上是关于在颤动的 ListView.builder 中,我得到了 Null 值的主要内容,如果未能解决你的问题,请参考以下文章

如果数据发生变化,颤动如何更新 Listview.builder

如何刷新 ListView.builder 颤动

无法在颤动中过滤 listview.builder 的列表

如何构建包含 ListView.Builder 的自定义行,以在颤动中构建 ElevatedButton?

如何在颤动中为 listview.builder 制作列表视图?

ListView - 卡片(颤动布局)