Skip to content

Oncecall 是一个适用于 Flutter Widget build 方法的记忆化工具。允许你的代码在 build 方法中仅调用一次,即使 Widget 重建也不会丢失。

为什么需要它?

我们总是想构造一些具有动态属性又符合 const Widget 的用例,或者我们有一些逻辑必须放在 build 方法中。

而 Oncecall 允许你在 build 中编写仅运行一次的代码。

安装

我们使用下面的命令:

bash
flutter pub add oncecall

或在 pubspec.yaml 中添加:

yaml
dependencies:
  oncecall: latest

基本用法

dart
class MyWidget extends StatelessWidget {
    const MyWidget({super.key});

    Widget build(BuildContext context) {
        oncecall(context, () => print('只会运行一次'));

        return ...;
    }
}

这看起来似乎没有什么不同。但如果没有 oncecall,你将编写下面的代码:

dart
class MyWidget extends StatelessWidget {
    MyWidget({super.key}) {
        print('只会运行一次'); // Widget 重建也许会再次执行
    }

    Widget build(BuildContext context) {
        return ...;
    }
}

用于一次性计算

oncecall() 函数除了用于运行一次性函数之外,它还可以进行一些对象的初始化工作:

dart
class Counter extends StatelessWidget {
    const Counter({super.key});

    Widget build(BuildContext context) {
        final value = oncecall(context, () {
            ...
        });

        return ...;
    }
}

更多

Oncecall 作为 Odroe 生态的基础建设,你会在其他包中无处不在地看到它。它是一个非常低级且简单的 API,和它的名字一样仅仅用于依赖于 context 进行值的记忆化和初始化工作。

更新于: