Flutter
このAPIすげー微妙な気がする。使い所がわからない。毎回 getToken でデバイストークンをぶん投げてええんちゃうって思う。 端末が変わる、アプリの再インストールでは自動的に新しいデバイストークンが採択されるから、onTokenRefreshが呼び出されることが…
2年半ぐらいFlutterをやっているし、今後もやっていくのですけれど、初学の頃に比べると刺激がなくなってきた。 「やらなければできない」ことが減っていることが怖い。 UIの実装ができれば、悩みどころは状態管理・Widgetの初期化と後処理・デザインシステ…
Firebase Authenticationに限らないと思いますが、半日ハマったので備忘録。こちらにすべてが書いてあった。 minpro.net 「Google Play」を経由してAndroidアプリとしてリリースする場合は、Android Studioで取得した「SHA-1」「SHA-256」ではなく、「Google…
2年近くFlutterをやっていて、データストアにRiverpodを使っている場合 StatefulWidgetはまじで要らない子なんじゃないかと思い始めている。disposeする対象の管理が面倒でメモリリークする可能性があり、良いことがない。コードも色々増える。 StatefulWidg…
Unhandled Exception: PlatformException(network_error, com.google.android.gms.common.api.ApiException: 7: このエラーが出て、なんだろうと思ったら、なんてことはない、検証機AndroidのWifiが切れていて、インターネットにつながっていなかった... ち…
Flutter2.x系からこの問題がフィーチャーされるようになった気がする。1.xの時はそこまで。 どんな問題? 非同期でサーバーにデータを送った後、ダイアログを閉じるようなケース。 非同期でawaitを入れた所で、Flutterのウィジェットツリーの再構築が同期さ…
Firebaseのライブラリが国際化対応しているため、日時をUnixtimeで持っていた。 それをDartでDateTimeに変換するときのコードで、癖があったのでメモ。 www.kindacode.com final timestamp1 = 1627510285; // timestamp in seconds final DateTime date1 = D…
Firestoreのタイムスタンプ型をDartのDateTimeに変換する時に、1時間ほどハマってしまったので。 freezedを使っている人は多いと思いますが、DateTime⇔Timestampを変換するには、以下のようなコンバーターを噛ます必要があります。 class TimestampConverter…
WidgetTestを書いていて、Riverpodでビューの操作を行うクラスを全部DIして、ProviderのOverrideでMockに差し替えることをやっている。Mockにはmocktailを使っていて、このテスト戦略はシンプルでよい。サクサクテストが書ける。 riverpod.dev どうせ忘れる…
FlutterのテストにはUnit / Widget / Integrationの3つの段階があるが、外部データソースのアクセスを利用しないでDartのオブジェクト上だけでテストを行うのが、UnitとWidgetのテスト。 とはいっても、昨今で外部リソースを一切使わないケースはない。 HTTP…
Riverpodネタは続く。 カート一覧→タップで数量更新→画面が戻った時にカートが更新・・・されない!データは書き換わっているが、UIが更新されていなかった。 一覧画面のデータFutureProvider.autoDisposeを使って、画面下部のタブに表示している。iPhoneは…
画面遷移とかでよくあるよね。一覧から行タップで詳細に遷移する系のやつ。商品一覧→商品詳細みたいなやつです。 Riverpodが提供するProviderにはfamilyという関数があり、Providerを初期化する際に任意の型の引数を与えることができる。今回は、StateNotifi…
FlutterのRiverpodの話。 10月に入って、作りかけのアプリのProvider -> Riverpodへのリプレイスを行っています。zennで公開されているRiverpod解説には大変お世話になりました。 ひとつわからなかったのが、「タブを切り替えた時に自動でそのページの中身を…
flutter doctorでこの警告が出る場合。一定の手順に沿って行うだけ。JetBrain Toolboxを使っている人の対応策も書いてあった。 Macのユーザー名とAndroidStudioのバージョンは、その時の最新に差し替えれば良さそう。 stackoverflow.com cd /Users/<USER_NAME>/Library/</user_name>…
Flutterには3段階のテストパターンが存在する。 Unit Test Widget Test Integration Test アプリケーションの性質にもよるだろうけど、ローカル or HTTPでデータをフェッチして表示するというロジックが多くを占める場合、Unit Testでテストすることがかなり…
キーチェーンに書き込んだ情報はアプリがアンインストールされても残ってしまうので、ユーザーがアプリを再インストールした時にそのtokenが残ってちょっとやだ、みたいなケース。 結論から言うと、NSUserDefaultsに書き込んで逃げるしか無いっぽい。アプリ…
商品検索 商品詳細 会員登録 or ログイン ログインページ こういうページ遷移の時、ログインページでログインが完了したら、2番の商品詳細に戻したい場合のTipsです。 2の商品詳細は、1の親画面でタップされたデータを元に画面を初期化するので、予めroutes:…
Flutterを簡単に言えば、Dartでアプリを作るとiOS/Androidのネイティブアプリのプロジェクトに翻訳して、ネイティブアプリをワンソースで出来る仕組みです。 その中で、Flutterが提供してくれる多くのウィジェットや通信・DBのライブラリなどがあったりする…
Flutterの設計で一番悩ましいのが、ViewとModelの連携。状態遷移だと思われる。 2020年の初頭からFlutterやりはじめて、「Provider + ChangeNotifier」でやってた。これでも全然動く。 ただ、Providerは必ずcontextを経由する必要があるので、ウィジェットの…
色々探してやっとわかった.. flutter.institute initStateに直接awaitって書くことは出来ない。そりゃそうだな。ビルドが終わってから状態を変え、再ビルドするという方法を探していた。 class MyWidget extends StatefulWidget { @override State createSta…
まー、ありますわね。そーゆーのがね。 要件としては、写真撮ってメモを追加して何件かリストにしてPOSTだから、取った写真をリスト表示できることが必要。これが意外と難しくてワロタ。 最終的に、こういう風にするしかなさげ。 image_pickerプラグインで画…
おきまりの flutter pub run build_runner build を叩くと、エンドレスにビルドが走って終わらなくなった・・・。@JsonSerializable アノテーション以外のファイルまで見に行ってる。widget_test.dart を見に行くアホがおるかい。 英語でググってみたところ…
前職の兼ね合いで、一緒になって作りたいサービスを5月から合間見て作っております。それにはスマホのネイティブアプリが必要だったので、Flutterで作り始めているのですが、これはすごいっすね。ありがとうFlutterを作ってくれたネ申エンジニア。儲かったら…
展示会運営のアプリをAndroid・iOSで各々ネイティブで作って運営しているが、やっぱりワンソースでいい感じにやりたい...2つ同じもの作るのは単純に辛い。メンテナンス・コストが単純に倍になるのがだるい。1から勉強したってのもあるけど、フルコミットでリ…