出于性能考虑,ListView.separated每次进入都会加载,因此api要求必须要设置大小,解决方法是(注意情况:不要在build内部运算或刷新,因为listview 每次进入都会刷新,这样会大幅度占用内存)
Expanded(
child:{})
provider状态无改变的时候
Consumer(builder: (
BuildContext context,
RemindModel value,
Widget? child,
) {})
Row的平分布局
用 Expanded 包裹 row 里的每个组件:
Row(
children: [
Expanded(child: Text()),
Expanded(child: Text()),
Expanded(child: Text()),
],
)
pub get 后本地的代码没有更新,重新get也不会改变
pub get 后没有更新
1. 本地的 pubspec.lock 锁定了版本,删除掉, 重新 pub get
2. 指定 ref 版本
进入app,就设置整个app为竖屏显示
void main() {
WidgetsFlutterBinding.ensureInitialized(); //不加这个强制横/竖屏会报错
SystemChrome.setPreferredOrientations([
// 强制竖屏
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown
]);
runApp(const DemoApp());
}
WidgetsFlutterBinding.ensureInitialized();这行代码一定要写,要不然就报错,而且设置也无效
当进入某个页面时控制横竖屏显示
强制竖屏,代码如下:
// 强制竖屏
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown
]);
强制横屏,代码如下:
// 强制横屏
SystemChrome.setPreferredOrientations([
DeviceOrientation.landscapeLeft,
DeviceOrientation.landscapeRight
]);
退出这个页面时,恢复竖屏显示,代码如下:
@override
void dispose() {
// 强制竖屏
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown
]);
super.dispose();
}
list转string
String? result;
<String>["a","b","c"].forEach((e) {
if (result == null) {
result = e.name;
} else {
result = "${e.name},${result}";
};
});
自适应高度控件
IntrinsicHeight();