我正在尝试在使用Provider管理的flutter应用程序中实现对本地数据库的支持,现在我想使数据检索服从状态管理模式,但是我一直未能做到。
我尝试创建一个传统的Provider来实现此目的,但是应用程序陷入了对数据库的请求循环中,因此在进行一些搜索之后,我找到了FutureProvider,但是我找不到从加载的数据中获取快照的方法。
class _ReceiptsRouteState extends State<ReceiptsRoute> { List<Receipt> receipts = []; @override Widget build(BuildContext context) { return FutureProvider( initialData: List(), builder: (_){ return DBProvider().receipts().then((result) { receipts = result; }); }, child: Scaffold( appBar: AppBar( title: Text(AppLocalizations.of(context).history), ), body: Container( child: ListView.builder( itemBuilder: (context, position) { final item = receipts[position]; return ListTile( title: Text(item.date), ); }, ), ), ), ); } }
现在我的应用程序可以按我想要的方式运行,而不是应如何运行,我使用FutureBuilder直接从数据库中获取数据,但是我知道它应该通过提供程序传递,因此我想使其正确
FutureProvider公开的结果Future通过返回builder到它的后代。
FutureProvider
Future
builder
因此,使用以下命令FutureProvider:
FutureProvider<int>( initialData: 0, builder: (_) => Future.value(42), child: ... )
可以通过以下方式获取当前值:
Provider.of<int>(context)
要么:
Consumer<int>( builder: (context, value, __) { return Text(value.toString()); } );