闽公网安备 35020302035485号
// 避免不必要的重建
class MyWidget extends StatelessWidget {
final String text;
MyWidget(this.text);
@override
Widget build(BuildContext context) {
return Text(text);
}
}
问题:使用 StatefulWidget 时,可能会触发不必要的状态更新和重建。Future<void> computeExpensiveTask() async {
final result = await compute(expensiveFunction, arguments);
// 更新 UI
}
int expensiveFunction(List<int> arguments) {
// 执行计算密集型任务
}
问题:在 UI 线程执行计算密集型任务会导致应用卡顿。优化效果:保持了 UI 的流畅性,提高了应用响应速度。
class MyStatefulWidget extends StatefulWidget {
@override
_MyStatefulWidgetState createState() => _MyStatefulWidgetState();
}
class _MyStatefulWidgetState extends State<MyStatefulWidget> {
int _counter = 0;
void _incrementCounter() {
setState(() {
_counter++;
});
}
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('You have pushed the button this many times: $_counter'),
RaisedButton(
onPressed: _incrementCounter,
child: Text('Increment'),
),
],
);
}
}
问题:在 setState 中频繁更新状态可能导致性能下降。# 在 pubspec.yaml 中配置图像压缩
flutter:
assets:
- images/my_image.png
- images/my_other_image.webp
问题:未压缩的图像资源可能导致 APK 大小增加。优化效果:减少了 APK 大小,加快了应用安装速度。
// 使用 Dart 的扩展方法
extension StringExt on String {
String capitalize() => this[0].toUpperCase() + this.substring(1);
}
// 堆代码 duidaima.com
// 使用 Dart 的不可变对象
final List<int> immutableList = List.unmodifiable([1, 2, 3]);
问题:代码冗余或不合理的数据结构可能导致性能下降。优化效果:代码更简洁,性能有所提升。
// 在代码中添加性能分析标记
void _someFunction() {
FlutterError.onError = (FlutterErrorDetails details) {
// 处理错误
};
// 执行性能敏感的代码
}
问题:难以识别性能瓶颈。优化效果:能够精准定位并优化性能瓶颈,提高应用的整体性能。
# 在 pubspec.yaml 中配置代码分割 flutter: split-per-abi: true问题:APK 文件过大可能导致用户下载和安装时间较长。
优化效果:减少了 APK 的大小,加快了用户的下载和安装速度。
当然了,总是会有一些大佬开源出一些优秀的插件,官方也会放出相关插件,来帮助我们提高自己的 Flutter应用程序,下面是我搜集的一些比较优秀的插件,大家可以参考一下,当然你们若是有更好的插件,也可以分享在评论区。
Freddy 是一个性能分析工具,它可以生成性能报告并提供优化建议,帮助开发者提高 Flutter 应用的性能。