Flutter问题记录2 (持续更新) (apple m1 arm64插件报错)
# Flutter问题记录2 (持续更新) (apple m1 arm64插件报错)
# 一、 Error installing libwebp
编辑
\1. 问题原因
无法正常连接libwebp库
\2. 解决方案
a. 终端输入pod repo查看cocoapods在本机的地址
编辑
b. 进入该文件地址/Speces/1/9/2/libwebp c. 进入具体的报错版本 例如我这里的1.2.0,则修改里面的json文件,将Source改为https://github.com/webmproject/libwebp.git
d. 执行pod install
# 二、 SingleChildScrollView嵌套ListView等可滑动组件时产生滑动冲突
\1. 两个可滑动组件产生滑动冲突 \2. 解决方案 禁用内部可滑动组件,保留外部可滑动组件。修改ListView的physics属性为physics: new NeverScrollableScrollPhysics()
# 三、arm64 体系,真机没问题
ld: in /Users/max/Documents/GitHub/music_grading_app/ios/Pods/WechatOpenSDK_Fuck/OpenSDK1.9.2/libWeChatSDK.a(WechatAuthSDK.o), building for iOS Simulator, but linking in object file built for iOS, file ‘/Users/max/Documents/GitHub/music_grading_app/ios/Pods/WechatOpenSDK_Fuck/OpenSDK1.9.2/libWeChatSDK.a’ for architecture arm64
\1. xcode12弃用了arm64,但是有些第三方还在使用 \2. 解决方案 (1) 使用真机 (2)排除arm64体系 修改如下:在Excluded Architectures内添加arm64。
注意⚠️:打包或真机运行时需要去掉,否则会报错。
编辑
方法二:解决了
gem install --user-install ffi -- --enable-libffi-alloc 之后,pod install再次运行或任何您尝试执行的操作,但不要使用arch -x86_64.
它对我来说没有问题,这样我也可以避免采用英特尔仿真(Rosetta 2)的方式。
我在 ffi github 项目上提交的问题中找到了这个解决方案。 ruby - Error installing a pod - Bus Error at 0x00000001045b8000 - Stack Overflow (opens new window)
#
# 四、Execution failed for task ‘:app:compileFlutterBuildDebug’.
更新flutter版本
# 五、Execution failed for task ‘:app:compileDebugKotlin’.
\1. 问题原因 kotlin版本不对应或不是最新版本。
\2. 解决方案 (1) Android Studio—Preferences—Languages & Frameworks—Kotlin—更新到最新版 (2) 记住上一步的版本号,去android/build.gradle内修改buildscript
buildscript {
ext.kotlin_version = '1.4.32' /// 此处修改成上一步的版本号
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:4.1.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
2
3
4
5
6
7
8
9
10
11
12
六、 GetX: BottomSheet跳转到同一页面时首次可以,第二次点击无效 \1. 问题原因 因为使用GetX框架,在BottomSheet上使用Get.to方法跳转页面时,会默认为同一页面,默认会阻止多次此种操作。
\2. 解决方案 只需在将preventDuplicates设置为false即可
Get.to(()=>Page(), preventDuplicates: false);
# 七、 安卓模式下fluwx,调起微信支付失败
编辑
\1. 问题原因
debug模式下使用的签名是默认的,未在微信后台配置。改成和release相同的即可
\2. 解决方案
只需在将android/app/build.gradle
内修改如下
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
/// 添加以下部分即可
debug {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
八、Execution failed for task ‘:wakelock:compileDebugKotlin’. 执行flutter clean后操作
九、存储到本地的文件(图片、视频等文件),调用时找不到 \1. IOS端 例如存储时地址为/var/mobile/Containers/Data/Application/加密乱码/Documents/camera/videos/REC_9D448AD8-D726-4F9A-AF7C-E672043B88DC.mp4
但是直接调用这个地址会报错,因为文中 加密乱码会随机变换,所以要path_provider重新调用项目地址进行拼接。
\2. Android端 暂时无这种问题。
十、循环Map时,map.values.map和map.values.forEach的区别 \1. Map.values.map 具有惰性,只有它本身被迭代时,才会应用
转换后的元素不会缓存
\2. Map.values.forEach 类似于for循环 十一、Container未设置color时,添加GestureDetector时无响应 \1. 给Contianer添加color \2. GestureDetector修改behavior属性 deferToChild: 只有当前容器中的child被点击时才会响应点击事件**(默认)**。 opaque:点击整个区域都会响应点击事件,但是点击事件不可穿透向下传递,注释翻译:阻止视觉上位于其后方的目标接收事件。 translucent:同样是点击整个区域都会响应点击事件,和opaque的区别是点击事件是否可以向下传递,注释翻译:半透明目标既可以在其范围内接受事件,也可以允许视觉上位于其后方的目标接收事件。