Flutter 专题55 日常问题小结#yyds干货盘点#

【Flutter 专题55 日常问题小结#yyds干货盘点#】君不见长松卧壑困风霜,时来屹立扶明堂。这篇文章主要讲述Flutter 专题55 日常问题小结#yyds干货盘点#相关的知识,希望能为你提供帮助。
            小菜作为初学者,基础薄弱,继续整理日常小问题;
问题一:依赖版本冲突
            Flutter 的更新很频繁,而我们本地的环境可能会是一个较低的稳定版本,而我们使用的插件可能版本较高,在集成时可能会遇到如下冲突;

Flutter 专题55 日常问题小结#yyds干货盘点#

文章图片

尝试一:            在 pub.dev 中找到问题的插件,根据更新列表逐个低版本尝试,注意需要替换成固定版本(无 ^),直到正常使用版本,虽然靠谱但是可能尝试次数很多;
Flutter 专题55 日常问题小结#yyds干货盘点#

文章图片

尝试二:
  1. 将出问题的插件版本更换为 any,如:json_annotation: any;
  2. Package get 更新插件,自动匹配;
  3. 在 pubspec.lock 文件中找到问题插件,系统会自动匹配安全版本(小菜测试可能与逐个排查的版本不一致);
  4. 在 pubspec.yaml 中替换这个安全版本即可,注意:any 只是用来辅助查找安全版本,在实际项目中不建议用,可能会出现适配问题;
    Flutter 专题55 日常问题小结#yyds干货盘点#

    文章图片
尝试三:            最根本的解决方法是升级本地 SDK 版本,这样成本较高,可能会引起其他插件的兼容问题,需整体处理;
Flutter 专题55 日常问题小结#yyds干货盘点#

文章图片

问题二:新页面初始化对话框失败
            小菜因需求,准备打开新的页面时先弹出对话框供用户选择,小菜在 initState 方法初始化,但一直提示页面未初始化,弹框位置错误;
Flutter 专题55 日常问题小结#yyds干货盘点#

文章图片

尝试一:            小菜根据错误提示将弹窗位置调整到 didChangeDependencies 和 build 中且异步尝试,同样失败,提示需要父类组件构建成功之后才可以构建子组件;
Flutter 专题55 日常问题小结#yyds干货盘点#

文章图片

尝试二:            小菜前几天学习生命周期,稍稍看了一点 WidgetsBinding,用作绑定 Widget框架和 Flutter engine 的桥梁;通过 addPostFrameCallback 监听 Frame 绘制最后一帧,同时可以获取元素大小;且整个生命周期只会执行一次;
WidgetsBinding widgetsBinding = WidgetsBinding.instance; @override void didChangeDependencies() super.didChangeDependencies(); widgetsBinding.addPostFrameCallback((callback) showDialog( context: context, barrierDismissible: false, builder: (BuildContext context) return GenderChooseDialog( title: 小哥哥小姐姐请选择, onBoyChooseEvent: () => Navigator.pop(context), onGirlChooseEvent: () => Navigator.pop(context)); ); );

Flutter 专题55 日常问题小结#yyds干货盘点#

文章图片

问题三:列表居中
            小菜在跟朋友聊天时讨论如何如何将列表在屏幕居中,小菜尝试了 Center 内嵌套 ListView 但不能居中;
            查了一下资料和源码,直接设置 ListView 的 shrinkWrap=true 即可;shrinkWrap 可以设置 ListView 只占用所需要的空间;
Widget _listItemWid(values) return Center( child: ListView.builder( shrinkWrap: true, scrollDirection: Axis.horizontal, physics: const AlwaysScrollableScrollPhysics(), padding: const EdgeInsets.all(6.0), itemCount: values == null ? 0 : values.length, itemBuilder: (context, i) return Padding( padding: EdgeInsets.symmetric(horizontal: 10.0), child: Icon(values[i])); ));

Flutter 专题55 日常问题小结#yyds干货盘点#

文章图片

            小菜还处于基础学习阶段,有很多问题待研究;如有错误请多多指导!

    推荐阅读