ボケ防止日記

こつこつ続けたい

Flutter状態管理ライブラリ

モチベーション

  • Flutterアプリ作成のチュートリアル、作成をするにあたって調査していると、Flutterアプリの状態管理にはProvider及びその後継であるRiverpodを使用するのがセオリーだという記事を見た。
  • どこでも手放しに称賛されているので、とりあえず導入、使用方法を理解しておくべきだと判断。
  • そのうえで、メリデメについて自分なりに考察したい。

導入

dependencies:
  flutter_riverpod:
flutter pub get

使用方法

例えばAmplifyのInitializeをFutreProviderに、状態をStateProviderに持たせようとするとこんな感じだろうか。

final amplifyConfiguredStateProvider = StateProvider<bool>((ref) => false);
final amplifyConfigExecutorProvider = FutureProvider<bool>((ref) async {

  final _amplify = Amplify;
  _amplify.addPlugins([AmplifyAuthCognito()]);

  try {
    await _amplify.configure(amplifyconfig);
    final _amplifyConfiguredState = ref.watch(amplifyConfiguredStateProvider);
    _amplifyConfiguredState.state = true;
    return true;
  } on AmplifyAlreadyConfiguredException {
    return true;
  } catch (error, stack) {
    rethrow;
  }
});

void main() {
  runApp(ProviderScope(child: AppWidget()));
}

class AppWidget extends ConsumerWidget {
  @override
  Widget build(BuildContext context, ScopedReader watch) {
    final AsyncValue<bool> _amplifyConfigExecutor =
        watch(amplifyConfigExecutorProvider);
    return MaterialApp(
        home: Scaffold(
            appBar: AppBar(title: const Text('Example')),
            body: Center(
              child: _amplifyConfigExecutor.when(
                  data: (configured) => Text('$configured'),
                  loading: () => const CircularProgressIndicator(),
                  error: (error, stack) => Text('Error: $error')),
            )));
  }
}

所感

  • 正直いまのところ何が嬉しいのかさっぱり分からない。
  • アプリが大きくなってきたら恩恵を受けられるようになる?
  • もしくはテストを書き始めたとき?

その他

  • Exceptionの取り扱い等が雑なので修正しないと。。
  • ConsumerWidgetの範囲を狭めればリビルドが早いらしい。設計時になるべくリビルド範囲を狭くするように設計したほうがよさそう。
  • 他にもスタンダードになっている便利なライブラリの捜索をしたいところ。