主体可能正常完成,导致返回"null",但返回类型"Widget"可能是不可为null的类型。尝试在末尾添加return或throw语句。
我目前正在使用:
environment:
sdk: ">=2.17.6 <3.0.0"
在我的pubspec.yaml
我的参考代码:
import 'package:algorithm_learn/sqldb.dart';
import 'package:flutter/material.dart';
class Home extends StatefulWidget {
const Home({super.key});
@override
State<Home> createState() => _HomeState();
}
class _HomeState extends State<Home> {
SqlDb sqlDb = SqlDb();
Future<List<Map>> readData() async {
List<Map> response = await sqlDb.readData("SELECT * FROM 'Coing'");
return response;
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('HomePage'),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
Navigator.of(context).pushNamed("addperson");
},
child: const Icon(Icons.add),
),
body: Container(
child: ListView(
children: [
// MaterialButton(
// onPressed: () async {
// await sqlDb.mydeleteDatabase();
// },
// child: const Text("Delete Database"),
// ),
FutureBuilder(
future: readData(),
builder:
(BuildContext context, AsyncSnapshot<List<Map>> snapshot) { (ERROR IS HERE)
if (snapshot.hasData) {
return ListView.builder(
itemCount: snapshot.data!.length,
physics: NeverScrollableScrollPhysics(),
shrinkWrap: true,
itemBuilder: (context, i) {
return Card(
child: ListTile(
title: Text("${snapshot.data![i]['first_name']}"),
subtitle: Text("${snapshot.data![i]['last_name']}"),
trailing: Text("${snapshot.data![i]['color']}"),
),
);
},
);
}
})
],
),
),
);
}
}
我尝试添加"!"这确保了不会有"null"值,但这不起作用,只会让情况变得更糟。
我还尝试将环境更改为:
environment:
sdk: ">=2.17.6 <3.0.0"
但这也让事情变得更糟。
未来生成器的生成器将需要返回一个小部件。您添加了一个带有返回的if条件。但是如果它没有进入这个条件,那么就没有返回的小部件
尝试添加一个else条件并返回一个小部件。也许是一个循环进度指示器或Sizedbox.shrink((
FutureBuilder(
future: readData(),
builder:
(BuildContext context, AsyncSnapshot<List<Map>> ((ERROR IS HERE)) snapshot) {
if (snapshot.hasData) {
return ListView.builder(
itemCount: snapshot.data!.length,
physics: NeverScrollableScrollPhysics(),
shrinkWrap: true,
itemBuilder: (context, i) {
return Card(
child: ListTile(
title: Text("${snapshot.data![i]['first_name']}"),
subtitle: Text("${snapshot.data![i]['last_name']}"),
trailing: Text("${snapshot.data![i]['color']}"),
),
);
},
);
}
else{
return SizedBox.shrink();//<---here
}
})
添加一个else子句并以Text("未找到数据"(或形式返回一些小部件