Flutter响应式数据绑定插件observable_builder的使用

Flutter响应式数据绑定插件observable_builder的使用

简介

observable_builder 是一个轻量级的Flutter状态管理库,支持本地刷新和状态缓存。

使用

本示例将展示如何使用 observable_builder 插件进行响应式数据绑定。

支持的数据类型

  • 1.obs
  • '.obs'
  • [].obs
  • {}.obs
  • nocache
示例1:使用 1.obs 类型
class TestWidget extends StatefulWidget {
  @override
  _TestWidgetState createState() => _TestWidgetState();
}

class _TestWidgetState extends State<TestWidget> {
  // 定义一个可观察的变量
  final countObs = 0.obs;

  @override
  void initState() {
    // 监听状态变化
    observableCounter.listen((state) {
      print(state.current);
    });
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        // 使用ObservableBuilder来构建UI
        ObservableBuilder<BasicClass>(
          create: countObs,
          memo: (state) => [state.current],
          builder: (context, state) {
            // 显示当前值
            return Text('${state.current}');
          },
        ),
        // 添加按钮,用于增加计数器的值
        IconButton(
          onPressed: () => countObs.notify((state) => state.current++),
          icon: Icon(Icons.add),
        )
      ],
    );
  }
}

支持的状态缓存

示例2:使用缓存
class CounterState {
  int counter = 0;
}

var observableCounter = Observable(CounterState());

class TestWidget extends StatefulWidget {
  @override
  _TestWidgetState createState() => _TestWidgetState();
}

class _TestWidgetState extends State<TestWidget> {
  @override
  void initState() {
    // 监听状态变化
    observableCounter.listen((state) {
      print(state.counter);
    });
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        // 使用ObservableBuilder来构建UI
        ObservableBuilder<CounterState>(
          create: observableCounter,
          memo: (state) => [state.counter],
          builder: (context, state) {
            // 显示当前值
            return Text('${state.counter}');
          },
        ),
        // 添加按钮,用于增加计数器的值
        IconButton(
          onPressed: () => observableCounter.notify((state) => state.counter++),
          icon: Icon(Icons.add),
        )
      ],
    );
  }
}

不使用缓存

示例3:不使用缓存
// 定义一个没有缓存的状态类
class NoCacheCounterState {
  int counter = 0;
}

// 使用没有缓存的状态
var observableCounter = Observable(NoCacheCounterState());

// 定义一个有缓存的状态类
class CacheCounterState {
  int counter;

  CacheCounterState({this.counter = 0});

  // 从JSON解码
  static CacheCounterState fromJson(dynamic json) {
    return CacheCounterState(
      counter: json["counter"],
    );
  }

  // 转换为JSON
  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = Map<String, dynamic>();
    data['counter'] = this.counter;
    return data;
  }
}

// 使用有缓存的状态
var observableCounter = Observable(CacheCounterState(),
    cacheKey: 'CounterState_CacheKey', decoder: CacheCounterState.fromJson);

更多关于Flutter响应式数据绑定插件observable_builder的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter响应式数据绑定插件observable_builder的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


observable_builder 是一个用于 Flutter 的响应式数据绑定插件,它可以帮助你轻松地管理状态并实现数据绑定。通过 observable_builder,你可以在数据变化时自动更新 UI,而不需要手动调用 setState

1. 安装插件

首先,你需要在 pubspec.yaml 文件中添加 observable_builder 依赖:

dependencies:
  flutter:
    sdk: flutter
  observable_builder: ^1.0.0

然后运行 flutter pub get 来安装依赖。

2. 基本用法

observable_builder 的核心是 ObservableObservableBuilder。你可以通过 Observable 来管理状态,并通过 ObservableBuilder 来监听状态的变化。

2.1 创建 Observable

import 'package:observable_builder/observable_builder.dart';

// 创建一个 Observable
final counter = Observable(0);

2.2 使用 ObservableBuilder

ObservableBuilder(
  observable: counter,
  builder: (context, value) {
    return Text('Counter: $value');
  },
)

在这个例子中,ObservableBuilder 会监听 counter 的变化,并在 counter 的值发生变化时自动更新 UI。

2.3 更新 Observable

你可以通过 Observablevalue 属性来更新它的值:

ElevatedButton(
  onPressed: () {
    counter.value++;
  },
  child: Text('Increment'),
)

当你点击按钮时,counter 的值会增加,并且 ObservableBuilder 会自动更新 UI。

3. 高级用法

3.1 监听多个 Observable

你可以使用 ObservableBuilder 来监听多个 Observable,并在它们中的任何一个发生变化时更新 UI:

ObservableBuilder(
  observables: [counter1, counter2],
  builder: (context, values) {
    return Text('Counter1: ${values[0]}, Counter2: ${values[1]}');
  },
)

3.2 自定义 Observable

你可以通过继承 Observable 来创建自定义的 Observable 类:

class CustomObservable extends Observable<String> {
  CustomObservable(String value) : super(value);

  void updateValue(String newValue) {
    value = newValue;
  }
}

3.3 使用 ObservableList

observable_builder 还提供了 ObservableList,它是一个可观察的列表:

final list = ObservableList<int>();

ObservableBuilder(
  observable: list,
  builder: (context, value) {
    return ListView.builder(
      itemCount: value.length,
      itemBuilder: (context, index) {
        return Text('Item ${value[index]}');
      },
    );
  },
);
回到顶部