记录一些 Flutter 研发中遇到错误及处理.

1. Unexpected end of file from server

在新环境安装好 Flutter 环境后 , 运行项目报错

Exception in thread "main" java.net.SocketException: Unexpected end of file from server

搜索后发现是因为 gradle 设置了代理 . 前往 C:/Users/<username>/.gradle/gradle.properties ) (不是项目下的gradle.properties) , 删除多余的代理设置

systemProp.https.proxyPort=1080

参考链接

简书: 解决Flutter报错 Unexpected…

2. Waiting for another flutter command to release the startup lock…

在安装依赖时 , 偶尔出现 Waiting for another flutter command to release the startup lock... , 通常是上一个命令还未执行完毕 , 但是因为墙的原因可能继续等待也未必成功 .

想要终止等待状态 , 需要前往 flutter 安装目录下删除 bin/cache/lockfile 文件即可 . 若显示该文件被使用中无法删除 , 则先杀死 dart 进程再删除即可

1
2
3
4
5
// Linux
killall -9 dart

// Windows
taskkill /F /IM dart.exe
参考链接

知乎

3. Flutter命令输入后卡住

很多人遇到这个问题 , 在一段时间未用 Flutter 后尝试更新版本 , 或者在使用其他 flutter xxx 命令时 , 命令行窗口直接卡死 , 许久许久之后爆红 , 显示超时之类的 .在此期间下一个 flutter 命令也无法使用 , 只能干等着 , 导致工作效率大大下降 .

首先可以参考上面 2 中所述先强制终止上一个命令 . 然后弄清楚为什么会导致命令执行如此慢的原因.

执行的命令通常是包含了访问 Flutter Git 仓库 ,或者访问 Pub Dart 仓库 , 而这些仓库通常是在海外 . 而当前连 GitHub 直连的速度都比较感人的情况下 , 科学上网是必不可少的 . 当科学上网全局配置时 , 其实对于 Git , Terminal 等默认都是不生效的 , 还得一一去配置 , 显得比较麻烦 . 因此我这边选择配置仓库对应的国内镜像 , 一劳永逸 .

具体可参考 清华大学开源软件镜像站

参考链接

其他参考: 链接

4. MissingPluginException(No implementation found for method getAll on channel plugins.flutter.io/shared_preferences)

在 Flutter 2.2.2 - 2.2.3 左右的版本安装部分插件比如 shared_preferences 后运行安卓程序 , 有可能会提示以上错误 .一番排查后 , 定位此为一个版本不兼容问题导致 Android 部分未注册上该插件 , 此处记录解决方案

__a. 更新 buildTypes __

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

android {
compileSdkVersion 30

sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}

lintOptions {
disable 'InvalidPackage'
}

defaultConfig {
...
}

signingConfigs {
release {
...
}
}

buildTypes {
debug {
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}

release {
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
// signingConfig signingConfigs.debug

signingConfig signingConfigs.release

minifyEnabled false
shrinkResources false

useProguard true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}

b. 增加混淆

1
-keep class androidx.lifecycle.DefaultLifecycleObserver

c. 更新 MainActivity (最重要)

1
2
3
4
5
6
7
8
9
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugins.GeneratedPluginRegistrant

class MainActivity: FlutterActivity() {
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
GeneratedPluginRegistrant.registerWith(flutterEngine) // add this line
}
}
参考链接