Flutter上下文监听与状态管理插件context_watch_mobx的使用

发布于 1周前 作者 sinazl 来自 Flutter

Flutter上下文监听与状态管理插件context_watch_mobx的使用

在本教程中,我们将详细介绍如何使用context_watch_mobx插件来监听MobX的Observable对象。通过这种方式,我们可以更方便地进行状态管理和上下文监听,而无需使用Observer或子类化ObserverStatelessWidget

使用

首先,我们需要将MobxContextWatcher.instance添加到ContextPlus.rootadditionalWatchers列表中:

ContextPlus.root(
  additionalWatchers: [
    MobxContextWatcher.instance,
  ],
  child: ...,
);

接下来,我们可以通过Observable.watch(context)Observable.watchOnly(context, () => ...)方法来观察MobX的Observable对象,而不需要额外的包装或继承特定的类。

示例代码

以下是一个完整的示例代码,展示了如何使用context_watch_mobx插件来管理MobX的状态。

import 'package:context_plus/context_plus.dart';
import 'package:context_watch_mobx/context_watch_mobx.dart';
import 'package:flutter/material.dart';

// 定义一个可观察的对象
final _counter = Observable(0);

class Example extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    // 使用Observable.watch方法来观察状态
    final counter = _counter.watch(context);
    return Text('Counter: $counter');
  }
}

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return ContextPlus.root(
      additionalWatchers: [
        MobxContextWatcher.instance,
      ],
      child: MaterialApp(
        home: Scaffold(
          appBar: AppBar(
            title: Text("MobX上下文监听"),
          ),
          body: Center(
            child: Example(),
          ),
          floatingActionButton: FloatingActionButton(
            onPressed: () {
              // 更新Observable对象的值
              _counter.value++;
            },
            tooltip: 'Increment',
            child: Icon(Icons.add),
          ),
        ),
      ),
    );
  }
}

更多关于Flutter上下文监听与状态管理插件context_watch_mobx的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter上下文监听与状态管理插件context_watch_mobx的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中,使用context_watch_mobx插件可以方便地结合MobX进行状态管理和上下文监听。以下是一个具体的代码示例,展示了如何设置和使用context_watch_mobx来监听MobX的状态变化。

首先,确保你的pubspec.yaml文件中包含了必要的依赖:

dependencies:
  flutter:
    sdk: flutter
  mobx: ^2.0.6 # 请检查最新版本
  flutter_mobx: ^2.0.3 # 请检查最新版本
  context_watch_mobx: ^0.1.0 # 请检查最新版本,注意这是一个假设的版本号

然后,运行flutter pub get来获取这些依赖。

接下来,设置MobX的状态管理。首先,创建一个MobX的store类:

import 'package:mobx/mobx.dart';

part 'counter_store.g.dart';

class CounterStore = _CounterStore with _$CounterStore;

abstract class _CounterStore with Store {
  int _count = 0;

  @observable
  int get count => _count;

  @action
  void increment() {
    _count++;
  }

  @action
  void decrement() {
    _count--;
  }
}

生成MobX的代码(在项目的根目录下运行flutter pub run build_runner build)。

然后,在你的Flutter应用中设置context_watch_mobx

import 'package:flutter/material.dart';
import 'package:flutter_mobx/flutter_mobx.dart';
import 'package:context_watch_mobx/context_watch_mobx.dart';
import 'counter_store.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  final CounterStore counterStore = CounterStore();

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: ContextWatcherProvider(
        store: counterStore,
        child: MyHomePage(),
      ),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final counterStore = ContextWatcher.of<CounterStore>(context);

    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Demo Home Page'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Observer(
              builder: (_) => Text(
                'You have pushed the button this many times:',
              ),
            ),
            Observer(
              builder: (_) => Text(
                '${counterStore.count}',
                style: Theme.of(context).textTheme.headline4,
              ),
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          counterStore.increment();
        },
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }
}

注意,在这个例子中,我们使用了ContextWatcherProvider来提供MobX store,并通过ContextWatcher.of<CounterStore>(context)来获取store实例。然后,我们使用Observer来监听store的变化并更新UI。

不过,实际上context_watch_mobx插件的主要目的是简化上下文监听,但在此示例中,为了演示完整性,我们仍然使用了flutter_mobxObserver。如果context_watch_mobx提供了特定的监听API,你可能需要根据其文档调整监听部分。

由于context_watch_mobx是一个假设的插件,并且具体的API可能会有所不同,因此请参考其官方文档以获取更详细和准确的使用信息。如果它是一个真实存在的插件,你可能需要使用类似下面的代码来监听状态变化(假设API存在):

ContextWatch<int>(
  context: context,
  selector: (store) => store.count,
  builder: (context, count) {
    return Text('Count: $count');
  },
);

请务必查阅context_watch_mobx的实际文档来获取正确的用法。

回到顶部