アプリ開発・ゲーム開発のための勉強ブログ

FlutterとUnrealEngineの勉強をしています。

【Flutter】よく出てくる引数のvalueとはなんなのか

valueウィジェットのプロパティやコンストラクタの一部として使用される。

 

テキストフィールドやチェックボックスなどの入力ウィジェットでは、ユーザーが入力した値を表示するために "value" プロパティが使われることがあります。

 

valueを引数として渡し処理

 

TextField(
  controller: _controller,
  decoration: InputDecoration(
    labelText: 'Enter your username',
  ),
  onChanged: (value) {
    // ここで入力された値を取得し処理する
    print('Input value: $value');
  },
),

【Flutter】StatefulWidgetのsetState()の使い方 :状態の更新

setState()

状態の更新を伝え、build()を呼び出し再描画する様に指示するメソッド

 

状態が変わって表示を更新する時にはsetState()を呼び出す

 

【フロー】

setState()の中に状態の変化を書く

そしてそのsetState()を呼び出す関数を作る

void _toggle~(){}等が多い

その関数をボタンのonChanged等から呼び出す

【Flutter】StatelessWidgetとStatefulWidgetのライフサイクル

StatelessWidget

その名の通り状態を持たないウィジェット

一度画面を描画するとその後状態が変化しない

固定のテキストやアイコン等

 

最初の画面構築時にコンストラクタが呼び出されてから一度だけbuild()が呼び出される

 

StatefulWidget

状態を持つウィジェット

ユーザー操作や時間経過によって状態が変化する

チェックボックスやテキストフィールド等

 

StatefulWidgetは2つのクラスで構成されている

_のついたクラスのオブジェクトを生成

_のついたクラスで具体的な状態を保持

 

StatefulWidgetは3つのタイミングでbuild()が呼び出される

最初の画面構築時・親ウィジェットの更新時・状態の更新時

 

StatefulWidgetのライフサイクル

createState()→initState()→build()

didUpdateWidget()→build() :親ウィジェットの更新

setState()→build() :状態の更新

dispose() :状態の破棄 ウィジェットの消失前に

 

 

両者のライフサイクル

 

参考資料

www.nucleiotechnologies.com

 

 

【Flutter】GoRouterで画面遷移を行う 実装フロー

pub.dev

Navigator 1・2に代わる簡易的な画面遷移のプラグインとして登場したのがGoRouterです。

GoRouterはコンストラクタで指定するルート(Route)の集合体によって全体が制御され、管理されています。

また、ディープリンクやその他の一般的な画面遷移をすべて使いやすい API でサポートしています。

 

【実装フロー】

①パッケージを追加

pub.dev

 

②MaterialAppをMaterialApp.routerに変更

  1. class MyApp extends StatelessWidget {
  2.   const MyApp({super.key});
  3.  
  4.   @override
  5.   Widget build(BuildContext context) {
  6.     return MaterialApp.router(
  7.       routerConfig: _router,
  8.     );
  9.   }
  10. }

 

GoRouterの宣言(ルーティングの宣言・定義)

  1. final GoRouter _router = GoRouter(
  2.   routes: <RouteBase>[
  3.     GoRoute(
  4.       path: '/',
  5.       builder: (BuildContext context, GoRouterState state) {
  6.         return const HomeScreen();
  7.       },
  8.       // ↓を ネストにしてサブルート化
  9.       routes: <RouteBase>[
  10.         GoRoute(
  11.           path: 'details',
  12.           builder: (BuildContext context, GoRouterState state) {
  13.             return const DetailsScreen();
  14.           },
  15.         ),
  16.       ],
  17.     ),
  18.   ],
  19. );
  • グローバル変数としてGoRouter()オブジェクトを宣言する
  • routes:プロパティの中でルーティングを作る →pathと遷移先のスクリーンウィジェットを変えたルートを作るだけ
  • 最初のルートパスは '/'
  • name:プロパティも設定できる(ルート名を入れる)
  • ネストしてサブルートにしないと戻ることができなくなるので注意
  • 最初にinitialLocationやdebugLogDiagonosticsプロパティを設定することもある

 

④ルートを呼び出す(ページ遷移)

  1. ElevatedButton(
  2.           onPressed: () => context.go('/details'),
  3.           child: const Text('Go to the Details screen'),

 

  1. ElevatedButton(
  2.           onPressed: () => context.go('/'),
  3.           child: const Text('Go back to the Home screen'),
  4.         ),
  • ボタンのonPressed等から呼び出す
  • GoRouter.of(context).go('パス')を省略したのがcontext.go('パス')
  • パスの代わりにname(ルート名)で呼び出す方が簡単

 

名前付きルートで呼び出す方法↓

 

【おまけ】

ページスライドの挙動を変えるpageBuilderプロパティ GoRouter内で定義

GoRoute(
  path: 'details',
  pageBuilder: (context, state) {
    return CustomTransitionPage(
      key: state.pageKey,
      child: DetailsScreen(),
      transitionsBuilder: (context, animation, secondaryAnimation, child) {
        // Change the opacity of the screen using a Curve based on the the animation's
        // value
        return FadeTransition(
          opacity:
              CurveTween(curve: Curves.easeInOutCirc).animate(animation),
          child: child,
        );
      },
    );
  },
),

docs.page


 

 

 

参考資料はこちら

 

 

blog.pentagon.tokyo

【FLutter】ローカライズについて

アプリ作成時にskeletonコマンドを打つことでローカライズされる

 

flutter create -t skeleton ファイル名

 

ローカライズについての参考資料

 

 

 

 

 

 

【Flutter】ウィジェットの機能はできるだけシンプルにする 応答性と再利用を意識

ウィジェットは1つだけの機能に収めるべきという考え

 

そうすることで応答性も高く再利用も可能になる

再利用が可能になることでコードの総数も減る

常に新しいウィジェットクラスを作ることで再利用が容易になる

 

応答性とは:画面のサイズが変わっても対応できる = デバイスやブラウザに依存しない

必要な作業はウィジェットのmaxサイズとminサイズを決めること

また、2つのウィジェットを並べてレイアウトを画面サイズに合わせて変動するといった複雑な画面等も作れる

 

応答性についての参考資料

 

【Flutter】VSCodeのインスペクター

ウィジェットツリー内でのウィジェットの位置や

UIがどのウィジェットに対応しているか見ることができる

 

コマンドパレット→Dart Open DevTools in Browser