首页 > 编程语言 >让Flutter 应用程序性能提高 10 倍的 10 个技巧

让Flutter 应用程序性能提高 10 倍的 10 个技巧

时间:2023-06-05 19:03:12浏览次数:41  
标签:10 return 性能 部件 应用程序 child override Flutter

让Flutter 应用程序性能提高 10 倍的 10 个技巧_应用程序

Flutter 应用程序以其精美的设计和流畅的功能而闻名,但性能问题会很快破坏用户体验。借助这 10 个优化性能的专家技巧,将您的应用提升到一个新的水平。


使用 WidgetsBindingObserver 跟踪应用程序的生命周期

使用“WidgetsBindingObserver”来跟踪您的应用程序的生命周期。此观察器允许您在应用程序恢复、暂停或不活动时接收回调,这可以帮助您识别性能瓶颈并优化应用程序的行为。

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> with WidgetsBindingObserver {
  @override
  void initState() {
    WidgetsBinding.instance.addObserver(this);
    super.initState();
  }
  @override
  void dispose() {
    WidgetsBinding.instance.removeObserver(this);
    super.dispose();
  }
  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    // Handle state changes here
  }
  //...
}

复制


使用 RepaintBoundary 小部件隔离应用程序的各个部分

使用“RepaintBoundary”小部件来隔离导致性能问题的应用程序部分。“RepaintBoundary”小部件可用于包装导致性能问题的小部件,以便应用程序的其余部分可以继续平稳运行。

RepaintBoundary(
  child: MyExpensiveWidget(),
);

复制


使用 InheritedWidget 获取数据

将“InheritedWidget”用于向下传递到小部件树的数据。“InheritedWidget”是一种特殊的小部件,可用于将数据向下传递到小部件树中,这有助于减少重建次数并提高性能。

class MyInheritedWidget extends InheritedWidget {
  final int myData;

  MyInheritedWidget({
    Key key,
    @required this.myData,
    @required Widget child,
  }) : super(key: key, child: child);

  @override
  bool updateShouldNotify(MyInheritedWidget old) => myData != old.myData;

  static MyInheritedWidget of(BuildContext context) {
    return context.dependOnInheritedWidgetOfExactType<MyInheritedWidget>();
  }
}

复制


使用 StreamBuilder 而不是 FutureBuilder

尽可能使用“StreamBuilder”而不是“FutureBuilder”。“StreamBuilder”允许您在更新发生时接收更新,这有助于减少重建次数并提高性能。

StreamBuilder(
  stream: myStream,
  builder: (BuildContext context, AsyncSnapshot snapshot) {
    if (snapshot.hasData) {
      return Text(snapshot.data);
    } else if (snapshot.hasError) {
      return Text(snapshot.error);
    }
    return CircularProgressIndicator();
  },
);

复制


使用 CustomScrollView 而不是 ListView

尽可能使用“CustomScrollView”而不是“ListView”。“CustomScrollView”比“ListView”更高效,因为它只构建当前在屏幕上可见的小部件。

CustomScrollView(
  slivers: <Widget>[
    SliverList(
      delegate: SliverChildBuilderDelegate(
        (BuildContext context, int index) {
          return MyListItem(data: myData[index]);
        },
        childCount: myData.length,
      ),
    ),
  ],
);

复制


使用 AnimationController 来控制动画

使用“AnimationController”来控制动画。“AnimationController”允许您控制动画的时间和进度,这有助于减少重建次数并提高性能。

class MyAnimationWidget extends StatefulWidget {
  @override
  _MyAnimationWidgetState createState() => _MyAnimationWidgetState();
}

class _MyAnimationWidgetState extends State<MyAnimationWidget>
    with SingleTickerProvider{
    AnimationController _controller;

    @override
    void initState() {
    _controller = AnimationController(vsync: this, duration: Duration(seconds: 2));
    super.initState();
    }

    @override
    void dispose() {
    _controller.dispose();
    super.dispose();
    }

    @override
    Widget build(BuildContext context) {
        return AnimatedBuilder(
        animation: _controller,
        builder: (context, child) {
        // Use _controller.value to control the animation
        return Transform.translate(
        offset: Offset(0, _controller.value * 100),
        child: child,
        );
        },
        child: MyChildWidget(),
        );
    }
}

复制


使用 Wrap 小部件而不是 ListView 小部件

尽可能使用“Wrap”小部件而不是“ListView”小部件。“Wrap”小部件比“ListView”更高效,因为它只构建当前在屏幕上可见的小部件。

Wrap(
  children: myChildren.map((child) => MyChildWidget(child)).toList(),
);

复制


使用 CustomPainter 小部件绘制复杂图形

使用“CustomPainter”小部件绘制复杂的图形。“CustomPainter”小部件允许您直接在画布上绘制,这比构建大量嵌套的画布要高效得多

class MyCustomPainter extends CustomPainter {
  @override
  void paint(Canvas canvas, Size size) {
    // Draw complex graphics on the canvas
  }

  @override
  bool shouldRepaint(CustomPainter oldDelegate) {
    return false;
  }
}

复制


