侧边栏壁纸
博主头像
钱学超博主等级

火星人,1万小时法则的忠实拥趸。技术宅,象棋和羽毛球爱好者,马拉松PB成绩:4小时零8分。坚持认为算法是计算机的灵魂。喜欢解决问题,喜欢手工,喜欢与朋友们聊天喝酒吹牛X。

  • 累计撰写 83 篇文章
  • 累计创建 464 个标签
  • 累计收到 88 条评论
标签搜索

目 录CONTENT

文章目录

flutter 开发填坑(经验)记

钱学超
2021-12-03 / 0 评论 / 0 点赞 / 1,153 阅读 / 1,415 字 / 正在检测是否收录...
广告 广告
  1. flutter的Uri.encodeFull是仅仅处理非法字符的,:,//,/等字符是不会被编码的。而Uri.encodeComponent,是所有特殊字符全部处理掉的。

  2. flutter的Uri.decodeFull如果参数并未被Uri.encodeXXX过,那么会报错。但是flutter的特性会跳过本函数,继续执行。没有发现报错的地方。应该用try catch包围起来。

  3. flutter的依赖特别多,子组件中有可能也会依赖其他组件,所以查看所有依赖,以及某一项依赖是从哪里来的,可以使用 flutter pub deps


以上 2021.12.03

  1. flutter中的StateFulWidget,如果涉及到数据更新的,必须实现didUpdateWidget方法,并且通过数据比较,判定是否需要更新。否则即便是数据发生了变化,这个组件外部的组件调用了setState方法,因为这个组件本身并不能判定自己是否需要更新,所以它不会自动调用setState方法,界面也不会刷新。

  2. 建议:flutter是单线程应用,异步处理使用async==>then模型,这样会导致代码看起来耦合在一起,包括build方法,会将事件和UI绘制融合到一起,建议把所有的事件制作成单独的函数,build方法里边,只需要制作UI相关的代码,看起来会舒服很多。

  3. showCupertinoModalPopup会从底部弹起一个组件,showDialog会在屏幕中央弹起一个组件,但是都无法完全全屏。除了使用Navigator.push方法之外,还可以使用showGeneralDialog来实现一个全屏的对话框。


以上 2022.01.27

  1. Flutter使用Widget在单个Activity(View)中进行页面切换,使用Navigator进行页面栈的操作。判断某个Widget是否在最上层,可以使用TickerMode.of(context)来判定context所在的Widget是否是用户可见。
  2. Flutter的Container有一个forgroundDecoration,可以用来制作彩色文本,渐变文本,甚至图像颜色处理变换。Decoration有一个blendMode,就是图像叠加的模式。WX202202181742032x.png
    比如上面的红框内的文本,就是使用这个技术实现的。
  3. 使用RawKeyboardListener监听按键处理(一般在TV上需要使用遥控器控制界面),如果放到Scaffold里边,按键顺序会非常诡异。一般而言需要把RawKeyboardListener设置为最外层组件。此时AppBar中的back按钮,actions等按钮,都可以按照顺序获取焦点了。

以上 2022.02.18

  1. 获取一张图片的宽高的方法:
    这种方法需要使用listner,也可以配合使用completer.future同步获取。
  Image image = Image.file(File.fromUri(Uri.parse(path)));
  // 预先获取图片信息
  image.image.resolve(new ImageConfiguration()).addListener(
      ImageStreamListener((ImageInfo info, bool _) {
    var width = info.image.width;
    var height = info.image.height;
    print('宽度是$width,高度是$height');
  })); 

第二种方法:

	var imgData = imgFile.readAsBytesSync();
        Codec codec = await instantiateImageCodec(imgData);
        FrameInfo frame = await codec.getNextFrame();
        var img = frame.image;
        print('宽度是${img.width},高度是${img.height}');

以上 2022.03.07
11. 使用map方法容易遇到的问题
Iterable.map((e){})方法调用完毕,返回的是一个懒加载的Iterable,此时map中的参数方法不会被调用。如果你仅仅是想使用map方法作为遍历的方法,调用完map方法就认为遍历结束,这是非常错误的。
应该使用Iterable.map((e){}).toList(),join等等方法,此时map之中的参数方法才会被遍历调用。

以上 2022.05.10
13. 升级到Xcode14.3修复错误找不到libarclite_iphoneos.a
libarclite_iphoneos.a文件找不到,File Not Found!哎,升级的时候,这个东西就不能自动一点么,非得报错,然后再找,然后在解决。给我们研发人员增加了多少困难!
其实就是个资源文件,现在自动提供了,结果反而导致问题更多。其实说白了,就是升级组件的最低支持的版本号就行了。哎,不择手段!
解决方案

post_install do |installer|
  installer.pods_project.targets.each do |target|
    flutter_additional_ios_build_settings(target)
    target.build_configurations.each do |config|
      config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '14.0'
    end
  end
end

以上2023.05.19
14. flutter 学习 知识汇总

  1. 生命周期
    https://juejin.im/post/5ca81c80e51d4509f8232e9b

  2. 页面跳转
    https://flutter.cn/docs/cookbook/navigation/navigation-basics

  3. 渐变颜色
    https://www.jianshu.com/p/2c83549b56e5

  4. flutter-Go框架设计
    https://github.com/alibaba/flutter-go

  5. 序列化和反序列化
    https://flutterchina.club/json/

  6. 绘制阴影
    https://juejin.im/entry/5c94c7eee51d45341541969d
    https://juejin.im/post/5bdc11be518825171140d46d
    https://blog.csdn.net/chwei_cson/article/details/100170083
    https://juejin.im/post/5c75f7286fb9a049a57190fd

  7. 自定义图形,并且增加点击事件
    https://blog.csdn.net/weixin_34038652/article/details/87972745
    https://medium.com/flutteropen/canvas-tutorial-05-how-to-use-the-gesture-with-the-custom-painter-in-the-flutter-3fc4c2deca06
    贝塞尔曲线
    https://www.coder.work/article/276705
    Path圣经
    https://medium.com/flutter-community/paths-in-flutter-a-visual-guide-6c906464dcd0

  8. 矩阵变换
    https://www.jianshu.com/p/3873df47cae7

  9. 自定义按钮上打洞
    http://www.imooc.com/article/301633

  10. 切割图片
    https://www.jianshu.com/p/4c80ab77fc21

  11. 界面开发必读
    https://www.jianshu.com/p/fe604938df0a

  12. 动画制作
    https://www.jianshu.com/p/d5643ff3cf5f

  13. flutter状态管理
    https://www.jianshu.com/p/767036bd9ecc

  14. UI分析
    https://www.ui.cn/detail/495229.html

  15. Dart 中的Path路径分析

  16. MediaQuery.of(context).padding.bottom 神坑,软键盘与这个的关系呀!

  17. TabController 与 DefaultTabController 需要更换

  18. DIO封装
    https://blog.csdn.net/yechaoa/article/details/90234708

0

评论区