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

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

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

目 录CONTENT

文章目录

flutter 开发填坑(经验)记

钱学超
2021-12-03 / 0 评论 / 0 点赞 / 1,097 阅读 / 1,134 字 / 正在检测是否收录...
  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.

0

评论区