Flutter项目安装、调试常见问题

一、问题记录

1、type ‘MyApp’ is not a subtype of type ‘StatelessWidget’

在这里插入图片描述
分析:
页面组件从无状态变成了有状态,不能直接使用热重载,所以报错。

解决办法:
重启应用

2、iOS打release包是出现:Build service could not create build operation: unknown error while handling message: MsgHandlingError(message: “unable to initiate PIF transfer session (operation in progress?)”)

这个报错信息很少见,多发生在xcode配置出错或xcode更新导致的环境变化。所谓环境变化就是xcode更新如果是覆盖式更新则好一些,如果是完全卸载式更新,也就是xcode所有的编译缓存都删除了,全部再次安装编译生成一遍新的编译缓存,但是按照这种方式实验之后没有任何效果。
最后是查了很多资料才发现问题,Xcode 14.3版本移除了ARC相关的库,从而导致一些默认部署目标是iOS 8版本的第三方库出现报错。只要最低部署目标不低于iOS 9版本,运行项目时就不会去链接ARC相关的库,也就不会出现找不到库的报错。
下面是官方内容:在这里插入图片描述
系统已经内置有ARC相关的库,所以没必要再额外链接,至少Xcode 14支持的最低部署目标iOS 11及以上版本的系统肯定是没问题的。如果应用部署目标不低于iOS 11还出现问题,那么应该是第三方库的部署目标有问题。 现在Xcode 14.3移除arc目录的原因已经很清楚,是因为支持的最低部署版本的系统都已经内置了ARC相关的库。如果应用最低部署目标版本本身不低于iOS 11,解决这个问题很简单,只需要将第三方库部署目标的iOS版本设置成和应用最低部署目标的iOS版本一致。应用最低部署目标是iOS 11.0版本

由于上次升级之后原本所有的第三方都是升级好的,那就是这个引入的flutter组件和基础库的问题了,按照之前的方法也行不通了,没法去删除里面的一些.a库,那就只能限制flutter的基础库版本了,最后的解决方法是在第三方库管理的地方给所有库设置最低支持iOS11以上。
在这里插入图片描述

3、iOS下flutter在iOS14+ debug模式上无法运行的问题

在这里插入图片描述
发现问题是在debug模式下只能链接真机,直接调试,首先想到的是flutter脚本是否可以配置打包环境
在这里插入图片描述
检查之后发现不是在这里配置的,我又想是不是只有真机调试才会这样,但是发现打出来的debug包依然不行,查看flutter官网说的是,debug模式下的flutter的BuildMode就默认debug模式,但是debug模式默认是只支持debug调试下才会展示,官网也给了另外两种模式,参考这里我在XCode里面配置了三种环境下的模式,问题解决:在这里插入图片描述

4、iOS集成之后,flutter页面在内嵌scrollView上滑动时出现偏移和手势冲突问题

在重构flutter组件完成之后,升级了本地的flutter组件的通讯机制。在把flutter页面内嵌时出现了问题,内嵌完成后,不管是下拉刷新还是左右滑动,均出现异常现象,交互体验和iOS原生相差很大,又因为所嵌在的控制器是继承与第三方库中,所以改起来非常麻烦。
第一步:首先重写了flutter的控制器,内容就是重写了原生的手势和触摸控制,想法是先控制flutter页面的偏移量,来解决左右滑动异常的冲突。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
第二步:重写一个scrollView,让这个scrollView设置在flutterView中的触摸功能禁用,防止在scrollView上和flutterView上的交互冲突。
在这里插入图片描述
本来想着到这里问题应该已经解决了,万万没想到新的问题又来了,在左右滑动解决之后,发现上层控制器在滑动之后,其所对应的title滑动在滑动完成之后却展示异常,查找第三方库之后,发现这个第三方是对scrollView上层视图中的滑动手势进行了判断,这就和上边的第二步冲突了,但是第二步又不能省略,没有办法就只能再想办法了。
本来想着是把第三方拉出来,变成自己的库,但是这个时候组件化的麻烦揪出来了,因为我这边好多组件对其有依赖,我如果拉出来所有的依赖组件都要修改相应的依赖,这还不是最重要的,我如果拉出来之后,修改这个问题,就会导致外面所有依赖的组件展示可能出现异常,这就问题大了,思量再三就决定放弃这个方法,改成相应成本小一点的方法。
这个方法是重写改组件所以来的所有第三方库里所用到的文件,通过实现发现总共改了10个文件,通过半天的时间改完之后,发现可以了,
第三方组件问题处:
在这里插入图片描述
在这里插入图片描述
删除这两处判断才解决

5、iOS集成报错: Invalid Podfile file: cannot load such file – …/xxxProject/…

