-
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.
评论区