Flutter エラー・バグ日記

(2025.1.7更新)
Flutterで日々直面したエラー・バグ(解消できたら対応履歴も)を日記的につづっています(Flutter以外の話も若干あります)。
実際にはエラーでもバグでもなく、自分の仕様への理解不足で思うように動作しなかっただけ、という話も多々含まれますw。
些細なことでも同じ問題にぶつかった方にヒントになれば、という思いで書いています。
ライトな日記思考なので、詳細説明はしておらず、基本、テキストのみで画像とかを載せていないケースもあります。。m(_ _)m
解説記事ではないものも含まれ、解決していない内容や、その時々の間違った解釈を述べてしまっている可能性が大いにありますので、何卒、ご了承ください。
なお、エラー発生時に試して有益だった、一般的な対処法を整理しましたので、よろしければこちらもご覧ください。
2025/1/7 flutterfire configureで「Which Android application id (or package name) …」が出てエラー
日記の内容はこちら↓
2025/1/1 ReorderableListViewの注意点:Navigatorで再描画される?
日記の内容はこちら↓
2024/8/5 Xcodeビルドで「Unable to install "Runner"」エラー
日記の内容はこちら↓
2024/7/7 Flutter3.19.6にアップグレードして発生したエラー対応記録
日記の内容はこちら↓
2023/9/23 TextFieldのToolbarに追加した項目をタップしてもToolbarを消せない
日記の内容はこちら↓
2023/9/12 iOS審査:Guideline 5.1.1(v) - Data Collection and Storageの違反指摘でリジェクト
日記の内容はこちら↓
2023/9/6 iOS審査:Guideline 4.8 - Design - Sign in with Appleの違反指摘でリジェクト
日記の内容はこちら↓
2023/6/25 App Store Connectへのアップロード時に「Certificate expires in ## weeks」の警告
日記の内容はこちら↓
2023/5/24 !!! FAILED BINDER TRANSACTION !!!という表示が出てAdMob広告が表示されない
日記の内容はこちら↓
2023/5/15 GoogleService-Info.plist file not foundとなり、iOSでGoogleサインインできない
日記の内容はこちら↓
2023/5/7 Firebase In-App Messagingの「デバイスでテスト」のメッセージが届かない
日記の内容はこちら↓
2023/5/3 再びAdMobからポリシー違反警告(リワード広告 - 許可されない実装方法)
日記の内容はこちら↓
2023/5/1 Include of non-modular header inside framework module 'FirebaseSessions.FIRSESNanoPBHelpers'のエラー
日記の内容はこちら↓
2023/4/23 「バージョン###で不足しているdSYMがCrashlyticsで検出されました」の通知
日記の内容はこちら↓
2023/4/21 AndroidエミュレーターがGoogleのマークが出たまま起動しない
日記の内容はこちら↓
2023/4/1 No implementation found for void io.flutter.embedding.engine.FlutterJNI.nativeUpdateRefreshRate(float)のクラッシュ報告
日記の内容はこちら↓
2023/3/30 App Store Connect Operation Error(SDK Version Issue)の警告
日記の内容はこちら↓
2023/3/28 Google Play Consoleのリリース前レポートで「Unable to start activity」のクラッシュ報告(Google Wear)
日記の内容はこちら↓
2023/3/27 GitHubにgit pushしたら「REMOTE HOST IDENTIFICATION HAS CHANGED!」と出てエラー
日記の内容はこちら↓
2023/3/21 flutter_typeaheadの候補リスト部分が、一部の端末だとタップできない
日記の内容はこちら↓
2023/3/19 flutter_local_notificationsで通知が表示されない(Android13)
日記の内容はこちら↓
2023/2/12 CocoaPods could not find compatible versions for pod "GoogleAppMeasurement"のエラー
日記の内容はこちら↓
2023/2/9 Flutter3.7更新時: No file or variants found for assetのエラー
日記の内容はこちら↓
2023/2/5 SharedPreferencesPluginでambiguous use of 'register(with:)'のエラー(Flutter3.7更新時・Macデスクトップ)
日記の内容はこちら↓
2023/2/4 PathProviderPluginでambiguous use of 'register(with:)'のエラー(Flutter3.7更新時・Macデスクトップ)
日記の内容はこちら↓
2023/2/3 Flutter3.7アップグレード後の不具合対応
日記の内容はこちら↓
2023/1/28 AdMobインタースティシャル広告のload完了をawaitで待てない
日記の内容はこちら↓
2023/1/22 file_pickerで取得したファイルがiOSのtmpフォルダからすぐ消える
日記の内容はこちら↓
2023/1/10 Failed to send request: {"jsonrpc":"2.0","id":
…のメッセージが出る
日記の内容はこちら↓
2023/1/8 iPhoneを横向きにすると、cameraパッケージのプレビュー幅が狭くなる
日記の内容はこちら↓
2023/1/3 iOSシミュレーターでReleaseビルドしたら「No such module 'Flutter'
」のエラー(実機では問題なし)
日記の内容はこちら↓
2022/12/29 XcodeでThis method should not be called on the main thread as it may lead to UI unresponsiveness.の警告
日記の内容はこちら↓
2022/12/26 Stored properties cannot be marked potentially unavailable with '@available'
のエラー
日記の内容はこちら↓
2022/12/24 「Terminated due to signal 9」でXcodeと実機の接続が切れ、以降のログを確認できない
日記の内容はこちら↓
2022/12/23 AdMobのバナー広告を別画面で再利用したら「This AdWidget is already in the Widget tree」のエラー
日記の内容はこちら↓
2022/12/21 iOSのReleaseビルドでコンソールログを見る方法が分からない
日記の内容はこちら↓
2022/12/12 cameraパッケージをAndroid13でビルドすると、コントローラーの初期化でエラー
日記の内容はこちら↓
2022/12/10 cameraパッケージで初回の許可ダイアログ表示後にエラー
日記の内容はこちら↓
2022/12/6 switch文で「The switch case expression type 'double' can't override the '==' operator.」のエラー
日記の内容はこちら↓
2022/12/4 「FittedBox」の中だと「Row」の「mainAxisAlignment」が機能しない
日記の内容はこちら↓
2022/11/24 TextFieldを別クラスに配置すると、キーボード位置(viewInsets.bottom)を取得できない
日記の内容はこちら↓
2022/11/14 firebase deploy --
only functions:### がエラーになりFunctionsをデプロイできない
日記の内容はこちら↓
2022/11/12 firebase initすると「.firebaserc already has a default project, using XXXX」 となり、プロジェクトを選択できない
日記の内容はこちら↓
2022/11/11 Could not resolve all artifacts for configuration ':image_picker_android:debugUnitTestRuntimeClasspath'
のエラー
日記の内容はこちら↓
2022/11/6 APIレベル31以上のAndroidエミュレーターだと、Cameraの撮影がエラーになる
日記の内容はこちら↓
2022/10/30 Google Play Consoleのリリース前レポートでException java.lang.LinkageErrorのクラッシュ報告
日記の内容はこちら↓
2022/10/28 AppStoreの言語表示が、プライマリ言語を日本語に設定しても「EN 英語」になってしまう
日記の内容はこちら↓
2022/10/18 Execution failed for task ':app:checkDebugDuplicateClasses'.のエラー
日記の内容はこちら↓
2022/10/10 iPhoneでAdMobのインタースティシャル広告の閉じるボタンが押せない
日記の内容はこちら↓
2022/10/9 不定期にNull check operator used on a null valueが出る(getRootWidgetSummaryTree関連)
日記の内容はこちら↓
2022/10/4 PlatformException(channel-error, Unable to establish connection on channel., null, null)のエラー
日記の内容はこちら↓
2022/10/1 Androidエミュレーターが起動しているのに「no device selected」になる
日記の内容はこちら↓
2022/9/25 Xcode14で、iPadを非対応にする(対象端末から除外する)設定が見つからない
日記の内容はこちら↓
2022/9/24 iPadの表示向きを固定できない 〜Xcode14での対処法
日記の内容はこちら↓
2022/9/23 ノッチのあるiPhoneでSafeAreaを使うと、ステータスバーの文字が見えなくなる
日記の内容はこちら↓
2022/9/22 flutter_native_splashを使うと、iOSのステータスバー(status bar)が表示されなくなる
日記の内容はこちら↓
2022/9/21 Xcode14でビルドしたらSigning for "・・・・" requires a development team. のエラー
日記の内容はこちら↓
2022/9/20 iPadだとshare_plusの共有アプリ一覧が表示されない
日記の内容はこちら↓
2022/9/17 Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8.のエラー
日記の内容はこちら↓
2022/9/16 Unrecognized Android Studio (or Android Support plugin for IntelliJ IDEA) version のエラー
日記の内容はこちら↓
2022/9/10 share_plusのshareFilesメソッドの完了をawaitで待てない
日記の内容はこちら↓
2022/9/2 image_pickerで撮影した写真データが、縦横逆で(90度回転して)表示されてしまう
日記の内容はこちら↓
2022/8/28 Image.fileにwidthやheightのプロパティがあるのに、取得するとnullになる
日記の内容はこちら↓
2022/8/7 ステータスバーの高さ「padding.top」を取得したが、値がゼロになってしまう
日記の内容はこちら↓
2022/8/5 Stackで下層ウィジェットからはみ出た部分をタップできない
日記の内容はこちら↓
2022/8/1 AppBar上のアイコンサイズを縮小できず、サイズオーバーのエラーになる
日記の内容はこちら↓
2022/7/28 There are multiple heroes that share the same tag within a subtree のエラー
日記の内容はこちら↓
2022/7/24 Navigatorで、Do not use BuildContexts across async gaps の警告が出る
日記の内容はこちら↓
2022/7/20 Macデスクトップアプリの審査で、メニューバーの言語が(localization)不統一のためリジェクト
日記の内容はこちら↓
2022/7/18 Flutter3にアップグレードしたら、menubarプラグインが使えない
日記の内容はこちら↓
2022/7/17 MacデスクトップアプリからのGoogle SignInが突如エラーになる
日記の内容はこちら↓
2022/7/10 Textの上に余白があるのに上寄せできない
日記の内容はこちら↓
2022/7/3 Flutter 3にアップグレードしたら、No named parameter with the name 'maxLengthEnforced'のエラー
日記の内容はこちら↓
2022/6/29 Google Playのリリース前レポートで「Strongly consider using FLAG_IMMUTABLE」のクラッシュ報告 〜Android12関連〜
日記の内容はこちら↓
2022/6/28 Google Playのリリース前レポートで「no such table: media_store_extension」のクラッシュ報告 〜機種xiaomi Redmi 6A〜
日記の内容はこちら↓
2022/6/26 「このファイルは Android 12 以降にはインストールできません。」のエラー
日記の内容はこちら↓
2022/6/24 doc comments(3本スラッシュ「///」のコメント)のポップアップを表示できない
日記の内容はこちら↓
2022/6/23 DBのupgradeで列追加すると「'Null' is not a subtype」のエラー→Dart Data Classプラグインが原因と判明
日記の内容はこちら↓
2022/6/21 sqfliteで「ADD COLUMN」を使ってテーブルに複数列を追加しようとしたらエラー
日記の内容はこちら↓
2022/6/16 'decoration != null || clipBehavior == Clip.none': is not true. のエラー
日記の内容はこちら↓
2022/6/14 親Container内に小さいContainerを置きたいが、親のサイズまで広がってしまう
日記の内容はこちら↓
2022/6/12 リストア(インポート)したはずのsqfliteの「.db」ファイルからデータを読み込めない
日記の内容はこちら↓
2022/6/8 InteractiveViewerの拡大率「details.scale」を取得したいが、毎回1.0に戻ってしまう
日記の内容はこちら↓
2022/6/2 AdMobのApp Storeのリンク設定で、自分のアプリが見つからない 〜「App Store Marketing Tools」のリンクで解決
日記の内容はこちら↓
2022/5/30 iOS15.5だとApp Tracking Transparency(ATT)ダイアログが表示されないと言われリジェクト
日記の内容はこちら↓
2022/5/28 ‘Pods_Runner.framework’ is missing one or more architectures required by this target: armv7 のエラー
日記の内容はこちら↓
2022/5/20 url_launcherで非推奨になったメソッドを修正したら、ブラウザが起動しなくなった
日記の内容はこちら↓
2022/5/14 AdMobから、設定していないリワード広告について、ポリシー違反の警告が来る
日記の内容はこちら↓
2022/5/10 flutter_local_notificationsのonSelectNotification属性が、アプリを閉じたバックグラウンド状態だと動作しない
日記の内容はこちら↓
2022/5/7 flutter_local_notificationsのonSelectNotification属性でNavigatorを使うとき、contextを参照できない
日記の内容はこちら↓
2022/5/6 iOSのpermission_handlerで、許可していてもPermissionStatusがdeniedになる
日記の内容はこちら↓
2022/5/5 The following GlobalKey was specified multiple times in the widget tree. のエラー
日記の内容はこちら↓
2022/5/4 minSdkVersion 16 cannot be smaller than version 19 declared in library [:firebase_analytics] のエラー
日記の内容はこちら↓
2022/5/3 バックアップした「hive」のファイルをインポート(リストア)して上書きしても、データが更新されない
日記の内容はこちら↓
2022/5/2 標準テキストの色の指定方法(Theme.ofの指定方法)が分からない
日記の内容はこちら↓
2022/5/1 Flutter2.8以降のFirebase初期設定で、パスを通しても「flutterfire configure」が「command not found」になる
日記の内容はこちら↓
2022/4/30 LeaderLayer anchor must come before FollowerLayer in paint order, but the reverse was true.のエラー
日記の内容はこちら↓
2022/4/14〜15 release modeだと、アプリ起動時に、TextFieldがフォーカスされていても、キーボードが出現しない
日記の内容はこちら↓
2022/4/10 Containerで「Cannot provide both a color and a decoration」のエラー
日記の内容はこちら↓
2022/4/7 MacOSのデスクトップアプリで「The Scrollbar's ScrollController has no ScrollPosition attached.」のエラー
日記の内容はこちら↓
2022/4/4 MacOSのデスクトップアプリ:かな漢字変換中に、Backspaceや上下キーを押すと挙動がおかしくなる(続き)
日記の内容はこちら↓
2022/3/31 「error: linker command failed with exit code 1 (use -v to see invocation)」のエラー
masterチャンネルに変更し、masOSアプリをビルドしたら上記のエラーが発生。
初めて遭遇した。
エラー文を読んでも趣旨がわからないため、ググると多くの情報が引っかかる。
主に、こちらやこちらの情報を参考にさせていただき、試してみるが、そもそもXcode内に「Enable Bitcode」の項目が見つからず、対応できず。
また、もう一つ書かれていた対策として、「Library/Developer/Xcode/DerivedData/」内のデータ(Xcodeの中間生成ファイル)を全削除してみるも、結果は変わらず。。。
そこで、いつもの基本作業を試していなかったことを思い出し、
「flutter clean」→「pub get」→macosフォルダ内で「pod install」
をやったところ、普通に解消された。
慌てて調べて、若干時間を浪費してしまった。。
やはり基本中の基本である「flutter clean」と「pod install」は最初に試すべき。。
2022/3/28 macOSがBig Sur 11.2.3だと、Xcode13にアップデートできないい
日記の内容はこちら↓
2022/3/24〜3/26 Flutterを2.2.3から2.10.3にアップグレードして発生したエラー対応記録
日記の内容はこちら↓
2022/3/21 Google Play Consoleに、QUERY_ALL_PACKAGES 権限の申告に関する連絡あり
日記の内容はこちら↓
2022/3/18 MacOSのデスクトップアプリ:かな漢字変換中に、Backspaceや上下キーを押すと挙動がおかしくなる
日記の内容はこちら↓
2022/3/17 MacOSのデスクトップアプリのApp Store Connectへの送信完了後、「Cannot be used with TestFlight」の警告が出る
日記の内容はこちら↓
2022/3/16 MacOSのデスクトップアプリをApp Store ConnectにDistributeしようとしたら、「App sandbox not enabled.」のエラー
日記の内容はこちら↓
2022/3/13 MacのデスクトップアプリをXcodeでビルドすると、「Swift Compiler Error No such module '#######'」のエラー
日記の内容はこちら↓
2022/3/12 Macのデスクトップアプリだと、file_pickerの動作中に、アプリ画面を触れてしまう
日記の内容はこちら↓
2022/3/7 Macのデスクトップアプリで、TextFieldのテキストを右から左に選択するとRangeErrorになる
日記の内容はこちら↓
2022/3/2 Macのデスクトップアプリで、path_providerのメソッドが使えない
日記の内容はこちら↓
2022/2/26 Androidエミュレーターが「Running multiple emulators with the same AVD is an experimental feature.」で起動できない(解決せず)
macOSのエミュレーターを使い始めた影響?かは不明だが、突然、使っていたPixel4のAndroidエミュレーターが起動不能になった。
Android Studioの右下に、以下のエラーメッセージが出る。
Error Opening Emulator
emulator: ERROR: Running multiple emulators with the same AVD is an experimental feature. Please use -read-only flag to enable this feature.
以前、こちらの記事の情報に従って、隠しフォルダである「.android」フォルダ内の「avd/エミュレーター名.avd」内にある下記3ファイルを削除したら解決したので、今回も試す。
cache.img
hardware-qemu.ini.lock
multiinstance.lock
しかし、再度、エミュレーターを起動するも、白地の画面に「Google」が表示されたままで、30分ほど待っても起動しない。
途中で起動を終了させると以下のエラー。
Error : Opening Emulator handleCpuAcceleration
handleCpuAcceleration: feature check for hvf cannot add library /Users/・・・・/Library/Android/sdk/emulator/qemu/darwin-x86_64/lib64/vulkan/libvulkan.dylib: failed added library /Users/・・・・/Library/Android/sdk/emulator/lib64/vulkan/libvulkan.dylib cannot add library /Users/・・・・/Library/Android/sdk/emulator/qemu/darwin-x86_64/lib64/vulkan/libMoltenVK.dylib: failed added library
こちらの情報を参考に、「advancedFeatures.ini」を作り、「.android」フォルダに置いたり、こちらの情報を参考に、「cache.img.qcow2」も削除したりしてみたが、やはり起動できない。。
試しに「AVD Manager」から、新規でPixel4のAndroidエミュレーターを作成すると、これは問題なく起動できた。
新・旧のエミュレーターの「avd/エミュレーター名.avd」内を比較すると、正常に動作する方は、「default_boot」フォルダ内に「ram.img」ファイルがあるが、エラーの方にはこのファイルがなく、代わりに「ram.img.dirty」ができている。。
時間がもったいないこともあり、、旧エミュレーターについて、最終手段である「AVD Manager」の右側プルダウンの「Wipe Data」をして初期化すると、問題なく起動できるようになった(エミュレーター内のデータは消えてしまったが、、、)。
2022/2/24 macOSアプリとして起動すると「The FlutterFire plugin firebase_auth for macOS requires a macOS deployment target of 10.12 or later」のエラー
日記の内容はこちら↓
2022/2/21 GCPのAPIキー制限で、Google Calendar APIのみ有効にすると、Firebaseにアクセスできない。
GoogleカレンダーにアクセスするFlutterアプリを作っていたが、Google Cloud Platform(GCP)のAPIキー設定箇所(認証情報)に、警告マークが出ていた。
APIキーへのアクセス制限を入れていなかったことが原因。
そこで、アクセスできるAPIを「Google Calendar API」のみに制限したところ、Firebaseにアクセスできなくなった。
具体的には、「firebase_auth」パッケージに紐づく「GoogleAuthProvider.credential」メソッドが機能せず、以下のようなエラーが出る。
Ignoring header X-Firebase-Locale because its value was null.
[firebase_auth/unknown] com.google.firebase.FirebaseException: An internal error has occurred.
[ Requests to this API identitytoolkit method google.cloud.identitytoolkit.v1.AuthenticationService.SignInWithIdp are blocked. ]
GCPのダッシュボードを見てみると、「Identity Toolkit API」と「Firebase Installations API」にエラーが発生していた。
そこで、上記2つのAPIにチェックを入れ、有効化すると、無事エラーが解消された。
こちらにも似たような報告がなされている。
APIキーの制限について、アプリケーションの制限に関しては影響範囲を特定しやすいが、APIの制限に関しては、どのAPIを制限すると問題が発生するのか、手探りな印象。。。
アプリケーションの制限をするだけでも警告マーク消えるので、自分のような理解不足の段階では、APIの制限はしない方が無難か。。。
2022/2/17 GooglePlayにアプリをリリースしたら、Google SignIn(Googleサインイン)ができなくなった②
以前も同じ現象が起こったが、その際は、こちらに書いた対策(Google Play ConsoleのSHA-1をFirebaseに追加登録)で解決できた。
今回は、この対策をした上でリリースしたのに、なぜかサインインできず、焦る。。
正確には、サインインは何とかできるが、開発中にAndroid Studioから直接ビルドしたときと比べると、異常に時間がかかる状況。。
また、サインアウトについては、なぜかエラーになる。
調べても情報が見つからなかったが、GCP(Google Cloud Platform)上で、AndroidのAPIキーに、アプリケーション制限をかけたときに、SHA-1を設定したことを思い出した(GCPの「認証情報」→「Android key」を編集→「アプリケーションの制限」→「Androidアプリ」を選択)。
このときは、デバッグ証明書のフィンガープリント(SHA-1)しか登録していなかったので、ここにもGoogle Play Console上で取得できるSHA-1を追加登録してみる。
すると、Google Playからインストールしたアプリからも、問題なくサインイン・サインアウトができるようになった。
今回の学びは、こちらの記事にも反映しました。
2022/2/15 iOSビルドで「Command PhaseScriptExecution failed with a nonzero exit code」のエラー
久しぶりに開いたプロジェクトを、iOSシミュレーターでビルドしたら発生。
Androidでは問題なく実行できている。
大概のエラーは解決するお決まりの「Podfile.lock」削除→「pod install」→「flutter clean」→「pub get」をやってみるが、解消せず。。
エラーログを見ても、上記エラー文しか表示されておらず、怪しい場所の検討がつかない。。
仕方なく調べると、記事はたくさん見つかるが、原因は色々あるようで、解決法も記事によって違う。
その中で、スバリ同じ状況を説明しているこちらのYouTube動画を発見。
まず、Xcodeで「TARGETS」にある「Runner」で「Build Phases」タブを開く(初めて開いた、、)。
次に、「Run Script」のプルダウンを開くと、
/bin/sh "$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh" build
という部分があるので、これを削除する。
これで再ビルドすると、無事エラーが解消された!
正直、原理はよく理解できていないが、、、ともかく教えていただいた動画に感謝。
2022/2/13 Stream型のデータ処理が終わった後に、次の処理を実行させたい→「await for」を使う
エラー対応ではないが、やり方を見つけるのに苦労したのでメモ。
Googleドライブから「files.get」メソッドでデータを読み込み、加工処理した後に、データを表示する処理をさせたいが、返り値がStreamのため、Future awaitのようなことができず、加工処理が終わる前に表示処理がなされてしまう。。
コードは以下のような形。
「files.get」メソッドで読み込んだStream型の変数.listen( (dataO) { ** dataOのデータ加工処理 **; }, onDone: () { ** 上記加工処理したデータの表示処理 **; // これが先に実行されてしまう。。 }, );
調べたところ、こちらの記事に「await for」を使うと、Streamの処理を待てると教えていただく。
当初、上記記事の内容を理解するのに苦労したが、「listen」を使うケースと何度も照らし合わせて、恥ずかしながら、ようやく理解。
結果、以下のように書き換えることで、加工処理→表示処理の順で実行できるようになった。
await for (dataO in 「files.get」メソッドで読み込んだStream型の変数) { ** dataOのデータ加工処理 **; } ** 上記加工処理したデータの表示処理 **;
※上記「dataO」は、Stream型で順次供給されてくるプロパティ(変数)の中の1つ、という理解。
Stream終了を待てずに困ったことは多々あったので、今後は「await for」を活用していこう。
2022/2/8 画面遷移するときに、たまに「'width > 0.0': is not true.」のエラーが出る
毎回ではないが、画面遷移する際に、
'package:flutter/src/rendering/box.dart': Failed assertion: line 320 pos 12: 'width > 0.0': is not true.
というエラーが出る。
エミュレーターが重くて画面遷移に時間がかかる時に発生する印象。
エラー文の後にリンクがあったので、叩いてみると、
FittedBox( fit: BoxFit.scaleDown, child: Text("・・・"), )
の部分を指していた。
画面遷移時にTextの中身(String変数)をクリアする処理を入れていたが、おそらく、中身がクリアされた後に、Textの表示を続けようとしたため、幅が0になってこれ以上縮められないぞ、とエラーになった模様。
Textの表示終了後に、中身のStringがクリアされればエラーにならないが、非同期処理を使っていることもあり、処理が重いときは、この順番が逆になると推察。
対策を調べると、こちらの記事に、BoxConstraintsを使って、以下のように最小サイズを1pixelに制限すれば回避できる、とあったので、やってみると確かに解消できた。
FittedBox( fit: BoxFit.scaleDown, child: ConstrainedBox( // <- これを追加 constraints: BoxConstraints(minWidth: 1, minHeight: 1), // <- これを追加 child: Text("・・・"), ), )
「BoxFit.scaleDown」は、画面サイズや親ウィジェットのサイズに収まるように、テキストやアイコンを縮めてくれるので愛用していたが、今後は気をつけよう。
2022/2/6 Scrollbarの「isAlwaysShown: true」をScrollablePositionedListのリストビューで使えない(未解決)
以前、何かの情報で、「Scrollbar」クラスの「isAlwaysShown」プロパティ(スクロールバーを常時表示するか否かを設定するプロパティ)は、trueにするとエラーになるので使えない、と目にした記憶があり、使ってこなかった。
実際、単純に「isAlwaysShown: true」とすると、以下のようなエラーが出ていた。
A ScrollController is required when Scrollbar.isAlwaysShown is true. The Scrollbar was not provided a ScrollController, and attempted to use the PrimaryScrollController, but none was found.
'package:flutter/src/widgets/scrollbar.dart':
Failed assertion: line 953 pos 11: 'scrollController != null'
The Scrollbar's ScrollController has no ScrollPosition attached.
A Scrollbar cannot be painted without a ScrollPosition.
The Scrollbar attempted to use the PrimaryScrollController. This ScrollController should be associated with the ScrollView that the Scrollbar is being applied to. When providing your own ScrollController, ensure both the Scrollbar and the Scrollable widget use the same one.
しかし、こちらの情報を見て、「Scrollbar」コンストラクタと、スクロールバーを付けたいウィジェット(例えば、SingleChildScrollView、TextField、ListView.builderなど)の両方に、コントローラーとして共通のScrollControllerのインスタンスを設置すれば、エラーが発生しないと分かった。
よく読んでいなかったが、、、確かに2つ目のエラーメッセージの最後にそう書かれていた。
しかし、スクロールさせたいリスト表示に、「scrollable_positioned_list」パッケージによる「ScrollablePositionedList.builder」コンストラクタを用いた場合、ScrollController型のインスタンスを設置できるプロパティが無いため、できなかった。。
「ScrollablePositionedList.builder」には、スクロール系のコントローラーを設置できる「itemScrollController」というItemScrollController型のプロパティはあるのだが、あくまでScrollController型ではないため、「Scrollbar」と共通のコントローラーを設置できない。。。
パッケージのソースコード内も探ってみたが、対応方法が分からず。。
調べると、こちらに同様のイシューを上げている方がいて、まだ解決していない模様。
「scrollable_positioned_list」パッケージは、リストの初回表示位置を自由に指定できるので便利だったが、スクロールバーを常時表示したい場合は、「ListView.builder」を用いて対応するしかない、というのが現状の理解。
2022/2/5 Google Calendar API:deleteメソッドで削除しても、予定情報が完全に消えない
Google Calendar APIを使ってGoogleカレンダーに登録した予定(イベント)を、deleteメソッドで削除すると、カレンダー上からは見えなくなる。
しかし、削除した予定のeventIdをキーにして、getメソッドを使うと、削除したはずの予定情報が取得できてしまう。
どうやら完全には消えていないらしい。。。
APIの説明ページやソースコード内の解説を見ても、この点の説明を見つけられず、完全削除する別メソッドも見当たらない。。
こちらに類似した質問をしている方もいたが、解決策を得られていない模様。
しばらく悩んだ末、ふと、登録したGoogleカレンダーの設定アイコン(歯車マーク)を開いてみると、「ゴミ箱」という項目を発見。
開くと、なんとdeleteメソッドで削除した予定達が並んでいた!
そこで、ゴミ箱内で完全削除した上で、getメソッドを実行すると、今度はちゃんと
Null check operator used on a null value
のエラーが発生し(try catchで処理可能)、予定情報は取得されなかった。
ゴミ箱に移動しているとは、、盲点(というか、カレンダーに「ゴミ箱」があること自体、知らなかった。。。)。
カレンダーのゴミ箱を空にするメソッドも探してみたが、見つけられず(あるのかもしれませんが、、、)。
同じ質問をされているこちらの記事では、新たに作成したテンポラリのカレンダーに、削除対象の予定(イベント)を移動させ、そのテンポラリのカレンダーごと削除する、という荒技が紹介されていた。
なるほど!と思ったが、処理は複雑になりそう。。
ゴミ箱内は30日で自動削除されるため、大きな問題はないと考え、deleteメソッドの利用だけで良しとすることに。
2022/1/28 「File」クラスに突然赤い波線のエラーが出る
今までエラーが出なかったのに、突然「File」クラスの全箇所に赤い波線のエラーが表示されていた。
なかなか理由が分からなかったが、Android Studioの「Git」タブの「Compare with Local」で変更箇所を調べたら、冒頭のimport文に、いつの間にか「import 'dart:html';」が追加されたと分かった。
元々は「dart:io」の「File」クラスを使っていたので、これが原因の模様。
どうやら「File」を使ったコードを他からコピペした際に、「dart:html」のクラスと判断されて自動インポートしてしまったらしい。。
外からコードを持ってくる際は、意図しないインポートがされないよう注意。
2022/1/26〜1/27 「JS: A parser-blocking, cross site (i.e. different eTLD+1) script」という警告が出る
突然、実行中のデバッグウィンドウに、以下のような警告が出るようになった。
W/Ads ( 3996): JS: A parser-blocking, cross site (i.e. different eTLD+1) script, https://pagead2.googlesyndication.com/pagead/js/XXXX/XXXX/XXXX.js, is invoked via document.write. The network request for this script MAY be blocked by the browser in this or a future page load due to poor network connectivity. If blocked in this page load, it will be confirmed in a subsequent console message. See https://www.chromestatus.com・・・for more details. (https://googleads.g.doubleclick.net/・・・
「document.write」を用いていると、ネットワークが遅い場合にブロックされるよ、、という趣旨に読める。
リンク先をクリックすると、よく分からないコードが書かれたテキストファイルがダウンロードされる。。
中を読むのは不可能な感じなので、ネットで調べてみる。
まず、「document.write」は、JavaScriptで文字列などをブラウザ上やコンソールに表示させるメソッドらしく、こちらやこちらの記事によると、「async」をつけて修正する、との情報があった。
ただ、コード中を調べても「document.write」はどこにも使われておらず。。そもそも、書いているコードはDartであって、JavaScriptではない。。
警告に「googleads」という言葉もあるので、恐らく広告が絡んでいるのだろうか、、、。
その後、調べても解決せず、1日経ってもう一度実行すると、今度は警告が出なくなった。
違いとしては、表示しているテスト広告(バナー)の内容が変わったこと。
警告が出ていたときは、見たことのない英語表示のバナーが出ていたが、よく見る日本企業のバナーに変わってからは解消されている。
表示する広告側の仕様によって発生するものなのだろうか。。。結局よく分からないままだが、備忘として記録。
2022/1/19 TextPainterクラスのtextDirection属性に、「TextDirection.ltr」を設定するとエラー
TextPainterのインスタンスを作る際、文字の方向を指定するtextDirection属性に、enum型の「TextDirection.ltr」(左から右)か「TextDirection.rtl」(右から左)を設定できるのだが、何度書いても「ltr」の所に赤い波線が出てエラーになった。
textDirection: TextDirection.ltr ← この「ltr」にエラー表示が出る。。。
原因が分からず、しばらくの間、地味に苦しむ。。
結果、「textDirection:」と「TextDirection」の部分にマウスカーソルを当ててポップアップの説明を見てみると、「textDirection:」は「dart:ui」ライブラリからの「TextDirection」を要求しているのに対し、自分のコードではインポートしていた「intl」パッケージからの「TextDirection」が設定されていると分かった。
どうやら、「dart:ui」にも「intl」にも「TextDirection」があり、競合していた模様。あまり競合しそうにない名前だったので、思いもよらなかった。。
なので、「dart:ui」の方に「as ui」を付けて、
textDirection: ui.TextDirection.ltr
としたら、無事エラーが解消された。
Android Studioのポップアップ説明も重要なヒントになりますね。
2022/1/13 意図しない再描画が発生すると思ったら、原因は「MediaQuery.of」だった
コードを修正していたら、いつの間にか意図しないタイミングで画面の再描画が発生するようになってしまった。
setStateやNotifyListenersをしていないタイミングで、再描画が発生する。
怪しそうな所をひたすらコメントアウトして挙動を確かめていたら、画面サイズを図るために追加した「MediaQuery.of(context).size.height;」が原因と分かる。
「MediaQuery.of」でなぜ再描画?と思ったが、Flutter公式にちゃんと説明があった。
Querying the current media using MediaQuery.of will cause your widget to rebuild automatically whenever the MediaQueryData changes (e.g., if the user rotates their device).
MediaQuery.ofを使用して現在のメディアをクエリすると、MediaQueryDataが変更されるたびに(たとえば、ユーザーがデバイスを回転させた場合)、ウィジェットが自動的に再構築されます。
https://api.flutter.dev/flutter/widgets/MediaQuery-class.html
言われてみれば確かに、、、という感じだが、盲点だった。。
buildメソッド下で「MediaQuery.of」を多用していたため、利用する都度、画面情報を取得するのではなく、一度取得したら、変数に入れて使い回すように修正。これで再描画は回避できた。
今後は安易にMediaQueryを連発しないように注意します。
2022/1/11 GetX(「get」パッケージ)のサンプルコードを試したら膨大なエラー(「No named parameter」など)
pub.devで7,000を超えるLIKEがついているGetXに興味が湧く。
日本語の解説ページまで用意されているのが珍しい。
状態管理にはProviderを使っているが、もう少し手軽な方法がないかと思っていたので、早速サンプルコードを試してみると、
Error: No named parameter with the name 'useInheritedMediaQuery'.
useInheritedMediaQuery: useInheritedMediaQuery,
^^^^^^^^^^^^^^^^^^^^^^
Context: Found this candidate, but the arguments don't match.
const CupertinoApp.router({
^^^^^^^^^^^^^^^^^^^
Context: Found this candidate, but the arguments don't match.
const MaterialApp.router({
^^^^^^^^^^^^^^^^^^
Context: Found this candidate, but the arguments don't match.
const MaterialApp({
^^^^^^^^^^^
(以下略)
などの多数のエラーが出る。
結論としては、最新の4.6.1だと発生するようで、4.6.0未満(具体的には4.5.1)に下げたら解消した。
確かに書くコード量も少なく便利なので、既存プロジェクトにおいても、部分的に活用するのもアリかもしれない。
2022/1/9 Google Cloud PlatformのOAuth同意画面のアプリ名を変更するとエラー
Flutterに限らない話だが、Google Cloud Platform(GCP)の同意画面設定でアプリ名を変えたら、
「アプリの保存中にエラーが発生しました」
と表示され、何度やっても変更できない。
デフォルトのアプリ名は「project-######(数字12桁)」だが、これを変更したかった。
調べると、こちらの情報が類似しており、「アプリ名をユニークにしたら通った」との報告がされていた。
しかし、絶対にユニークになる名称に変更してもエラーになる。
色々と実験しまくった結果、
アプリ名に「google」という言葉が入っているとエラーになる!
と判明。
「Googleテストアプリ」に変更したら上記エラーになったが、単純に「テストアプリ」にしたらエラーが出なかったので気づいた。
その後、色々なパターンで試したが、恐らく間違いない。
この情報はチュートリアルページでも見つけられなかったので、地味に苦労した。。。(どこかに記載があるのかもしれませんが、、)
本番のアプリ名に「google」を入れることはないと思うが、テスト開発中のアプリには適当に名前を付けがちなので、自分のような目に会わないよう、お気をつけください。。
2022/1/5 Appleの審査に出そうとしたら「Apple TVプライバシーポリシーは必須です」の表示が出て止められる
アプリを更新してApple審査に出そうとしたら、上記メッセージが出てストップ。
初めて見るメッセージで戸惑う。。
App Store Connectの左側メニューの「一般」の「Appのプライバシー」に入ると、画面上部に、
!このページ上に1つ以上のエラーがあります。
日本語とApple TVプライバシーポリシーは必須です。
との表示。
確かに「Apple TVプライバシーポリシー」の欄は空欄にしていたが、他の審査時にはこんなエラーは出なかった。
心当たりとしては、以前、間違って「tvOS App」を「提出準備中」の状態にしてしまったことか。。
この問題についてググってみたが、Apple TVを説明するApple公式の情報以外はほとんど見つからず、、、。
かなり以前の情報ではあるが、唯一見つかったこちらの情報(数少ない情報で大変助かりました!)では、「tvOS Appの取り下げはできない」とのことで、かなり厄介そう。。。
しかたなく、iPhone用のプライバシーポリシーのURLを「Apple TVプライバシーポリシー」にも設定して審査に出した。
URLを入力した部分に、「Apple TVプライバシーポリシー」自体の審査をするような表示が出てきたので、アプリ審査がさらに難航しそうな予感がするも、結果はあっさり承認。
ちなみに、上記情報で紹介されていた方法にならい、レビューコメントに「Apple TVの利用は希望していませんが、登録を間違えたようなので、キャンセルしてください」と書いたが、この部分はスルーされ、レスポンスはなかった。
また、この後で気がついたが、「tvOS App 1.0提出準備中」となっている所をマウスオーバーすると、赤いマイナスマークが出てきて、提出準備を削除することができる模様。今は取り下げできるようです(怖くてやっていないですが、、)。
いずれにしても、tvOSでリリースするつもりがないなら、tvOSの提出準備は押さないよう、注意した方が良さそうです。
2022/1/2 App Store ConnectへのArchive送信時に「Unable to process request - PLA Update available」のエラー
日記の内容はこちら↓