Flutter项目优化

本文针对Flutter项目优化,主要从代码优化、包大小、流畅性优化以及内存优化四个方面展开介绍。

代码优化

代码优化方面主要包括封装方法以及工具类两方面来对代码进行优化。

使用封装的好处一方面是为了代码简洁可读,另一方面也是为了以后的项目维护。

例如大部分应用都会应用到底部菜单导航栏,为了复用每一个菜单的构建逻辑,可以抽离出一个通用方法,来构建统一的菜单项。

 _bottomItem(String title, IconData icon, int index) {
    return BottomNavigationBarItem(
        icon: Icon(
          icon,
          color: _defaultColor,
        ),
        activeIcon: Icon(
          icon,
          color: _activeColor,
        ),
        label: title);
  }

// 使用封装的方法构建底部菜单项
bottomNavigationBar: BottomNavigationBar(
        currentIndex: _currentIndex,
        onTap: (index) {
          _controller.jumpToPage(index)
          setState(() {
            _currentIndex = index;
          });
        },
        // 禁用滚动
        type: BottomNavigationBarType.fixed,
        items: [
          _bottomItem('首页', Icons.home, 0),
          _bottomItem('搜索', Icons.search, 1),
          _bottomItem('旅拍', Icons.camera_alt, 2),
          _bottomItem('我的', Icons.account_circle, 3),
        ],
      )

又比如项目中用到的页面跳转,这时候可以将页面跳转通用逻辑封装到一个工具类中,方便在用到的地方直接调用即可。

navigator_util.dart

class NavigatorUtil {
  /// 跳转到指定页面
  static push(BuildContext context, Widget page) {
    Navigator.push(context, MaterialPageRoute(builder: (context) => page));
  }
}

然后替换所有用到页面跳转的地方为封装好的工具类方法。

 _wrapGesture(BuildContext context, Widget widget, CommonModel model) {
    return GestureDetector(
      onTap: () {
        // 跳转H5详情页
        NavigatorUtil.push(context,WebView(
            url: model.url,
            statusBarColor: model.statusBarColor,
            title: model.title,
            hideAppBar: model.hideAppBar));
      },
      child: widget,
    );
  }
包大小

包大小优化一方面可以对本地图片进行压缩,另一方面可以根据Flutter架构特性在打包时只打包出支持的架构so库。

针对图片优化,可以在图片压缩网站https://tinypng.com/对本地用到的所有图片进行压缩,这个网站对图片的压缩效果还是很客观的,而且图像清晰度也不会损失太多。

因为flutter没有armeabi架构的so,所以在打包时可以只配置打包出armeabi-v7a架构的apk版本。

app/build.gradle

 defaultConfig {
        applicationId "com.cnw.flutter_trip"
        minSdkVersion 16
        targetSdkVersion 30
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName

        // 解决app和module工程同时引入flutter依赖的冲突
        ndk {
            abiFilters "armeabi-v7a" //release 时只打"armeabi-v7包
        }
    }
流畅性优化

流畅度优化可以考虑在“按需创建页面”、“按需添加AutomaticKeepAliveClientMixin”以及“将耗时操作计算放在独立的Isolate”几个方面做优化。

按需创建页面方面,比如Flutter内置的TabBarView、PageView 不会一次性构建所有页面,只在切换到当前页面是才会构建页面。

在按需使用AutomaticKeepAliveClientMixin方面,例如在多Tab标签页面添加此配置可以保存当前页面状态,不必重复渲染页面,但针对Tab页面较多的时候,此配置会导致Flutter内存吃紧,所以要酌情使用,在必要时清除不可用资源。

针对耗时操作计算放在独立的Isolate,找了几篇相关文章,由浅入深的介绍Isolate在Flutter应用流畅性优化的具体实践。

https://www.jianshu.com/p/a9a54b101870
https://zhuanlan.zhihu.com/p/355315785
https://juejin.cn/post/6844904148303872013

内存优化

内存优化可以从“图片优化”、“列表优化”以及“防止内存泄漏”几个方面入手。

针对图片优化,可以考虑在后台CDN支持灵活配置大小和分辨率的图片以适配Flutter端合理的图片大小,防止内存浪费。

在列表优化方面,一方面可以利用分页加载,另一方面要多使用列表相关的builder构建方式来构建长列表。

在防止内存泄漏方面,要多注意在使用到监听、动画以及控制器的页面,在页面销毁时,及时在dispose方法释放资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值