使用 PerformanceOverlay 小部件查看应用程序性能的实时可视化。

使用“PerformanceOverlay”小部件查看应用程序性能的实时可视化。此小部件可以帮助您识别应用程序中可能导致性能问题的区域,并为您提供有关如何优化它们的想法。

PerformanceOverlay(
  enabled: true,
  overlayRect: Rect.fromLTWH(0, 0, 200, 200),
  children: [
    // Your widgets
  ],
);

复制


使用 Dart 内置的 Profile 和 Release 模式来测试性能

使用 Dart 内置的“Profile”和“Release”模式来测试性能。配置文件模式为您提供详细的性能信息,发布模式优化应用程序的性能和速度,这将帮助您识别和修复性能问题。

flutter run --profile

或者

flutter run --release

请注意,这些只是代码的示例。

让Flutter 应用程序性能提高 10 倍的 10 个技巧_应用程序_02

标签:10,return,性能,部件,应用程序,child,override,Flutter
From: https://blog.51cto.com/u_15739596/6418295

相关文章

  • 6.10 对象数组
    demo1对象数组,静态初始化classPerson{privateStringname;privateintage;publicPerson(Stringname,intage){this.name=name;this.age=age;}publicStringgetInfo(){return"姓名:"+this.name+"......
  • CATIA-CATIA V5-6R2017 WIN10 64位版本安装+许可证的安装配置(CATIA启动时必须要调用许
    CATIAV5-6R2017WIN1064位安装步骤:1.先使用“百度网盘客户端”下载CATIAV5-6R2017软件安装包到电脑磁盘英文路径文件夹下,并解压缩,安装前先断开电脑网络,然后双击打开CATIAV5R2017文件夹,找到setup.exe,鼠标右击选择【以管理员身份运行】2.正在准备安装中,稍等片刻自动进入安......
  • Asp.NetCore Web应用程序中的请求管道和中间件
     你是否会迷惑当我们请求一个ASP.NetWeb应用程序以后,它是怎么处理这些请求的,后台是怎么工作的,今天就讲一下Asp.NetCoreWeb应用程序中的请求处理过程。    上一节,我们讲到,Startup文件中用来配置中间件(middleware),这个中间件就是用来处理请求的。那标题中的请求管道又是什么呢,......
  • CS13 BOM展开报错 Error 'MM 104' (Material has no base unit of measure)物料无
    目的介绍如何解决SAP报错信息MM104在使用事务码CS13进行BOM展开时.现象错误信息'Materialhasnobaseunitofmeasure'(错误消息号:MM104)在使用CS13订单展开时会报以下错误、可以的原因如下某个BOM组件有特殊采购类型(specialprocurementtype)70'Reservationfro......
  • 104. 二叉树的最大深度
    104.二叉树的最大深度题目算法设计:回溯算法设计:分解子问题 题目传送门:https://leetcode.cn/problems/maximum-depth-of-binary-tree/ 算法设计:回溯回溯框架,请猛击:《常见递归模式》。思路:遍历一遍二叉树,用一个外部变量记录每个节点所在的深度,取最大值就可以得到最大深度,这就是......
  • Java应用程序和小程序的区别是什么?
    最近正在B站上看动力节点老杜的视频自学Java,整理了这篇文章Java应用程序和小程序的区别,也是新手入门需要了解的,方便大家后续的学习 应用程序是一个独立的Java程序,在客户端或服务器端的虚拟机支持下运行。Java应用程序旨在执行特定功能,以在任何与Java兼容的虚拟机上运行,而不管计......
  • BL102采集DL/T645-2007规约电表说明
    本文主要讲述了钡铼技术BL102物联网网关如何通过RS485采集DL/T645规约电表BL102是一款采集西门子、三菱、欧姆龙、台达、AB、施耐德等各种PLC数据转换为ModbusTCP、OPCUA、MQTT、ThingsBoard等协议的工业物联网网关。BL102下行支持:西门子、三菱、欧姆龙、台达、AB、施耐德等各种P......
  • ChatGPT + Flutter快速开发多端聊天机器人App
    ChatGPT+Flutter快速开发多端聊天机器人Appdownload:3wzxit666comChatGPT+Flutter快速开发:打造高效智能的移动应用ChatGPT是一个基于自然语言处理的聊天机器人平台,Flutter则是一个快速、美观、高效的跨平台移动应用开发框架。通过将这两个工具结合起来,可以快速打造出一款高效......
  • 002_创建应用程序
     /*一:应用程序:1创建程序2注册程序,3定义模型,4注册模型5数据库迁移6创建admin*/ 一:应用程序:1创建程序1:输入命令: pythonmanage.pystartapplearning_logs'''pythonmanage.pystartapplearning_logs在Dj......
  • 10、Keepalived实现双业务双主架构
    实现Master/Master的Keepalived双主架构master/slave的单主架构,同一时间只有一个Keepalived对外提供服务,此主机繁忙,而另一台主机却很空闲,利用率低下,可以使用master/master的双主架构,解决此问题.Master/Master的双主架构:即将两个或以上VIP分别运行在不同的keepalived服......