经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » Flutter » 查看文章
Flutter调试debug或者打包release帧率只有60的原因 - sw-code
来源:cnblogs  作者:sw-code  时间:2024/8/26 9:17:46  对本文有异议

问题描述

最近发现Flutter中引入像素较大的静态图片或者字体导致调试或者打包之后在高刷手机上帧率只有60的问题。

  • 测试设备为小米13,可在开发者选项中直接打开帧率显示,

  • 也可使用statsfl插件显示帧率

    1. StatsFl(
    2. maxFps: 120, // Support custom FPS target (default is 60)
    3. align: Alignment.bottomCenter, //Alignment of statsbox
    4. child: MyApp(),
    5. ),

解决方案

大图片问题

可以适当缩小图片分辨率以及压缩图片。

1、PS中先将图片转换为智能对象,然后调整图像大小(按像素),之后保存图片。这样做可以最大限度保留清晰度。

2、图片压缩网站推荐

字体问题

不能通过静态字体方式,可以将网络字体下载到本地,然后动态加载。

1、字体初始化工具类

  1. import 'dart:io';
  2. import 'package:flutter/services.dart';
  3. import 'package:muen_edu_app/network/dio/dio_instance.dart';
  4. import 'package:muen_edu_app/utils/file_utils.dart';
  5. class FontUtils {
  6. static FontUtils? _instan;
  7. final Map<String, String> fontFamilies = {
  8. "JiangCheng": "https://xxx.ttf",
  9. "SegoeUI": "https://xxx.ttf",
  10. };
  11. final String fontFloder = "fonts";
  12. FontUtils._();
  13. static FontUtils get instan => _instan ??= FontUtils._();
  14. Future initiaFont() async {
  15. String jiangCheng =
  16. await FileUtils.ins.getLocalDocumentFile(fontFloder, "JiangCheng.ttf");
  17. String segoeUI =
  18. await FileUtils.ins.getLocalDocumentFile(fontFloder, "SegoeUI.ttf");
  19. await loadFont(File(jiangCheng), "JiangCheng");
  20. await loadFont(File(segoeUI), "SegoeUI");
  21. }
  22. /// 加载字体
  23. Future loadFont(File fontFile, String fontFamily) async {
  24. if (!fontFile.existsSync()) {
  25. // 没有字体,去下载
  26. await downloadFont(fontFamilies[fontFamily]!, fontFamily);
  27. }
  28. Future<ByteData> readFont() async {
  29. ByteData byteData = (await fontFile.readAsBytes()).buffer.asByteData();
  30. return byteData;
  31. }
  32. FontLoader loader = FontLoader(fontFamily);
  33. loader.addFont(readFont());
  34. await loader.load();
  35. }
  36. Future<String> downloadFont(String url, String fontFamily) async {
  37. String savePath =
  38. await FileUtils.ins.getLocalDocumentFile(fontFloder, '$fontFamily.ttf');
  39. await DioInstance.instan.download(url, savePath);
  40. return savePath;
  41. }
  42. }

2、文件工具类

  1. import 'dart:io';
  2. import 'package:muen_edu_app/network/dio/dio_instance.dart';
  3. import 'package:path_provider/path_provider.dart';
  4. class FileUtils {
  5. static FileUtils? _ins;
  6. FileUtils._();
  7. static FileUtils get ins {
  8. return _ins ??= FileUtils._();
  9. }
  10. /// 获取文档目录文件
  11. Future<String> getLocalDocumentFile(String folder, String filename) async {
  12. final dir = await getApplicationDocumentsDirectory();
  13. return '${dir.path}/$folder/$filename';
  14. }
  15. /// 获取临时目录文件
  16. Future<String> getLocalTemporaryFile(String folder, String filename) async {
  17. final dir = await getTemporaryDirectory();
  18. return '${dir.path}/$folder/$filename';
  19. }
  20. /// 获取应用程序目录文件
  21. Future<String> getLocalSupportFile(String folder, String filename) async {
  22. final dir = await getApplicationSupportDirectory();
  23. return '${dir.path}/$folder/$filename';
  24. }
  25. }

3、dio下载

  1. Future<Response> download(
  2. String url,
  3. String savePath, {
  4. CancelToken? cancelToken,
  5. Options? options,
  6. void Function(int, int)? onReceiveProgress,
  7. }) async {
  8. return await _dio.download(
  9. url,
  10. savePath,
  11. onReceiveProgress: onReceiveProgress,
  12. options: options ??
  13. Options(
  14. method: HttpMethods.get,
  15. responseType: ResponseType.bytes,
  16. receiveTimeout: _defaultTime,
  17. sendTimeout: _defaultTime,
  18. ),
  19. );
  20. }

4、调用初始化方法

  1. FontUtils.instan.initiaFont();

5、设置全局默认字体

  1. ThemeData(fontFamily: 'JiangCheng');

原文链接:https://www.cnblogs.com/sw-code/p/18378844

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号