私はプロバイダを使用して管理されている私の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を使用しましたが、それを正しくすることを望みます
私の例では、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),
);
},
);
})));
_