如何在flutter中从FutureProvider获取数据

Bas*_*ous 8 dart flutter flutter-provider

我正在尝试在使用 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),
              );
            },
          ),
        ),
      ),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

现在我的应用程序正在按我想要的方式运行,但不是按照它应该如何运行,我使用 FutureBuilder 直接从数据库中获取数据,但我知道它应该通过提供程序来,所以我想使它正确

Rém*_*let 11

FutureProviderFuture返回的结果暴露builder给其后代。

因此,使用以下内容FutureProvider

FutureProvider<int>(
  initialData: 0,
  builder: (_) => Future.value(42),
  child: ...
)
Run Code Online (Sandbox Code Playgroud)

可以通过以下方式获得当前值:

Provider.of<int>(context)
Run Code Online (Sandbox Code Playgroud)

或者:

Consumer<int>(
  builder: (context, value, __) {
    return Text(value.toString());
  }
);
Run Code Online (Sandbox Code Playgroud)