Linux Desktop
如何在flutter中免密码的启动需要root权限的service
keyboard issues in desktop
flutter setup in linux
sudo apt install curl file git unzip xz-utils zip libglu1-mesa clang cmake \
ninja-build pkg-config libgtk-3-dev
Dart
List
setRange
List<card?> _cards = [null, null, null, null, null] ..setRange(0, cards.length, cards);
final l1 = <int>[1, 2, 3, 4, 5];
final l2 = <int>[8, 9, 7, 6];
const int skipCount = 2;
l1.setRange(1, 3, l2, skipCount);
print(l1); // [1, 7, 6, 4, 5]
Basic
cmd
flutter create -t plugin –platform=linux,macos,windows xxxx
layout
flutter中组件树向下传递约束,向上传递size。其中约束分为loose(松约束),tight(紧约束)两种,loose约束时,子组件可以根据自身size设定,调整大小。
Container(
child: xx
)
Container(
constrains: BoxConstrains(
minWidth: 20,
minheight: 40,
)
child: xx
)
比如Container组件默认传递的是loose约束,而添加constrains属性后,可以将container变成传递tight约束。
- flex组件(e.g. Row, Column)在布局children时,区分组件是否有弹性,比如ListView是没有弹性的,那么在Row中添加ListView组件时必须使用Expanded或者flex组件进行warp。 布局时,flutter先计算没有弹性组件占据的size,然后将剩余的空间分配给所有弹性组件。
- stack组件在布局children时,区分组件是否是有位置的,比如positoned组件就是有位置的。布局时,flutter先计算没有位置组件的最大size, 然后设为自己的size,但是如果都是具有position的组件,那么flutter就尽可能大的分配自己的size。
-
stack中的stackFit属性[loose, expand, passthrough], 其中expand属性表示子组件尽可能的填充父组件的约束,passthrough表示传递父级约束, 而默认loose属性表示子组件可以根据自身size设定大小。
- 使用 FractionallySizedBox 根据和parent的比例去设定大小
Container(
width: 400,
height: 400,
child:
FracitonallySizedBox(
widthFactor: 0.5, => 400*0.5 = 200
heightFactor: 0.5, => 400*0.5 = 200
)
)
Gloabal key
- get element properties by
_key.currentContext
final renderBox = _globalKey.currentContext.findRenderObject() as RenderBox;
print(renderBox.size());
print(renderBox.localToGlobal(Offset.zero));
provider vs ChangeNotifier
provider是为了实现child widget可以直接修改parent中定义的共享数据,并且即使修改了,child widget自身也不会被rebuild,除非这个共享的数据是继承ChangeNotifier的。
所以,provide主要是为了实现自下而上的修改数据,而ChangeNotifier是为了自上而下的传递已经变化了的数据。
windows平台踩坑记录
编译官方推荐项目flutter-folio
- 由于flutter doctor提示需要vs 2019以上版本,下载了2022安装在了D盘,不在默认的C盘,需要设置环境变量:
GYP_MSVS_OVERRIDE_PATH=D:\Program Files\Microsoft Visual Studio\2022\Community
GYP_MSVS_VERSION=2022
- 删除
C:\Users\13581\AppData\Local\Pub
文件夹后导致很大dart依赖文件找不到,从回收站恢复。 - 出现
'Size' is imported from both 'dart:ffi' and 'dart:ui'
错误,执行dart fix --apply
和flutter pub upgrade
后解决。