Flutter插件simplex的介绍与使用

Flutter插件simplex的介绍与使用

Flutter插件simplex简介

Simple SM 是一个简单的状态管理库,用于 Flutter 应用。它受到 GetX 的启发,API 相似,并且允许使用可变变量进行状态管理。

在使用 GetX 之前,我的团队和我搜索了无数其他的状态管理库。我们从 BLoC 开始,然后转向 MobX,接着转向 Riverpod。这些库的好处在于它们使状态非常“反应式”和“可观测”,但一个显著的缺点是它们都有大量的样板代码,并且要求使用不可变状态(MobX 除外,但它需要使用代码生成)。

我创建这个库是因为我在使用 GetX 的 builder 时遇到了一个错误,因为那个小部件包含了一些全局 getter,而我只想创建一些局部状态。此外,尽管 GetX 的文档很长,但不如我希望的那样清晰。因此,就有了这个库。

更具体地说,我希望能够实现以下两个目标:

  1. 在 UI 和业务逻辑之间提供分离;
  2. 通过减少尽可能多的样板代码来简化一些常见的操作。

特性

该库的核心包括两个类:SimpleControllerSimpleView。前者是一个基类,其扩展将用于包含业务逻辑。后者是一个可以扩展以与 SimpleController 配合使用的 widget。

SimpleController

SimpleController 是一个简单控制器。你不能直接实例化它,所以要使用它,你需要创建一个子类。我们将使用 Flutter 的计数器应用作为示例。

class CounterController extends SimpleController {
  int counter = 0;
  
  void increment() {
    counter++;
    refresh();
  }
}

你可以对计数器变量进行任何操作,当你想要请求 UI 重建时,只需调用 refresh()

现在,你可以对 SimpleController 做更多的事情。例如,如果你想在开始时不将计数器设置为 0,而是从数据库读取,这将需要异步操作,你可以这样做:

class CounterController extends SimpleController {
  int counter = 0;
  
  [@override](/user/override) 
  Future<void> onFirstReady() async {
    counter = await getCounterFromDatabase();
  }
}

下面是可以在 SimpleController 中重写的方法列表:

  • onBound(): 当控制器绑定到 widget 时调用。它会为所有绑定到控制器的 widget 触发。
  • onInit(): 控制器绑定到第一个 widget 后调用,并返回 void 类型。你可以在初始化这里做一些事情,但调用 refresh() 不会有立即效果。如果你希望在初始化后重建 widget,可以在 Future.then 回调中调用 refresh()
    [@override](/user/override) 
    void onInit() {
      final counterFuture = getCounterFromDatabase();
      counterFuture.then((value) {
        counter = value;
        refresh();
      });
    }
    
  • onFirstReady(): 当第一个 widget 准备好时调用。此方法只会被调用一次。此函数可以是异步的,并返回 FutureOr<void>
  • onReady(): 每次绑定到此控制器的 widget 准备好时调用。此函数也可以是异步的。
  • onUnbind(): 当控制器从 widget 解绑时调用。它会为所有绑定到控制器的 widget 触发。
  • onDispose(): 当控制器被丢弃时调用。此方法只会被调用一次。默认情况下,此方法会在所有绑定到 widget 的绑定被移除后被调用。但是,可以通过覆盖 keepAlive 属性为 true 来禁用此行为。

SimpleView

SimpleView 是一个可以用来绑定 SimpleController 并在调用 controller.refresh() 后重建的 widget。要使用它,你必须扩展它:

class CounterView extends SimpleView<CounterController> {
  const CounterView({
    Key? key,
    required super.controller,
    super.groupKey,
  });
  
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Counter'),
      ),
      body: Center(
        child: Text(
          'You have pushed the button this many times:',
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: controller.increment,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }
}

另外,如果扩展一个小部件太麻烦,我还提供了 SimpleView 的两个其他具体扩展:SimpleComponentSimpleBuilder。它们之间的区别在于 SimpleComponent 要求你传递一个 child,而 SimpleBuilder 要求你传递一个构建函数。

[@override](/user/override)
Widget build(BuildContext context) {
  return SimpleComponent(
    controller: controller,
    // 这里必须使用相同的 controller 实例
    child: ...
  );
}

或者

[@override](/user/override) 
Widget build(BuildContext context) {
  return SimpleBuilder(
    controller: controller,
    builder: (context, controller) {
      return ...;
    },
  );
}

更多关于Flutter插件simplex的介绍与使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter插件simplex的介绍与使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中,使用第三方插件通常需要通过pubspec.yaml文件来添加依赖项,并在代码中导入和使用该插件。你提到的“simplex”插件可能是一个特定的Flutter插件,但由于它不是一个广泛使用的插件,我无法直接提供具体的使用方法。不过,我可以给你一个通用的步骤来使用Flutter插件。

1. 查找插件

首先,你需要在 pub.dev 上查找“simplex”插件。你可以使用搜索功能来查找该插件。

2. 添加依赖

pubspec.yaml 文件中添加插件的依赖项。例如:

dependencies:
  flutter:
    sdk: flutter
  simplex: ^1.0.0  # 替换为实际的版本号

3. 安装依赖

在终端中运行以下命令来安装依赖:

flutter pub get

4. 导入插件

在你的Dart文件中导入插件:

import 'package:simplex/simplex.dart';

5. 使用插件

根据插件的文档或示例代码来使用它。例如,如果 simplex 插件提供了一个名为 Simplex 的类,你可以这样使用它:

void main() {
  Simplex simplex = Simplex();
  simplex.doSomething();  // 调用插件提供的方法
}

6. 处理平台特定代码

如果插件涉及到平台特定的代码(如Android或iOS),你可能需要根据插件的文档进行额外的配置。

7. 运行项目

最后,运行你的Flutter项目来测试插件的功能:

flutter run
回到顶部