web-dev-qa-db-ja.com

FlutterのFutureProviderからデータを取得する方法

私はプロバイダを使用して管理されている私のFlutterアプリでローカルデータベースサポートを実装しようとしています、今、私はデータの検索を状態管理パターンに従いますが、私は失敗しました。

私はこれを達成するために伝統的なプロバイダーを作ろうとしましたが、アプリはデータベースへのリクエストループで立ち往生しているので、いくつかの検索の後、私は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を使用しましたが、それを正しくすることを望みます

8

私の例では、APIを要求するためにFutureProviderのcreateパラメータを使用しました。

 FutureProvider(
        create: (_) => peopleService.getAllSurvivor(),
        child: Consumer<List<Survivor>>(builder: (context, survivors, _) {
          return survivors == null
              ? Center(child: CircularProgressIndicator())
              : ListView.builder(
                  itemCount: survivors.length,
                  itemBuilder: (context, index) {
                    var survivor = survivors[index];
                    return ListTile(
                      title: Text(survivor.name),
                      subtitle: Text(survivor.gender),
                      leading: Icon(Icons.perm_identity),
                    );
                  },
                );
        })));
 _
0
Bruno Camargos