1、尽量避免在 build() 中执行耗时操作,因为build()
会被频繁地调用
2、尽可能地使用 const
构造器,子组件也不会重新进行 rebuild
操作
3、尽量避免使用 ListView
和GridView
的默认构造方法,使用builder
方法创建,尽可能的指定itemExtent
或prototypeItem
4、在Image
加载图片的时候尽量指定 cacheWidth
和 cacheHeight
的展示大小
5、如果ListView的item中有图片,需要设置addRepaintBoundaries
和addAutomaticKeepAlives
为false
,这样就可以在item滑出屏幕外的时候销毁掉,防止内存溢出
6、如果一个页面中某一个组件一直频繁构建可以用RepaintBoundary
来包裹隔离,这样不会整个页面组件都重新构建,但是在页面中尽量少用这个组件,构建它也很消耗性能
7、在低性能手机里可以降级CustomScrollView
和ListView
的预渲染区域
//默认上下250,120可以改成item的高度大小
cacheExtent: 120,
8、透明度不用Opacity
可用Color
代替 、剪裁不用Clip
可用组件的borderRadius
属性代替、淡入淡出,请考虑使用 FadeInImage
9、尽量用SizedBox
而不是Container
,占位组件使用SizedBox.Shrink()
10、在dio
请求中,处理json
数据可用compute
方法放在多线程中进行
11、抽离Widget组件的时候不要用函数返回
Widget _buildFooterWidget() {
return Padding(
padding: const EdgeInsets.all(8.0),
child: Text('This is the footer '),
);
}
-------改成-------
class FooterWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(8.0),
child: Text('This is the footer '),
);
}
}
12、如果只是判断某个条件成立才加载组件可以用if (text != null) Text(text)