【问题标题】:In flutter ListView.builder I got Null value在颤动的 ListView.builder 中,我得到了 Null 值
【发布时间】: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

【问题讨论】:

    标签: android flutter listview dart


    【解决方案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 构建器中的名称而不是索引来检查记录。

    【讨论】:

      猜你喜欢
      • 2021-05-26
      • 1970-01-01
      • 2018-12-11
      • 2021-10-19
      • 2022-01-14
      • 2020-09-29
      • 2021-12-22
      • 2020-05-12
      • 2021-01-01
      相关资源
      最近更新 更多