问题与方法总结

285 阅读4分钟

1.hive插件返回报错

hive插件返回报错,提示String not subtype of int ,但定义处本来就是string,debug也发现不了问题,纳了个大闷。 尝试解决:切换之前分支排查出问题的提交,利用排除法。

  • 原因:因为之前修改了TypeId,而之前的缓存文件里面的id是不会被覆盖的,所以导致一直访问到其他box报类型错。
  • 解决方法:直接删除对应id的box,即.hive文件,重启。.hive文件一般在c/userneame/document(文档)中,不在的话找到Hive.initFlutter(),print出里面的路径即可!!

2.快捷键聚焦失效,以及与输入框聚焦冲突

  • 主要是setState()后注意initState里面的一些监听是不更新的,所以要使用didUodateChange().
  • 与输入框同步聚焦的话,使用delay异步聚焦输入框,即可先调用快捷键再聚焦。

3. try{} on GrpcError catch(e){ }表示catch中的e为GrpcError类型,即只处理这种错误,因为dart中错误处理是不会自动指定类型,需要手动指定

4. 拖动排序空白问题:ReorderableListView.builder不要用itemExtent,直接在itemBuilder里面设置高度,不然会拖动排序会出现大量空白,原因后续查找

5. ReorderableListView拖动默认移动端长按,若想修改为单击某个icon拖拽,只需将buildDefaultDragHandles设为false,再特地icon上包裹ReorderableDragStartListener即可。

6.多窗口getAllSubWindowIds,返回报错

  • 当你在flutter端找不到问题时,打开build/windows/runner/runner.sln运行debug项目查找问题
  • 修改c++后,需要在as先运行一遍然后再在vsdebug,否则报错不会命中断点,未加载任何符号
  • 当ids为空时,返回会发生RangeError: Value not in range: 8,表面是越界错误,实质算是类型转换问题,需要在C++里面判断ids是否为空,解决方法如下
if (window_ids.empty()) {
    result->Success();
}
else {
    result->Success(flutter::EncodableValue(window_ids));
}

7.pb-dart文件转换问题

 protoc -Igrpc/HabitCombo_App HabitCombo_App.proto --dart_out=grpc:lib/generated/habitComboApp --proto_path=./
  • 'protoc-gen-dart' 不是内部或外部命令,也不是可运行的程序或批处理文件。
  • 解决方法:
  • 1. flutter pub global activate protoc_plugin(一般是 pub global activate protoc_plugin,但是要的是flutter里面的dartsdk,所以要加flutter)
  • 2.找到protoc-gen-dart'安装路径,添加到环境变量即可,一般在C:\Users\26477\AppData\Local\Pub\Cache\bin

8.as安装报错,显示包名无法安装

  • 一开始以为红米手机账号未登录导致,后来发现手机内包名未彻底删除导致无法安装。
  • 输入命令adb uninstall app的包名(一般报错信息有)
  • 包名在AndroidManifest.xml里面的packge

兼容小屏技巧

  • 1 .编写页面时切记能用column和row,就不用stack,这是为了兼容小屏

animateTo跳转

  • 2 .listview滚动animateTo要加一层Futrue.delayed,否则不行

中文标点符号未沉底

  • 3.Flutter 中文标点符号未沉底:Text属性里面有个locale,设置为中文即可

InkWell使用

  • InkWell内层使用Material组件封装的动画,所以须在Scaffold下才生效。

  • InkWell的child赋值颜色会覆盖底层封装的动画,因此需要在InkWell外包裹一层Material并赋值颜色即可解决。

  • InkResponse可以定义圆角水波纹,InkWell限制直角矩形。

  • 4.CustomPaint

  • 5.CustomClipper

ListView排序不刷新问题

  • 给每个列表项加key!!!!否则ListView.builder有缓存是不刷新的!!!

发送彩信(携带图片跳转)

  • 首先先找到相关关键字,如彩信mms,再搜索pub
  • 其次遇到ios无法唤起,先排除是否设备型号问题,再拉插件example运行,排除自身问题,查找源码发现有个canSendAttachments()返回false,直接debug去除该判断,搞定!

获取手机通讯录

  • 权限设置!!!!ios除了info.plist添加键值对,还有Podfile里面要去掉相关功能的注释!!!

ios启动页配置图片后刘海屏不兼容

  • 修改背景底色和图片相同即可,ios/Runner/Base.lproj/LaunchScrenn.sb修改backgroundColor

异常报错unsafe lock|dispose

  • 查看页面内是否多个controller未销毁

expandable插件,在ExpandablePanel里面的expand使用ListView.builder,会多出一行空白,在外面包裹SafeArea就消失

时间置顶效果!!

  • 外层NestedScrollView需要实现Tab吸顶,内层的列表需要监听可视区域,无法直接监听内层的列表!!!
  • 解决方法:flutter_scrollview_observer这个牛逼插件!!!实吹,作用到外层的NestedScrollView,然后设置sliverContext观察监听即可,可以参照插件内的example例子!
  • 核心思路:遇到插件无法解决问题时,可以查看所有的(包括closed的)issues,再全面看看所有example,最后可以直接看看作者有没有联系方式!直接找大佬问哈哈哈

谷歌的recaptcha,webview无法呈现验证交互

  • !!!!泥马要开代理代理代理!!!!!!