我也为接收者添加了条件,使其不为空,但错误仍然存在。这是我无法解决的 2 个错误。请帮助!我正在制作“Notes”应用程序,我将值存储在 sqflite db 中。
body: FutureBuilder(
future: getNotes(),
builder: (context, noteData) {
switch (noteData.connectionState) {
case ConnectionState.waiting:
{
return Center(child: CircularProgressIndicator());
}
case ConnectionState.done:
{
if (noteData.data == null) {
return Center(
child: Text("You don't have any notes yet, create one!"),
);
} else {
return Padding(
padding: EdgeInsets.all(8.0),
child: ListView.builder(
itemCount: noteData.data.length, //Error
itemBuilder: (context, index) {
String title = noteData.data[index]['title'];// Error-The method '[]' can't be
//unconditionally invoked because the receiver //can be 'null'.
String body = noteData.data[index]['body'];
String creation_date =
noteData.data[index]['creation_date'];
int id = noteData.data[index]['id'];
答案 0 :(得分:0)
这与 Dart 空安全有关。解决此问题的一种方法是使用 bang 运算符,因为您确定 noteData.data 永远不会为空(您在使用前正在检查),例如:
noteData.data!.length
、noteData.data![index]['title']
等。
这个解决方案看起来很麻烦,所以我建议在使用 noteData.data
之前创建一个局部变量:
...
} else {
final data = noteData.data; // noteData.data! could be needed here, not sure
return Padding(
padding: EdgeInsets.all(8.0),
child: ListView.builder(
itemCount: data.length,
...
),
),
);
}
答案 1 :(得分:0)
xargs -n2
这是我的笔记类
Future<dynamic> getNotes() async {
final db = await database;
var res = await db!.query("notes");
if (res.length == 0) {
return null;
} else {
var resultMap = res.toList();
return resultMap.isNotEmpty ? resultMap : null;
}
}