Flutter Apprentice5章と6章で分からなかったことをまとめる
の続編
Chapter7 Routes & Navigation
Chapter8 Deep Links & Web URLs
を読んだので分からなかったことをまとめる
Dart構文系
・getterだけにアクセスを絞る
bool _initialize = false;
bool get isInitialize => _initialize;
こうするとgetだけにアクセスを絞れる。
・Initializer Lists
Masterka() ; this.ikemen = true, super(key: key);
みたいな感じでフィールドを初期化できる。
https://dev.classmethod.jp/articles/about_dart_constructors/
・late
initStateで初期化するならlateをつける。
・ピリオド三つ
if-elseを宣言的に書く場合に使う。
https://prism-cube.com/articles/flutter-append-widget-list
・ピリオド二つ
>同一オブジェクトに対して、複数の操作をする際に使う記法だそうです。
https://qiita.com/Nedward/items/b71512f8c2997f52697d
・int.tryParse
intのパースができる
https://zenn.dev/k_shir0/articles/473cb749a95028
Flutter系
・Navigation2.0
中規模以上だったら使ったほうが良い。
小規模ならpop-pushの方が良いと思う。
書き方
AppRouteのbuildの中にNavigatorで囲って、MaterialPageをたくさん入れる。
onPopPageでバックボタンの処理を書く。
main.dartのrouterDelegateにApprouterを書く。
Androidのために、backButtonDispatcher: RootBackButtonDispatcherを書く。
処理
各ScreenでAppStateManagerを呼んで、notifyが呼ばれる。
AppRouter(RouterDelegate,PopNavigatorRouterDelegateMixin)の buildが呼ばれる。
・GlobalKey
任意のWidgetにアクセスするために使う。
https://qiita.com/kurun_pan/items/0517fb62f1b47c90882c
・didChangeDependencies
initStateの次に呼ばれるコールバック
https://qiita.com/HiromitsuFukuda/items/10a63a7b347db1712a86
・url_launcher
url scheme時に使った。
url lauchする。
・deeplink
処理はこんな感じ
RouteInformationParser#parseRouteInformation
↓
RouterDelegate#setNewRoutePath
RouteInformationParserでUrlをパースして
RouterDelegateでアプリの処理を書く。
RouterDelegate#currentConfiguration
↓
RouteInformationParser#restoreRouteInformation
自分の状態が変わったらRouterDelegateが呼ばれて
RouteInformationParserでURLを変える。
iOS
・xcrun
xcrun simctlでシュミレーターへコマンドを実行できる。
https://qiita.com/tamaki/items/02eb43253193b950b08f
URLを開く
https://qiita.com/niusounds/items/cd1158ce80577995ee0a
エラー系
・Error: Member not found: ‘packageRoot’
以下のエラーが出たら
../../../../../../flutter/.pub-cache/hosted/pub.dartlang.org/platform-3.0.0/lib/src/interface/local_platform.dart:46:19: Error: Member not found: ‘packageRoot’.
io.Platform.packageRoot; // ignore: deprecated_member_use
flutter pub upgradeしましょう
https://qiita.com/Toshiaki0315/items/21f96ec6531dd0e96739
・Build failed due to use of deprecated Android v1 embedding.
以下のエラーが出たら
Build failed due to use of deprecated Android v1 embedding.
以下を参考に修正しましょう。
https://qiita.com/koji4104/items/8885a3bf0689e46f4611
・iOSのビルドでバック
>※ iOS実機では、iOS14以降の場合、PCと繋げていない状態では、Debug Mode(デバッグ モード)でビルドしたアプリの起動ができません。
これ、まじかよ・・・。
https://hiyoko-programming.com/1590/
・url schemeが動かない
url schemeで起動するがパラメーターを全部無視して起動だけだった。
調べたらparseRouteInformationとsetNewRoutePathが呼ばれない。
以下を
return MaterialApp( theme: theme, title: 'Fooderlich', home: Router( routerDelegate: _appRouter, backButtonDispatcher: RootBackButtonDispatcher(), routeInformationParser: routeParser, ), );
以下にしたら動いた。
return MaterialApp.router( theme: theme, title: 'Fooderlich', backButtonDispatcher: RootBackButtonDispatcher(), routeInformationParser: routeParser, routerDelegate: _appRouter, );
本の内容が結構間違ってるのでgithub見ながらやると良いと思います。
https://github.com/raywenderlich/flta-materials
関連記事:
- Flutter Apprentice5章と6章で分からなかったことをまとめる
- Flutter Apprentice11章〜14章で分からなかったことをまとめる
- Flutter Apprentice3章と4章で分からなかったことをまとめる