🐕
mono さんから学んだこと
これは mono さんっていう Flutter 超絶スーパーハイクラスエンジニア様のGitHubで弱小エンジニアが学んだ事の記録です。
ref.listen
ref.listen<bool>(cartProvider.select((s) => s.isEmpty), (_, shouldPop) {
pop();
});
ただの provider を入れるだけかと思ってたけど
bool とかを設定できるなんて・・・
notifier の概念が崩壊
notifier
@riverpod
class Cart extends _$Cart {
@override
CartState build() => CartState();
void add(String id) => state = state.added(id);
void delete(String id) => state = state.deleted(id);
}
state
@freezed
class CartState with _$CartState {
factory CartState([@Default(<String, int>{}) Map<String, int> map]) =
_CartState;
CartState._();
CartState added(String id) {
return CartState({
...map,
id: (map[id] ?? 0) + 1,
});
}
CartState deleted(String id) {
return CartState(
{
...map,
id: map[id]! - 1,
}..removeWhere((key, quantity) => quantity <= 0),
);
}
late final itemIds = map.keys.toList()..sort((a, b) => a.compareTo(b));
late final totalQuantity = map.values.fold<int>(
0,
(sum, quantity) {
return sum + quantity;
},
);
late final isEmpty = totalQuantity <= 0;
int quantity(String id) => map[id] ?? 0;
}
なにこれ。
処理とかは riverpod の notifier 内で書くものって思ってたけど
state クラスの中で書いてる。
ヤバい。かっこよすぎる。
Discussion