-
flutter的Uri.encodeFull是仅仅处理非法字符的,:,//,/等字符是不会被编码的。而Uri.encodeComponent,是所有特殊字符全部处理掉的。
-
flutter的Uri.decodeFull如果参数并未被Uri.encodeXXX过,那么会报错。但是flutter的特性会跳过本函数,继续执行。没有发现报错的地方。应该用try catch包围起来。
-
flutter的依赖特别多,子组件中有可能也会依赖其他组件,所以查看所有依赖,以及某一项依赖是从哪里来的,可以使用 flutter pub deps
以上 2021.12.03
-
flutter中的StateFulWidget,如果涉及到数据更新的,必须实现didUpdateWidget方法,并且通过数据比较,判定是否需要更新。否则即便是数据发生了变化,这个组件外部的组件调用了setState方法,因为这个组件本身并不能判定自己是否需要更新,所以它不会自动调用setState方法,界面也不会刷新。
-
建议:flutter是单线程应用,异步处理使用async==>then模型,这样会导致代码看起来耦合在一起,包括build方法,会将事件和UI绘制融合到一起,建议把所有的事件制作成单独的函数,build方法里边,只需要制作UI相关的代码,看起来会舒服很多。
-
showCupertinoModalPopup会从底部弹起一个组件,showDialog会在屏幕中央弹起一个组件,但是都无法完全全屏。除了使用Navigator.push方法之外,还可以使用showGeneralDialog来实现一个全屏的对话框。
以上 2022.01.27
- Flutter使用Widget在单个Activity(View)中进行页面切换,使用Navigator进行页面栈的操作。判断某个Widget是否在最上层,可以使用TickerMode.of(context)来判定context所在的Widget是否是用户可见。
- Flutter的Container有一个forgroundDecoration,可以用来制作彩色文本,渐变文本,甚至图像颜色处理变换。Decoration有一个blendMode,就是图像叠加的模式。
比如上面的红框内的文本,就是使用这个技术实现的。 - 使用RawKeyboardListener监听按键处理(一般在TV上需要使用遥控器控制界面),如果放到Scaffold里边,按键顺序会非常诡异。一般而言需要把RawKeyboardListener设置为最外层组件。此时AppBar中的back按钮,actions等按钮,都可以按照顺序获取焦点了。
以上 2022.02.18
- 获取一张图片的宽高的方法:
这种方法需要使用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 学习 知识汇总
-
页面跳转
https://flutter.cn/docs/cookbook/navigation/navigation-basics -
flutter-Go框架设计
https://github.com/alibaba/flutter-go -
序列化和反序列化
https://flutterchina.club/json/ -
绘制阴影
https://juejin.im/entry/5c94c7eee51d45341541969d
https://juejin.im/post/5bdc11be518825171140d46d
https://blog.csdn.net/chwei_cson/article/details/100170083
https://juejin.im/post/5c75f7286fb9a049a57190fd -
自定义图形,并且增加点击事件
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 -
自定义按钮上打洞
http://www.imooc.com/article/301633 -
flutter状态管理
https://www.jianshu.com/p/767036bd9ecc -
Dart 中的Path路径分析
-
MediaQuery.of(context).padding.bottom 神坑,软键盘与这个的关系呀!
-
TabController 与 DefaultTabController 需要更换
-
DIO封装
https://blog.csdn.net/yechaoa/article/details/90234708
评论区