Open11
[Flutter] アプリ開発のための備忘録
[Flutter] URLを開く時に「ブラウザ」ではなく「アプリ」で開く手順 (iOS) | 220310
- 使用プラグイン:url_launcher
- Androidは自動でアプリが開くが、iOSはデフォルトがブラウザのために設定が必要?
- 状態:未確認
参考ページ
[Flutter] 特定のバージョンを指定する方法 | 220307
ターミナル
$ cd /Users/~ Flutter大元フォルダのパス //個別プロジェクトではない事に注意
$ git checkout 2.10.2 //ここでバージョン指定)
FVMを使う場合
[Flutter] VSCodeの便利ツールFlutterインスペクター | 220127
▼起動手順
- ⌘+shift+p
- Open DevTools を起動
[Flutter] GoogleマップのAPIキーを秘匿 (flutter_dotenv) | 220309
.env
MAP_API_KEY="xxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
.gitignore
//.gitignoreに追加し、管理対象から外す
*.env
// Dartで読み込み
String apiKey = dotenv.env['MAP_API_KEY']!;
▼iOSでの処理(Xcode)
ios/Runner/AppDelegate.swift
import UIKit
import Flutter
+import GoogleMaps
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
+ let mapAPIKey = Bundle.main.object(forInfoDictionaryKey: "MapAPIKey") as! String
+ GMSServices.provideAPIKey(mapAPIKey)
GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
ios/Runner/Info.plist
+ <!-- Google Maps API Key -->
+ <key>MapAPIKey</key>
+ <string></string>
+ <key>NSLocationWhenInUseUsageDescription</key>
+ <string>ここに位置情報アクセスに関する理由を記載</string>
使用パッケージ (flutter_dotenv)
ネイティブ側 (iOS, Android) で読み込む手順
AppDelegate.swiftに以下記述を忘れずに
import GoogleMaps
[Flutter] Firebase Hostingで「利用規約」や「プライバシーポリシー」のWebページを作成 | 210821
ターミナル
$ firebase login
$ cd (作ったフォルダのパス)
$ firebase deploy
- エラーが出る場合は$ firebase logout($ firebase init も必要?)
参考リンク
[Flutter] MainActivity.javaのファイルが存在しない
・「MainActivity.kt」が代わりにある
これが発生したため
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Warning
──────────────────────────────────────────────────────────────────────────────
Your Flutter application is created using an older version of the Android
embedding. It is being deprecated in favor of Android embedding v2. Follow the
steps at
https://flutter.dev/go/android-project-migration
to migrate your project. You may also pass the --ignore-deprecation flag to
ignore this check and continue with the deprecated v1 embedding. However,
the v1 Android embedding will be removed in future versions of Flutter.
解答例
Solution
(訳)クラスファイルMainActivity.javaをJavaのコードで作成し、Kotlinのものを削除。それで上手くいくはずです。
※補足:android/app/src/main/java/com<domain>/android/<project_name>
public class MainActivity extends FlutterActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GeneratedPluginRegistrant.registerWith(this);
}
}
[Flutter] Widget外でDateFormatを使うとエラーが生じる
// Widget外にこれを追加すると
DateFormat('yyMMdd', "ja_JP").format(DateTime.now());
// A.例外が発生
// LocaleDataException (LocaleDataException: Locale data has not been initialized, call initializeDateFormatting(<locale>).)
// エラーメッセージに従い以下を追加
initializeDateFormatting("ja_Jp");
// B.別の例外が発生する
// UnsupportedError (Unsupported operation: Cannot modify unmodifiable map)
原因
// 1. Aに関して、以下言語設定より親部分で上記を実行していた
// 2. Bに関して、以下言語設定と競合していた
return MaterialApp(
// 多言語対応のための処理
localizationsDelegates: [
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate, // ペーストできない問題で2行追加
DefaultCupertinoLocalizations.delegate
],
home: Test(),
);
[Flutter] このアプリケーションにはiOS 15.4が必要です。
TargetのほうのBuild SettingのiOS Deployment Target
【Flutter】iOSのSimulatorが「File name too long」で突然起動しなくなる
flutter run --debug --dart-define=FLAVOR=dev
Launching lib/main.dart on iPhone 12 in debug mode...
Xcode build done. 332.8s
Unable to install /Users/XXXX/Developer/YYYY/build/ios/iphonesimulator/Runner.app on 4C94954A-8CE8-408B-9006-8A85523DAD2C. This is sometimes caused by a malformed plist file:
ProcessException: Process exited abnormally:
An error was encountered processing the command (domain=NSPOSIXErrorDomain, code=63):
copyfile of file:///Users/XXXX/Developer/YYYY/build/ios/iphonesimulator/Runner.app/ to file:///Users/XXXX/Library/Developer/CoreSimulator/Devices/4C94954A-8CE8-408B-9006-8A85523DAD2C/data/Containers/Shared/SystemGroup/systemgroup.com.apple.installcoordinationd/Library/InstallCoordination/PromiseStaging/734B870A-DB0D-4CA6-A3E6-D6DC9D0CDF70/Runner.app failed: File name too long
Unhandled error domain NSPOSIXErrorDomain, code 63
Command: xcrun simctl install 4C94954A-8CE8-408B-9006-8A85523DAD2C /Users/XXXX/Developer/YYYY/build/ios/iphonesimulator/Runner.app
Error launching application on iPhone 12.
Exited (sigterm)
過程
- ダメ↓
Found a fix for this error. what i did was to reset the simulator (Device -> Erase All Content and Settings), and then run $ flutter clean after that rebuild your app.
直接的な解決策かは不明だけど、Androidも起動できなくなっており、最終的にこちらで解決↓↓
【Flutter】pythonのバージョンが上がらない
// pythonのアップデート処理
$ brew upgrade python
Warning: python3 3.9.13_1 already installed
色々試して、最終的にこの記事通りにすると解決
記事内の 方法1 にて
【Flutter】コマンドをまとめる便利機能 ~シェルスクリプト~