LoginSignup
1
0

More than 1 year has passed since last update.

Flutterの sound null safety 対応でやったこと

Posted at

これは何?

Flutterの sound null safety で対応した時にやったことをまとめたもの

アプリの構成

  • 状態管理
    • Riverpod
    • StateNotifier
    • freezed

対応の流れ

公式がまとめてくれているのでまずはこちらを読むのが良い

1. 使っているライブラリが対応しているかの確認

趣味プロダクトでどう対応するか調査している面もあったので、定期的に使っているライブラリが対応しているかの確認した

dart pub outdated --mode=null-safety

2. 自動マイグレーションを実行する

dart migrate

※ 今回の構成だとこのコマンドで単純にマイグレーションできなかったので 3. の手動対応で行った

3. マイグレーションできなかった箇所を手動対応する

Riverbed

StateNotifierProviderの書き方が変わったので対応

状態もジェネリクスで追加で指定する必要がある

Before:

final provider = StateNotifierProvider<MyStateNotifier>((ref) {
  return MyStateNotifier();
});

After:

final provider = StateNotifierProvider<MyStateNotifier, MyModel>((ref) {
  return MyStateNotifier();
});
StateNotifierの取得方法、StateNotiferの状態を取得する方法が変更された
// 今まで
Widget build(BuildContext context, ScopedReader watch) {
  StateNotifier notifier = watch(provider);
}

Widget build(BuildContext context, ScopedReader watch) {
  State state = watch(provider.state);
}

// 今後
Widget build(BuildContext context, ScopedReader watch) {
  StateNotifier notifier = watch(provider.notifier);
}

Widget build(BuildContext context, ScopedReader watch) {
  State state = watch(provider.state);
}

Riverpodはマイグレーションツールが提供されている

freezed

  • 初期値がないフィールドは nullableにする
  • 必須のフィールドは @require から required に書き換える
  • @latelate に書き換える
@freezed
abstract class Sample with _$Sample {
  factory Sample({
    @required String value1,
    String value2,
  }) = _Sample;

  Sample._();

  @late
  String get value3 => value1 + (value2 ?? '');
}

@freezed
abstract class Sample with _$Sample {
  factory Sample({
    required String value1,
    String? value2,
  }) = _Sample;

  Sample._();

  late final String value3 = value1 + (value2 ?? '');
}

まとめ

  • Null Safety 対応のライブラリも増えてきておりそろそろ対応できるようになってきた
  • マイグレーションコマンドは用意されているが使っているライブラリによっては利用できなくなる
  • 各ライブラリごとに対応方法のドキュメントは書かれているので参考にすると良い
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0