hamburger-tech-nits

主にプログラミングのNITSな話

Flutter

Flutterでキーボードを閉じたいときはFocusManagerを使う

api.flutter.dev FocusManager.instance.primaryFocus?.unfocus();

Xcode15にアップデートした後にやったこと

Xcode15にアップデートしたら、Flutterのビルドが通らなくなったりSimulatorが起動しなくなったりした。 元々Xcode15.0.1を利用していたが、新しいバージョンがでていたので15.2に更新し、最初からやってみることにした。 まず、Xcodeの最新を利用するように…

<key>UIApplicationSupportsIndirectInputEvents</key>

FlutterアプリをXcode15を利用してビルドしたらInfo.plistが勝手に編集された。 <key>UIApplicationSupportsIndirectInputEvents</key> <true/> developer.apple.com A Boolean value indicating that the app generally supports indirect input mechanisms. AppleTVのリモコ</true/>…

targetSDK34対応アプリはAGP8.1.1以上でGradle8以上

developer.android.com developer.android.com targetSDKを上げるためにGradle周りも更新必要とのこと。同僚からの連絡で気づいた。 AndroidSDK34はAndroid用Gradleプラグイン8.1.1以上が必要で、Gradleプラグイン8.1.1はGradle8以上が必要。 更新頻度が年一…

FlutterKaigi2023参加メモ

flutterkaigi.jp 基調講演 9年前からあったんだーとか、そういえば昔はOptional無かったなぁとか、知らなかった時期の変遷と懐かしい話とで初のオフライン開催一発目のセッションとしてちょうどよかった。アイスブレークのような感じで、少し一体感が出たよ…

FlutterのTabのラベルの色はLabelStyleで設定できない

api.flutter.dev This does not influence color of the tab labels even if TextStyle.color is non-null. Refer labelColor to color selected tab labels instead. LabelStyleにcolorを設定しても無視される。代わりにLabelColorに色を設定する。 何か理…

FlutterのBottomNavigationItemのデザインをThemeで設定するときは気をつけよう

FlutterのBottomNavigationBarに設定するBottomNavigationItemの色を変更したい。その時にウィジェットのselectedLabelStyleやunselectedLabelStyleを変更すれば値が反映されるが、Themeの設定を変えてもデフォルトのままになり設定は反映されない。というバ…

Flutter3.10でiOSデバイスをワイヤレスデバッグで利用する

iOS側の開発環境を揃える 自分のiPhoneはiOS16.4.1なので、Xcode14.3をインストールした。 Xcodeで接続設定をする iPhoneを有線接続している状態でWindow > Devices and Simulators でDevicesタブを選択し、実機を表示させる。Connect via network のチェッ…

VSCodeで複数定義した実行前タスクを直列実行する

