【flutter】开发问题集锦

469 阅读3分钟

一、调试& 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: image.png 注:平时用的较多,因为可以打断点调试

1.2.3 如果有多个设备连接

当有多个设备在电脑上打开时,执行flutter attach会出现如下: image.png 使用:需要使用 flutter attach -d +UDID 指定一个设备进行attach

1.2.4 当一个设备上多个应用集成了flutter

执行flutter attach会有如下提示:

image.png 使用:执行 flutter attach --app-id +bundleID 选择一个APP进行attach

1.3 hot reload

调试设备连接成功之后,控制台Debug会出现如下提示:

image.png

可以在flutter页面,做一些改动,重新加载即可看到效果

image.png tips: 相应快捷键 R 热重启(重新启动,程序中发生变化的state都可重置) r 热重载(程序中发生改变的state变化无法重置)

1.4如何打断点调试

要在flutter_builder(对应的壳)工程中,直接搜索找到相应的文件,打上断点,app进入到对应页面即可:

image.png

二、问题盘点

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文件中,增加图片 可以指定图片的具体路径,也可指定文件夹

image.png

调用图片: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等发送请求,导致搜索过程出现结果为空页面、或过快偶现其他异常

image.png

问题原因: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