flutter Tips集
エミュレータ起動時のエラー
java.lang.RuntimeException: Unable to create Debug Bridge: Unable to start adb server: Process did not terminate within specified timeout, killing it
'C:\Users\[username]\AppData\Local\Android\Sdk\platform-tools\adb.exe start-server' failed -- run manually if necessary
原因
タスクマネージャを開くとabd.exe
が複数実行されているのが原因だった。
解決法
adb.exe
をタスクマネージャですべて閉じるか、再起動してもう一度エミュレータを起動したら、無事起動できた。
実行時のエラー(Platform)
Failed to find Platform SDK with path: platforms;android-29
原因
コンパイルする対象のSDKバージョンが実行するエミュレータなどの環境のSDKバージョンより低いのが原因。
解決法1
android/app/build.gradle
の以下の部分を適当なSDKバージョンに変更する。
android {
compileSdkVersion 30
defaultConfig {
targetSdkVersion 30
}
}
解決法2
android/build.gradle
に以下を追加する
subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}"
project.evaluationDependsOn(':app')
+ afterEvaluate {project ->
+ if (project.hasProperty("android") && project.property("android").compileSdkVersion.equals("android-29")) {
+ android {
+ compileSdkVersion 30
+ }
+ }
+ }
}
Dartの命名規則
Android Studioでコードを整形する
ショートカット: ctrl + Alt + L
うまく整形できないときは、カンマ,
が各プロパティの末尾に入っているか確認する。
RaisedButton(
child: Text("OK"), // <- カンマが必要
), // <- カンマが必要
[Web] Github Actions で GitHub Pages に自動デプロイ
name: deploy
on:
workflow_dispatch:
push:
branches:
- main
jobs:
build:
name: Flutter Web Deploy
runs-on: ubuntu-18.04
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Setup Flutter
uses: subosito/flutter-action@v1
with:
channel: 'beta'
- name: Setting for Web
run: flutter config --enable-web
- name: Install
run: flutter pub get
- name: Build
run: flutter build web
- name: Deploy
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_branch: gh-pages
publish_dir: ./build/web
[Web] GitHubPages でデプロイ時の404エラー
デプロイしたサイトにアクセスしたときの以下のようなエラー(サイトは表示されず真っ白)
Failed to load resource: the server responded with a status of 404 ()
原因
index.html
で base URL が /
に指定されている ->
https://github.com/{username}/{reponame}
ではなく https://github.com/{username}/
が指定されてしまっている。
<base href="/">
解決法
index.html
での <base>
の部分を削除する。
+
- <base href="/">
Android エミュレータで日本語対応 & 日本語入力
日本語対応
Setting > System > Languages & imput >Languages > Add a language > 日本語を選択 > 右のアイコンを上にドラッグして、日本語を 1 にする
日本語入力
設定 > システム > 言語 & 入力 > 画面キーボード > 画面キーボードを管理 > Gboard > 言語 で日本語を追加する
showDialog の builder でのエラー
onPressed: () => showDialog(
context: context,
builder: (BuildContext context) => AlertDialog(
title: Text(_todoItems[index]),
),
),
BuildContext isn't a type.
原因
不明
解決法
BuildContext を削除することで一時的に解決することはできた。
- builder: (BuildContext context) => AlertDialog(
+ builder: (context) => AlertDialog(
Hot Reload と Hot Restart の違い
Hot Reload
Hot Reload は、アプリの状態を保持したままコードの変更を取り込みます。
Hot Restart
Hot Restart は、変更を取り込んでアプリを再実行します。再実行するのでアプリの状態は失われます。
例
- List<String> _todoItems = [...];
+ List<Todo> _todoItems = [...];
このように変更してホットリロードをすると、_todoItems
は List<Todo>
に変更されますが、配列の要素(文字列)は保持されるのでエラーが起こります。
しかしホットリスタートすれば、配列の要素も一度削除されるので、エラーは起こらずに変更が取り込まれます。
参考
アンダースコア
変数名や関数名の前にアンダースコアをつけると、その変数や関数は private になります。
const foo = 5; // public
const _bar = "bar"; // private
flutter_arcore_plugin ^0.0.11
関数の引数をオブジェクトにする({}
をつける)と、使う際にプロパティを指定するので、可読性が上がる。
void func({String hoge, double fuga}) {}
func(hoge: "hoge", fuga: 3.14)