【个人笔记】Flutter很好用,but……

本文作者记录了在使用Flutter开发过程中遇到的问题,包括异步测绘大量文字、iOS后台音频播放、NestedScrollView滑动异常、Hero动画问题、ListView index跳转、ClampingScrollSimulation异常以及TextField的hintText垂直居中问题。对于每个问题,作者提供了详细的解决方案和参考资料,例如使用flutter_isolate库处理异步测绘,以及使用extended_nested_scroll_view解决NestedScrollView问题。
摘要由CSDN通过智能技术生成

前言

为什么有这篇文章?

这篇文章可以说是个人Flutter问题随笔吧,虽然Flutter可以方便的做到跨平台,但是毕竟是新项目,功能没那么全面也是意料之中,所以在此记录跟踪一下目前在使用Flutter过程中遇到的问题,目前的解决方案,并跟踪记录一下。

问题列表(持续更新):

  1. Flutter 中不支持异步测绘大量文字
  2. ~Flutter IOS 后台音频播放~(已经有了第三方)。
  3. Flutter 中 NestedScrollView 中存在折叠头、子列表等情况下的滑动等异常
  4. ~Hero 跳转之后的图片如果在折叠布局中被折叠隐藏了,那么Hero的退出动画无法正常播放,并且原图片无法显示~(flutter的master分支已修复,stable版本hotfix已发布)
  5. listView 不支持按index跳转
  6. Simulation的value会返回Infinite
  7. hintText不能垂直居中?

正文

1. Flutter 中不支持异步测绘大量文字

这个源自于个人练手APP,在开发阅读模块过程中遇到了这么一个问题:

如果想要自定义文字间距,段落间距等,那么自然就要使用textPainter自己绘制文字。但是由此引发出一个问题:如果有上万个文字,那么测绘时间会很长。自然会阻塞主进程。

解决这个问题,第一个想法自然就是使用异步处理,那么flutter 中的异步方案有哪些呢?

  1. Future(包括await async那些东西)
  2. isoloate

按照官方文档,大量计算东西应该放到Isolate中,所以,自然而然地,我们将textPinter测绘方法放到Isolate中执行,但是呢,执行报错:native function not found

原因就是UI包的类只允许在Flutter的UI Isolate中执行。

_此题无解,完结撒花,各回各家,各找各妈_(才怪)

解决方案一:Plugin

这个方法的思路来自于官方开发人员的回答:

right now you would have to write your own line-breaking logic - perhaps as a plugin. We don’t currently have any API for doing text layout in a separate isolate. @GaryQian might have some other idea about this too.

所以说,我们看下官方的Plugin是怎么实现的。

在 Plugin工程中,有这么一个: android_alarm_manager ,这个Plugin中的AlarmService.java文件中,有这么一个方法:startBackgroundIsolate(要素察觉+1)

通过阅读源码,我们得知,其实说白了就是新建一个FlutterNativeView ,这个FlutterNativeView 不负责渲染界面,只负责当后台线程来用。同样的道理,我们也可以用同样的方法来处理我们的需要运行在UI Isolate的异步任务。(至于为什么新建一个FlutterNativeView ,就能实现这个需求,粗略的说下是因为,每次新建FlutterNativeView,其实都会新建一些TaskRunner,其中就包含UI 的TaskRunner,总之有兴趣的可以搜下Flutter中的TaskRunner机制了解下)

不过,其实不用自己实现注册,有这么一个第三方:flutter_isolate可以做到这点,用法跟普通的isolate差不多&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值