在 flutter ListView.builder 中我得到了 Null 值

In flutter ListView.builder I got Null value

我创建了一个名为“records”的地图,该地图的键是在按下 'save' 按钮时从用户那里获取的,值来自我代码中的时间计数器。 但问题是当我创建一个 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,
                    ),
                  ),
                );
              },
            ),

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

Image

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

onChanged: (value){
  _item = value;
}

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

onChanged: (value) {
                _item = value;
              }

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

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

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