- WEB+DB PRESS Vol.106 の特集1の「実践Android/iOSアプリ設計」のサンプルをFlutterではどう書くのかというサンプル
- 元のサンプルは サポートページ:WEB+DB PRESS Vol.106 からダウンロード可能
- 以下のパッケージを組み合わせたパターン
- Riverpod の hooks_riverpod
- flutter_hooksは
ref.watch()
のためだけに利用
- flutter_hooksは
- state_notifier
- freezed
- Riverpod の hooks_riverpod
- 自動テストをほぼ網羅
- 自動スモークテスト(Widgetテスト)も対応
- JSON APIは http://www.mocky.io で用意
商品リスト | カート |
---|---|
![]() |
![]() |
Generated by https://github.com/rrousselGit/riverpod/tree/master/packages/riverpod_graph
flowchart TB
subgraph Arrows
direction LR
start1[ ] -..->|read| stop1[ ]
style start1 height:0px;
style stop1 height:0px;
start2[ ] --->|listen| stop2[ ]
style start2 height:0px;
style stop2 height:0px;
start3[ ] ===>|watch| stop3[ ]
style start3 height:0px;
style stop3 height:0px;
end
subgraph Type
direction TB
ConsumerWidget((widget));
Provider[[provider]];
end
_ListView((_ListView));
itemIdsProvider ==> _ListView;
_CartButton((_CartButton));
cartTotalQuantityProvider ==> _CartButton;
cartEmptyProvider ==> _CartButton;
ItemTile((ItemTile));
itemsProviders ==> ItemTile;
itemQuantityProviders ==> ItemTile;
_AddButton((_AddButton));
hasStockProviders ==> _AddButton;
cartMapProvider -.-> _AddButton;
CartPage((CartPage));
cartEmptyProvider --> CartPage;
_ListView((_ListView));
cartItemIdsProvider ==> _ListView;
CartHeader((CartHeader));
cartTotalPriceLabelProvider ==> CartHeader;
CartTile((CartTile));
itemsProviders ==> CartTile;
cartQuantityProviders ==> CartTile;
cartMapProvider -.-> CartTile;
App((App));
routerProvider ==> App;
itemStocks[[itemStocks]];
httpClientProvider ==> itemStocks;
httpClientProvider[[httpClientProvider]];
itemStockMapProvider[[itemStockMapProvider]];
itemStocks ==> itemStockMapProvider;
itemMapProvider[[itemMapProvider]];
itemStockMapProvider ==> itemMapProvider;
itemIdsProvider[[itemIdsProvider]];
itemStocks ==> itemIdsProvider;
itemStockProviders[[itemStockProviders]];
itemStockMapProvider ==> itemStockProviders;
itemsProviders[[itemsProviders]];
itemStockProviders ==> itemsProviders;
itemQuantityProviders[[itemQuantityProviders]];
itemStockProviders ==> itemQuantityProviders;
cartMapProvider ==> itemQuantityProviders;
cartMapProvider[[cartMapProvider]];
hasStockProviders[[hasStockProviders]];
itemQuantityProviders ==> hasStockProviders;
cartEmptyProvider[[cartEmptyProvider]];
cartTotalQuantityProvider ==> cartEmptyProvider;
cartTotalQuantityProvider[[cartTotalQuantityProvider]];
cartMapProvider ==> cartTotalQuantityProvider;
cartTotalPriceLabelProvider[[cartTotalPriceLabelProvider]];
cartTotalPriceProvider ==> cartTotalPriceLabelProvider;
cartTotalPriceProvider[[cartTotalPriceProvider]];
itemMapProvider ==> cartTotalPriceProvider;
cartMapProvider ==> cartTotalPriceProvider;
cartQuantityProviders[[cartQuantityProviders]];
cartMapProvider ==> cartQuantityProviders;
cartItemIdsProvider[[cartItemIdsProvider]];
cartMapProvider ==> cartItemIdsProvider;
routerProvider[[routerProvider]];