Flutter数据映射与状态管理插件dart_json_mapper_mobx的使用

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

Flutter数据映射与状态管理插件 dart_json_mapper_mobx 的使用

dart_json_mapper_mobx 是一个辅助包,用于支持 MobX.dart 类的序列化和反序列化操作。它扩展了 dart-json-mapper 的功能,使得在 Flutter 应用中可以轻松地将 MobX 状态管理类转换为 JSON 格式或从 JSON 格式恢复。

基本设置

在开始之前,请确保你已经阅读并理解了 dart-json-mapper 的基本设置部分。

首先,在你的 pubspec.yaml 文件中添加以下依赖项:

dependencies:
  dart_json_mapper: ^1.0.0 # 请根据最新版本调整
  dart_json_mapper_mobx: ^1.0.0 # 同样,请检查最新的发布版本
dev_dependencies:
  build_runner: ^2.0.0 # 构建工具

接下来是示例代码演示如何使用该插件进行序列化和反序列化。

示例代码

lib/main.dart

import 'package:mobx/mobx.dart' show ObservableList;
import 'package:dart_json_mapper/dart_json_mapper.dart' 
    show JsonMapper, jsonSerializable, SerializationOptions;
import 'package:dart_json_mapper_mobx/dart_json_mapper_mobx.dart' 
    show mobXAdapter;

// 自动生成的文件,包含初始化配置
import 'main.mapper.g.dart' show initializeJsonMapper;

/// 使用 @jsonSerializable 注解标记需要序列化的类
@jsonSerializable
class MyMobXClass {
  // 定义一个 ObservableList 字段
  ObservableList<String> mailingList = ObservableList<String>();

  MyMobXClass(this.mailingList);
}

void main() {
  // 初始化 JsonMapper 并注册 mobXAdapter
  initializeJsonMapper(adapters: [mobXAdapter]);
  
  // 创建实例并序列化为 JSON 字符串
  final jsonString = JsonMapper.serialize(
     MyMobXClass(ObservableList<String>.of(['aa@test.com', 'bb@test.com', 'cc@test.com']))
  );
  
  print(jsonString); // 输出 JSON 字符串
  
  // 反序列化 JSON 字符串为对象实例
  final deserializedInstance = JsonMapper.deserialize<MyMobXClass>(jsonString);
  print(deserializedInstance); // 输出反序列化后的对象
}

输出结果将会是:

{
  "mailingList": ["aa@test.com","bb@test.com","cc@test.com"]
}

这段代码展示了如何定义一个包含 ObservableList 的 MobX 类,并通过 dart_json_mapper_mobx 插件将其序列化为 JSON 格式,以及如何从 JSON 字符串反序列化回原始对象。

为了生成必要的 .g.dart 文件,你需要运行以下命令:

flutter packages pub run build_runner build

更多关于Flutter数据映射与状态管理插件dart_json_mapper_mobx的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter数据映射与状态管理插件dart_json_mapper_mobx的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter开发中,dart_json_mappermobx 是两个非常有用的库,分别用于数据序列化和状态管理。结合这两个库,可以实现高效的数据映射和状态管理。下面是一个使用 dart_json_mapper_mobx 插件的示例代码,展示如何结合这两个库进行开发。

首先,确保在 pubspec.yaml 文件中添加必要的依赖:

dependencies:
  flutter:
    sdk: flutter
  mobx: ^2.0.6  # 请检查最新版本
  flutter_mobx: ^2.0.3  # 请检查最新版本
  dart_json_mapper: ^2.0.0  # 请检查最新版本
  dart_json_mapper_mobx: ^1.0.0  # 假设有一个这样的插件,实际中可能需要手动集成

注意dart_json_mapper_mobx 并不是官方或广泛认可的库名,这里假设存在一个这样的库用于集成 dart_json_mappermobx。实际上,你可能需要手动集成这两个库的功能。以下是一个手动集成的示例。

数据模型定义

使用 dart_json_mapper 定义数据模型,并使其可观察(observable)以便与 mobx 集成。

import 'package:dart_json_mapper/dart_json_mapper.dart';
import 'package:mobx/mobx.dart';

part 'user_model.g.dart';

@jsonSerializable
class User = _User with _$User;

abstract class _User with Store {
  @observable
  String? name;

  @observable
  int? age;

  _User({this.name, this.age});

  // 用于从JSON反序列化的构造函数
  factory _User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);

  // 用于序列化到JSON的方法
  Map<String, dynamic> toJson() => _$UserToJson(this);
}

生成 user_model.g.dart 文件:

flutter pub run build_runner build

状态管理

使用 mobx 创建一个 Store 来管理用户状态。

import 'package:mobx/mobx.dart';
import 'user_model.dart';

part 'user_store.g.dart';

class UserStore = _UserStore with _$UserStore;

abstract class _UserStore with Store {
  @observable
  User? user;

  _UserStore({User? initialUser}) : user = initialUser;

  @action
  void updateUser(User newUser) {
    user = newUser;
  }
}

同样,生成 user_store.g.dart 文件:

flutter pub run build_runner build

UI 层

在 Flutter UI 中使用 flutter_mobx 来绑定和观察 mobx Store。

import 'package:flutter/material.dart';
import 'package:flutter_mobx/flutter_mobx.dart';
import 'user_store.dart';

void main() {
  final store = UserStore(initialUser: User(name: 'John Doe', age: 30));
  runApp(MyApp(store: store));
}

class MyApp extends StatelessWidget {
  final UserStore store;

  MyApp({required this.store});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('MobX with Dart JSON Mapper'),
        ),
        body: Observer(
          builder: (_) {
            return Center(
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: <Widget>[
                  Text('Name: ${store.user?.name}'),
                  Text('Age: ${store.user?.age}'),
                  ElevatedButton(
                    onPressed: () {
                      final newUser = User(name: 'Jane Doe', age: 25);
                      store.updateUser(newUser);
                    },
                    child: Text('Update User'),
                  ),
                ],
              ),
            );
          },
        ),
      ),
    );
  }
}

在这个示例中,我们展示了如何使用 dart_json_mapper 来定义和序列化 User 模型,以及如何使用 mobx 来管理 User 对象的状态。UI 层使用 flutter_mobxObserver 小部件来观察状态变化并更新界面。

请注意,由于 dart_json_mapper_mobx 可能不是一个实际存在的库,这里的示例展示了如何手动集成 dart_json_mappermobx 的功能。如果你发现有一个现成的 dart_json_mapper_mobx 库,请查阅其文档以获取更具体的集成指南。

回到顶部