hamburger-tech.hatenablog.com "dependsOrder": "sequence",を追加することで、dependOnに記載したtaskを順番に実行してくれる。 新しくコードフォーマットのtaskを追加して、pub getを待ってから実行したかったので修正した。 { "label": "Build", "depend…

VSCodeの実行前タスクを複数定義する

flutter runの前に、build_runner build だけでなく pub getも実行しておきたくなった。tasks.jsonは既にあるのでそれを修正する。 hamburger-tech.hatenablog.com tasks配下に実行したいタスクを全て追加する 作成したタスクをまとめるタスクを作成し、ラベ…

VScodeで実行前タスクを定義する

Flutterのビルド前に自動で build_runnerを実行したい。launch.json に preLaunchTaskというフィールドがあるので試してみた。 cmd+shift+Pでコマンドパレットを開く タスクの構成(Tasks: Configure Task)を選択する taskのテンプレートを選択する。全て自分…

`[cloud_firestore/failed-precondition] Operation was rejected because the system is not in a state required for the operation's execution. If performing a query, ensure it has been indexed via the Firebase console`

FlutterでFirestoreのcollection_groupにwhere条件を設定したクエリを実行したところ、[cloud_firestore/failed-precondition] Operation was rejected because the system is not in a state required for the operation's execution. If performing a quer…

FlutterのCloud Firestore ODMを活用して型安全なリクエストを実行する

Flutterで一般的な使い方でFirestoreにアクセスしようとすると、ドキュメント名やレスポンスを文字列でマッチングする必要があるため、型情報の復元のためのコードを色々書く必要がある。 Cloud Firestore ODMはその名の通りObject Document Mapperで、これ…

Flutterで画面遷移のイベントを検知して別の処理を呼び出す

画面遷移のたびに特定の処理を実行したい時はNavigatorObserverで処理を呼び出せる。 NavigatorObserverのサブクラスを作成する class MyNavigatorObserver extends NavigatorObserver { @override void didPush(Route<dynamic> route, Route<dynamic>? previousRoute) { super</dynamic></dynamic>…

FreezedのUnionの共通フィールドをInterfaceで表現する

pub.dev やりたいこと Kotlinのsealed classでは、共通のフィールドをabstractで定義して子クラスに対して実装を強制できる。大量のフィールドを持つモデルクラスをtypeごとに分割した時など、これによって子クラスの実装漏れをビルドのタイミングで検知でき…

FlutterのStreamBuilder内で画面遷移させる

StreamBuilderはStreamの結果を元にWidgetを返却する関数であり、voidではない。なのでStreamの結果を評価した結果画面遷移したとしても、普通にNavigationの関数を呼び出すとエラーになる。 StreamBuilder<int?>( stream: intStream(), builder: (context, snapsh</int?>…

Flutterのログ出力にloggerを利用する

pub.dev 開発中のログ出力用にprintを利用すると、リリースビルドでもその情報を出力してしまう。そのため、ロギングライブラリを利用して制御する方法を取るのが一般的。 ネットで雑に調べると、Flutter用のロギングライブラリは代表的なものだけで4~5種類…

Flutterアプリでfirebase_ui_authを使ってGoogleログインを実装する

この記事の続き hamburger-tech.hatenablog.com 参照先のページに別のページのリンクが書いてあり、少し紛らわしかった。ようやく一段落。 pub.dev github.com Googleログインを有効にする メールログインと同様にGoogleログインを有効にする。その後、必要…

Flutterアプリでfirebase_ui_authを使ってメールログインを追加する

事前準備 firebase.google.com Firebaseプロジェクトを作成し、アプリリポジトリを接続する。特にこだわりがなければ、firebase_analyticsを導入して動作確認するのがオススメ。 FirebaseAuthの準備 Firebaseのコンソールを開き、Authを有効にする。Authはロ…

uses-sdk:minSdkVersion 16 cannot be smaller than version 19 declared in library [:firebase_analytics]

Flutterでfirebase_analyticsを導入したところ、Androidでビルドエラーになった。 ***/android/app/src/debug/AndroidManifest.xml Error: uses-sdk:minSdkVersion 16 cannot be smaller than version 19 declared in library [:firebase_analytics] ***/bui…

Unhandled Exception: Binding has not yet been initialized.

FlutterアプリにFirebaseを導入した。pub get後に関数(analyticsのメソッド)を呼び出したらエラーが発生した。 E/flutter ( 6837): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: Binding has not yet been initialized. E/flut…

Freezedで生成したClassにインスタンスメソッドを追加する

FlutterでFreezedを利用した際に、生成したClassに独自メソッドを追加する方法を調査しました。 pub.dev @freezed class Person with _$Person { const factory Person(String name, {int? age}) = _Person; void method() { print('hello world'); } } この…

Warning: CocoaPods not installed. Skipping pod install.

FlutterのiOSビルドをしたところエラーになった。 Warning: CocoaPods not installed. Skipping pod install. CocoaPods is used to retrieve the iOS and macOS platform side's plugin code that responds to your plugin usage on the Dart side. Without…