🐈
FlutterのStateNotifierで型安全にStateの差分を取得するMixin
背景
- StateNotifierを扱っていると稀によくstateの変更の前後の様子を見たい時がある
- StateNotifier#streamが生えたのでこれを使うmixin用意すれば捗りそう
解決策
rxdart依存ですが、こんなものを用意しておくと良さそうです
import 'package:rxdart/rxdart.dart';
import 'package:state_notifier/state_notifier.dart';
class StateDiff<T> {
final T prev;
final T current;
StateDiff(this.prev, this.current);
}
mixin StateDiffableMixin<T> on StateNotifier<T> {
Stream<StateDiff<T>> get stateDiff => ZipStream([stream, stream.skip(1)],
(zipper) => StateDiff<T>(zipper[0], zipper[1])).asBroadcastStream();
}
使用したいときにmixinするだけです
class HogeStateNotifier extends StateNotifier<HogeState> with StateDiffableMixin {...}
Discussion