一尘不染

如何从Flutter中获取FutureProvider的数据

flutter

我正在尝试在使用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直接从数据库中获取数据,但是我知道它应该通过提供程序传递,因此我想使其正确


阅读 1534

收藏
2020-08-13

共1个答案

一尘不染

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());
  }
);
2020-08-13