使用 dart extension

如何使用

dart extension 的使用场景是无法修改原类的时候,通过扩展的方式来增加原类的方法,也可以增加 getter,setters,and operators。

比如

如果 String 有 pareseInt 方法,我们可以这样写

为了达到这个目标,需要写一个 Extension

然后就可以使用了。

处理冲突

注意到前面加的 NumberParsing 了吗?这个是为 extension 起的名字。起名字的作用是有冲突的时候可以方便的控制显隐。比如 NumberParsing2 也定义了 parseInt 方法与 NumberParsing 的 parseInt 冲突,如果只想要 NumberParsing 的 parseInt,只需要把 NumberParsing2 隐藏就好了。

或者可以 给 NumberParsing2 经起个别名

泛型 extension

可以只给 int 类型的 list 加 sum 方法,其它类型的 list 不能使用 sum。

要注意的问题

dart extension 不可以用于 dynamic 类型

dart extension 权限很大,这也意味着,很可能被过度使用。所以在使用的时候一定要再三权衡,一定要可读性,可维护性优先。

上面的代码是比较简单的,但是如果类型比较复杂,不明确指定类型,类似如下的形式,也是可能会报错的:

参考链接


Google I/O 2023 - Flutter 3.10 发布,快来看看有什么更新吧

虽然本次 I/O 的核心 keynote 主要是 AI ,但是按照惯例依然发布了新的 Flutter 稳定版,不过并非大家猜测的 4.0,而是 3.10 ,Flutter 的版本号依然那么的出人意料。

Flutter 3.10 主要包括有对 Web、mobile、graphics、安全性等方面的相关改进,核心其实就是:

  • iOS 默认使用了 Impeller
  • 一堆新的 Material 3 控件袭来
  • iOS 性能优化,Android 顺带可有可无的更新
  • Web 可以无 iframe 嵌套到其他应用

继续阅读Google I/O 2023 - Flutter 3.10 发布,快来看看有什么更新吧

Unable to find a target named `RunnerTests` in project `Runner.xcodeproj`, did find `Runner`

Flutter 2.x 升级到 3.10.1 版本之后,原来正常编译的项目,iOS环境下(Xcode Version 13.2.1 (13C100)),编译报错:

继续阅读Unable to find a target named `RunnerTests` in project `Runner.xcodeproj`, did find `Runner`

iOS开发:报错The sandbox is not in sync with the Podfile.lock …的解决方法

问题

具体在Xcode中的报错提示如下所示:

继续阅读iOS开发:报错The sandbox is not in sync with the Podfile.lock …的解决方法

MMKV编译报错Invalid `Podfile` file: undefined method `exists?' for File:Class.

尝试在 Flutter 上使用 MMKV1.2.16)的时候,编译报错,如下:

这个问题是由于 cocoapods 升级到 1.12 版本之后,依赖的 ruby 升级到 3.2 版本,其中的 File.exists 函数被替换成 File.exist,导致编译异常。

刚刚开始以为是 Flutter 的原因,结果发现 Flutter 3.7.7版本已经修复这个问题。

尝试了半天,才发现是 MMKV 的问题,主要是 MMKViOS 工程下 flutter/example/ios/Podfileflutter/example/mmkvpodhelper.rb里面的代码需要进行适配。

使用上面的代码替换 File.exists 即可。

参考链接


Flutter this and base files have different roots 问题

Flutter项目是能运行的,打开Flutter里面的Android项目才会报下面错误。

报错的项目配置信息如下:

Flutter一开始Android build是没问题的,开发着突然就报这个下面的错误,开始怀疑是不是有什么缓存啥的,然后各种排除都没找到什么原因,后面想着降版本吧,kotlin降了没用,后面尝试最后一个Gradle降版本竟然成功了。

build.gradle文件

参考链接


2023 年第一弹, Flutter 3.7 发布啦,快来看看有什么新特性

核心内容原文链接: medium.com/flutter/wha…

2023 年新春之际, Flutter 喜提了 3.7 的大版本更新,在 Flutter 3.7 中主要有改进框架的性能,增加一些很棒的新功能,例如:创建自定义菜单栏、级联菜单、更好地支持国际化的工具、新的调试工具等等

另外 Flutter 3.7 还改进了 Global selection、使用 Impeller提升渲染能力、DevTools 等功能,以及一如既往的性能优化

PS :3.7 版本包含大量,大量,大量更新内容,感觉离 4.0 不远了。

继续阅读2023 年第一弹, Flutter 3.7 发布啦,快来看看有什么新特性

flutter desktop HIVE简单使用

1.数据库选型

flutter项目,需要使用本地存储,面临三个选择

  • shared_preferences
  • sqflite
  • hive
    第一个只能保存key vaule,用起来比较不爽。

    第二个对桌面版的不支持。

    最后选择了hive,用起来还算可以,不过,相对于后台的orm,还是有些东西需要自己处理。

2.项目引用

3.hive的简单使用

之前做个一阵子后台,按照后台的orm逻辑,组装了一下hive。

main.dart里面初始化hive

hive的初始化部分,初始化了三张表

单个表的model

使用model

结束。

参考链接


Flutter CustomPainter自动绘制属性repaint原理

这篇文章主要讨论的是Fluter中CustomPainter中使用repaint属性实现自动paint的原理。

首先使用CustomPaint创建一个StatefulWidget,demo中根据点击位置,对蓝色的圆进行位置变换。

代码如下

继续阅读Flutter CustomPainter自动绘制属性repaint原理

flutter升级到3.3.9后报错“Library not loaded: @rpath/libswiftCore.dylib”

flutter 升级到 3.3.9 后,代码编译报错,如下:

解决方法就是在工程的 "Build Settings->Linking->Runpath Search Paths" 加上 "/usr/lib/swift" 。

如下图:

继续阅读flutter升级到3.3.9后报错“Library not loaded: @rpath/libswiftCore.dylib”