🐈

FlutterのStateNotifierで型安全にStateの差分を取得するMixin

2020/10/05に公開

背景

  • 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