Open25

flutterメモ

kenmakenma

AsyncNotifierの使い方。
https://codewithandrea.com/articles/flutter-riverpod-async-notifier/

引数を渡すには、build() の引数を追加

@riverpod
class SomeOtherController extends _$SomeOtherController {
  @override
  // you can add named or positional parameters to the build method
  Future<String> build(int someValue) async {
    final someString = await someFutureThatReturnsAString(someValue);
    return anotherFutureThatReturnsAString(someString);
  }

  // other methods here
}

で、こう使う

// this provider takes a positional argument of type int
final state = ref.watch(someOtherControllerProvider(42));
kenmakenma

riverdpod や freezed を使っていて build_runner をしたときに、次のエラーが出る場合、

You are missing a required dependency on json_annotation in the "dependencies" section of your pubspec with a lower bound of at least "4.8.0"

次のコマンドで json_annotaionを追加する。

flutter pub add json_annotation

エラーが出ていても動いていたが気持ち悪いので治す。

kenmakenma

ページ遷移したときに、 AppBarに 戻る(←)アイコンではなく、閉じる(✕)アイコンを表示したい場合、

        GoRoute(
          path: 'setting',
          builder: (BuildContext context, GoRouterState state) {
            return const XXXView();
          },
          routes: [
            GoRoute(
              path: 'details',
              // pageBuilderを使って、MaterialPage (fullScreenDialog: true) を返す。
              pageBuilder: (BuildContext context, GoRouterState state) {
                return const MaterialPage(
                  fullscreenDialog: true,
                  child: YYYView(),
                );
kenmakenma

Android でrelease モードの場合、 "Failed host lookup" エラーが発生する。

AndroidManifest.xml に INTERNETパーミッションを追加する。

<uses-permission android:name="android.permission.INTERNET"/>

debugモードだと、INTERNETパーミッションがついているので問題ない。 不思議だ

kenmakenma

go_router で、

/             -- HomeScreen()
  details -- DetailsScreen()

/error    -- ErrorScreen()

みたいな構造があって、 /error から /detailsgo() で 遷移すると、

HomeScreen.build() が呼ばれて、次に DetailsScreen.build() が呼ばれて、HomeScreen の上にpush される。
ページがスタックに積まれるからそういうものか。

パフォーマンスが悪化しそうだから、子ページに直接遷移はしないほうがいいのかな。

kenmakenma

Scaffold に ボトムナビゲーションバーするには、

bottomNavigationButton プロパティを使う。

body を ボトムナビゲーションバー の裏に回すようにするには、 extendBody: true をセットする。そして、ボタンの背景色を透明に。

https://stackoverflow.com/a/61787962/1198920

kenmakenma

page が現在のtopページかをチェックする。
https://stackoverflow.com/a/70386961/1198920

flutter は、ページ遷移をスタックに積むので、スタックのtopページ以外のページでも、エラーが発生したときに、snackbarなどを表示するとおかしなことになる。