【发布时间】:2021-03-28 09:57:43
【问题描述】:
我正在尝试实现提供程序模式,但我正在努力将其与 sqflite 数据库集成。 ChangeNotifier 类从数据库中获取字符串列表,然后将其与 ListView 一起显示。我想问题是当 ListView 构建小部件时,ChangeNotifier 类尚未初始化列表,因此应用程序崩溃。我该如何解决这个问题?
class FavouritesProvider with ChangeNotifier {
List<String> _favourites;
List<String> get favourites => [..._favourites];
FavouritesProvider() {
fetchAndSetFav();
}
Future<void> fetchAndSetFav() async {
final data = await DBHelper.instance.getFavourites();
_favourites = data;
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: ChangeNotifierProvider(
create: (_) => FavouritesProvider(),
child: Container (
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.bottomCenter,
end: Alignment.topCenter,
colors: [
Colors.blue[200],
Colors.blue
],
stops: [0.0,1]
)
),
child: Consumer<FavouritesProvider>(
builder: (context, favouritesProvider, child) => ListView.builder (
itemCount: favouritesProvider.favourites.length,
itemBuilder: (context, index) {
return Container(
padding: EdgeInsets.fromLTRB(10, 10, 10, 0),
width: double.maxFinite,
child: FavouritePositionWidget(key: new Key(index.toString()), streetName: favouritesProvider.favourites[index])
);
},
)
)
)
)
);
}
但我得到了这个错误
The following NoSuchMethodError was thrown building Consumer<FavouritesProvider>(dirty, dependencies: [_InheritedProviderScope<FavouritesProvider>]):
The getter 'iterator' was called on null.
Receiver: null
Tried calling: iterator
【问题讨论】:
标签: flutter flutter-provider sqflite