Skip to main content

Flutter Apprentice7章と8章で分からなかったことをまとめる

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

関連記事:

Pocket