一、调试& hot reload
1.1配置pubspec.yaml文件
由于业务功能模块是以dart package形式存在的,调试依赖本地相对于模块即可 eg:
feature_publicity_list:
path: /Users/myself/feature_publicity_list
集成模块时,要使用远程目录 eg:
feature_publicity_list:
git:
url: git@gitlab.git-inc.com:beacon-flutter/feature_publicity_list.git
ref: 6.3.1
1.2运行调试
1.2.1在Android studio控制台的Terminal输入命令 flutter attach
可以连接,但是这种连接方式不能断点调试
1.2.2 直接连接
eg:
注:平时用的较多,因为可以打断点调试
1.2.3 如果有多个设备连接
当有多个设备在电脑上打开时,执行flutter attach会出现如下:
使用:需要使用 flutter attach -d +UDID 指定一个设备进行attach
1.2.4 当一个设备上多个应用集成了flutter
执行flutter attach会有如下提示:
使用:执行 flutter attach --app-id +bundleID 选择一个APP进行attach
1.3 hot reload
调试设备连接成功之后,控制台Debug会出现如下提示:
可以在flutter页面,做一些改动,重新加载即可看到效果
tips: 相应快捷键
R 热重启(重新启动,程序中发生变化的state都可重置)
r 热重载(程序中发生改变的state变化无法重置)
1.4如何打断点调试
要在flutter_builder(对应的壳)工程中,直接搜索找到相应的文件,打上断点,app进入到对应页面即可:
二、问题盘点
1.页面退到后台,调用生命周期方法
场景一
iOS和Android 生命周期方法不同
场景描述:从当前APP跳转至设置,修改状态后回传,在当前页面展示最新状态
调用方法:flutter_boost提供的页面周期方法
@override
void didChangeDependencies() {
super.didChangeDependencies();
if (ModalRoute.of(context) != null) {
PageVisiblityBinding.instance.addObserver(this, ModalRoute.of(context)!);
}
}
@override
void onForeground() {
super.onForeground();
_viewModel.configNotiTips();
}
但是当Android测试这里会有问题,无法实时监听消息变化 经测试发现Android 走的方法为onPageShow
@override
void didChangeDependencies() {
super.didChangeDependencies();
if (ModalRoute.of(context) != null) {
PageVisibilityBinding.instance.addObserver(this, ModalRoute.of(context)!);
}
}
@override
void onPageShow() {
super.onPageShow();
_viewModel.configNotiTips();
}
2.flutter package如何导入图片
在package的工程.yaml文件中,增加图片 可以指定图片的具体路径,也可指定文件夹
调用图片:package参数必须传入,否则图片无法正常获取
Image(
image: AssetImage('images/daily-propagating.png',
package: ‘feature_publist’))
注:这里package对应的是 导入图片image文件夹所在的位置
问题可参考:
www.jianshu.com/p/9c221a538… book.flutterchina.club/chapter2/fl…
3.搜索框输入拼音时,回调处理
问题描述:iOS系统键盘搜索输入拼音时,会实时回调搜索;尤其使用九键如输入1、2键时会有多种组合搜索,如ad、ae、bf等发送请求,导致搜索过程出现结果为空页面、或过快偶现其他异常
问题原因:iOS系统键盘输入时频繁调用onChange()方法
问题解决:在onChange中禁止iOS键盘输入拼音未完成时的回调,判断是否compose完成
Widget _buildInputWidget() {
return textInputWidget(
editingController: _editingController,
focusNode: _focusNode,
onChangedCallBack: (String inputText) {
///区分平台 iOS键盘禁止输入拼音回调,判断是否compose完成
///经测试添加判断后Android使用搜狗键盘输入compose效果相反,故区分平台
if (Platform.isIOS && _editingController.value.isComposingRangeValid) {
return;
}
4.弹软键盘,布局随键盘顶上去
解决:在Scaffold加属性
resizeToAvoidBottomInset: false,
5.自动执行,生成.g文件
命令:
flutter packages pub run build_runner build --delete-conflicting-outputs