在 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 构建器中的名称而不是索引检查记录。
我创建了一个名为“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 构建器中的名称而不是索引检查记录。