Flutter依赖注入与状态观察插件observable_locator的使用

Flutter依赖注入与状态观察插件observable_locator的使用

observable_locator 是一个服务定位器,它使用 MobX 来简化API并创建反应式依赖关系。

如何使用

首先,确保在您的项目中添加了observable_locator依赖。在pubspec.yaml文件中添加以下依赖:

dependencies:
  observable_locator: ^x.y.z

然后运行flutter pub get以安装该库。

接下来,我们来创建一些基本的代码结构,以便展示如何使用observable_locator

import 'package:flutter/material.dart';
import 'package:observable_locator/observable_locator.dart';

// 创建一个简单的模型类,用于演示
class Counter with Store {
  @observable
  int value = 0;

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

// 主应用
void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: CounterPage(),
    );
  }
}

class CounterPage extends StatelessWidget {
  final counter = Counter(); // 实例化Counter模型

  @override
  Widget build(BuildContext context) {
    return Provider<Counter>(
      create: (_) => counter,
      child: Scaffold(
        appBar: AppBar(title: Text('Observable Locator Demo')),
        body: Center(
          child: Observer(
            builder: (_) => Text('${counter.value}'),
          ),
        ),
        floatingActionButton: FloatingActionButton(
          onPressed: counter.increment,
          tooltip: 'Increment',
          child: Icon(Icons.add),
        ),
      ),
    );
  }
}

详细说明

  1. 引入必要的库

    import 'package:flutter/material.dart';
    import 'package:observable_locator/observable_locator.dart';
    
  2. 定义一个简单的模型类

    class Counter with Store {
      @observable
      int value = 0;
    
      @action
      void increment() {
        value++;
      }
    }
    
  3. 主应用部分

    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: CounterPage(),
        );
      }
    }
    
  4. 创建一个页面,使用ProviderObserver

    class CounterPage extends StatelessWidget {
      final counter = Counter();
    
      @override
      Widget build(BuildContext context) {
        return Provider<Counter>(
          create: (_) => counter,
          child: Scaffold(
            appBar: AppBar(title: Text('Observable Locator Demo')),
            body: Center(
              child: Observer(
                builder: (_) => Text('${counter.value}'),
              ),
            ),
            floatingActionButton: FloatingActionButton(
              onPressed: counter.increment,
              tooltip: 'Increment',
              child: Icon(Icons.add),
            ),
          ),
        );
      }
    }
    

更多关于Flutter依赖注入与状态观察插件observable_locator的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter依赖注入与状态观察插件observable_locator的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在 Flutter 中,依赖注入(Dependency Injection, DI)和状态管理是非常重要的概念。observable_locator 是一个结合了依赖注入和状态观察的插件,它基于 get_itmobx,提供了一种简单的方式来管理依赖和观察状态变化。

1. 安装依赖

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

dependencies:
  flutter:
    sdk: flutter
  observable_locator: ^1.0.0

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

2. 基本使用

2.1 注册依赖

你可以使用 ObservableLocator 来注册依赖。通常在你的应用启动时完成这个操作。

import 'package:observable_locator/observable_locator.dart';

void main() {
  // 注册依赖
  ObservableLocator.instance.registerSingleton<MyService>(() => MyService());

  runApp(MyApp());
}

2.2 获取依赖

在需要的地方,你可以通过 ObservableLocator.instance.get<T>() 来获取依赖。

class MyService {
  void doSomething() {
    print('Doing something!');
  }
}

class MyWidget extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    final myService = ObservableLocator.instance.get<MyService>();
    myService.doSomething();

    return Container();
  }
}

2.3 观察状态

observable_locator 支持使用 mobx 来观察状态变化。首先,你需要定义一个可观察的类:

import 'package:mobx/mobx.dart';

part 'counter.g.dart';

class Counter = _Counter with _$Counter;

abstract class _Counter with Store {
  @observable
  int count = 0;

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

然后,你可以在 ObservableLocator 中注册这个类:

void main() {
  ObservableLocator.instance.registerSingleton<Counter>(() => Counter());

  runApp(MyApp());
}

在 UI 中,你可以使用 Observer 来观察状态变化:

import 'package:flutter/material.dart';
import 'package:mobx/mobx.dart';
import 'package:observable_locator/observable_locator.dart';

class CounterWidget extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    final counter = ObservableLocator.instance.get<Counter>();

    return Observer(
      builder: (_) {
        return Text('Count: ${counter.count}');
      },
    );
  }
}
回到顶部