在flutter升级3.7.10之后,在iOS端相应的集成方式有所变化,根据官方文档显示使用最新的集成方式:
#Flutter3.1之前使用的方法在这里插入图片描述
在这里插入图片描述
变为
在这里插入图片描述
在这里插入图片描述
并且要在podFile文件中添加一行特殊配置,保证在pod install时正确的导入flutter文件在这里插入图片描述
最后集成时可以正确的集成进来

6、iOS集成报错Command PhaseScriptExecution failed with a nonzero exit code:

flutter项目集成失败,脚本未正确执行,导致这个问题有多方面原因
1、当flutter代码本身有错误报错:修复flutter语法即可
2、flutter第三方和flutter版本冲突:无法正常运行,选择客户端支持并且flutter不冲突的第三方
3、flutter未正常引入iOS工程:执行pub get或者pub upgrade命令,如果依然无法修复,执行flutter build ios --debug,再重新尝试

7、iOS项目集成后,library not found for -lXXX解决方案

一、手动写入library–不推荐
1.build settings找到插件目录,手动设置
2.退出xcode,重新使用pod install安装插件
二、build命令
flutter build ios --debug
执行之后,pod install解决

8、iOS集成时报错:No podspec found for Flutter in …/flutter/.ios/Flutter/engine

原因看这里就是缺少这个文件,检查发现是缺少了整个.iOS资源文件,然后使用VSCode打开flutter问价,执行脚本:flutter pub get重新生成即可

9、安卓项目导入flutter module 后,同步报错:

Could not get unknown property ‘compileSdkVersion’ for object of type FlutterExtension.

mac下模拟器不能连接wifi

10、iOS中Build 提示 Flutter相关的报错。

原因:可能是Flutter相关的依赖拉取有问题。想把原生应用 Flutter接入的方法注释掉,执行 pod install,成功后。再恢复注释,在执行一次 pod install。成功后,再build即可。
需要注释的代码如下:
在这里插入图片描述
在这里插入图片描述

二、开发环境配置

1、vscode报错Could not create temporary directory: 权限被拒绝

终端执行命令:

sudo chown $USER ~/Library/Caches/com.microsoft.VSCode.ShipIt


2、执行flutter --version 卡住

修改Flutter SDK 目录下 packages/flutter_tools/lib/src/version.dart 文件。
通过 flutter --version --verbose 命令可以查看详情,如果卡在 git fetch https://github.com/flutter/flutter.git --tags,那么就是这个原因导致的。
修改flutter的仓库地址,更换为 gitee。

// String get _flutterGit => globals.platform.environment['FLUTTER_GIT_URL'] ?? 'https://github.com/flutter/flutter.git';
String get _flutterGit => globals.platform.environment['FLUTTER_GIT_URL'] ?? 'https://gitee.com/mirrors/Flutter.git';

然后重新生成flutter_tools

$ rm -rf bin/cache
$ ./bin/flutter --version --verbose

3、执行flutter channel 卡住

我碰到的原因是,git 拉取 github.com/flutter/flutter.git 失败。
修改origin的url地址为ssh的地址。
在flutter的项目目录下,执行git config -e,对origin进行修改。
在这里插入图片描述

4、执行flutter doctor报错

在这里插入图片描述
解决:根据提示信息,执行:fluttor doctor --android-licenses 即可

5、执行 fluttor doctor --android-licenses 报错

在这里插入图片描述
解决:打开android studio,设置,安装 Android SDK Command-line Tools.

三、VS Code 下调试

1、编辑器飘红,提示依赖没有

报错信息:Target of URI doesn’t exist: ‘dart:ui’.
解决方案:右击【pubspec.yaml】文件,选择【Get Packages】,会自动安装相应的依赖。
注意:通过Flutter module 引入到原生项目,需要依赖原生项目进行开发调试。
Error: Method ‘addObserver’ cannot be called on ‘WidgetsBinding?’ because it is potentially null.
在这里插入图片描述
相关代码:

FollowUpPageState({
     
     required this.patientId}) {
    
    
    WidgetsBinding.instance.addObserver(this);
  }

解决方案:升级 Flutter 版本
在终端执行:flutter upgrade。

2、升级Flutter版本或者切换版本带来的问题

目前,我们使用的版本是 3.7.10,Dart 版本 2.19.6。我本地之前是 Flutter 2.2.0,现在升级到了 3.7.10
然后在Builld医生项目的时候,会报错。报错信息为:
The specified language version is too high. The highest supported language version在这里插入图片描述
解决方案:
切换到对应的Flutter版本后,执行 flutter clean。然后重新在 doctor-flutter-module 下拉取依赖。

注意事项

每次本地flutter页面有更改的话,需要在项目中,重新执行 pod install。
安卓端,就是执行 rebuild

猜你喜欢

转载自blog.csdn.net/weixin_38201792/article/details/130978780