Flutter数据持久化插件ms_persist的使用

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

Flutter数据持久化插件ms_persist的使用

ms_persist 是一个用于Flutter应用中简化模型(Model)数据持久化的插件。通过这个插件,开发者可以轻松地实现CRUD操作。

开始使用

添加依赖

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

dependencies:
  ms_persist: ^latest_version

记得运行 flutter pub get 来安装新的依赖包。

示例代码

以下是一个简单的例子,演示了如何使用 ms_persist 插件来管理一个计数器模型的数据持久化。

定义模型类

创建一个继承自 Persist<Count>Count 类,并实现必要的方法:

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

class Count with Persist<Count> {
  String? uuid;
  int counter;

  Count([this.uuid, this.counter = 0]);

  void increment() => counter++;
  void decrement() => counter--;

  [@override](/user/override)
  Count buildModel(Map<String, dynamic> map) {
    return Count(map['uuid'] as String, map['counter'] as int);
  }

  [@override](/user/override)
  Map<String, dynamic> toMap() => {
        'uuid': uuid,
        'counter': counter,
      };
}

UI界面

在UI层中,我们将使用上述定义的 Count 模型来展示和修改数据:

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Persist Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(title: 'Persist Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({required this.title, Key? key}) : super(key: key);

  final String title;

  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  late Count _count;

  [@override](/user/override)
  void initState() {
    super.initState();
    _count = Count();
    _loadCounter();
  }

  Future<void> _loadCounter() async {
    var list = await Count().list();
    if (list.isNotEmpty) setState(() => _count = list.last);
  }

  void _incrementCounter() {
    _count.increment();
    _count.save();
    setState(() {});
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
        actions: [
          IconButton(
              icon: Icon(Icons.delete_outline),
              tooltip: 'Delete',
              onPressed: () async {
                await _count.delete();
                _count = Count();
                setState(() {});
              })
        ],
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '${_count.counter}',
              style: Theme.of(context).textTheme.headlineMedium,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }
}

更多关于Flutter数据持久化插件ms_persist的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter数据持久化插件ms_persist的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是关于如何在Flutter项目中使用ms_persist插件进行数据持久化的示例代码。ms_persist是一个用于简化Flutter应用中数据持久化的插件。它支持多种存储方式,如SQLite、SharedPreferences等。

首先,确保你已经在pubspec.yaml文件中添加了ms_persist依赖:

dependencies:
  flutter:
    sdk: flutter
  ms_persist: ^最新版本号  # 请替换为最新的版本号

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

接下来是一个简单的示例,演示如何使用ms_persist插件进行数据的保存和读取。

1. 初始化MsPersist

在你的主文件(通常是main.dart)中,初始化MsPersist实例。这里我们使用SQLite作为存储后端:

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // 初始化 MsPersist 实例,使用 SQLite 作为存储后端
  final MsPersist msPersist = MsPersist.instance;
  await msPersist.init(
    storage: Storage.sqlite,
    databaseName: 'my_database.db',
  );

  runApp(MyApp());
}

2. 定义数据模型

创建一个数据模型类,并使其继承自MsPersistModel。假设我们有一个简单的用户模型:

import 'package:ms_persist/ms_persist.dart';

class User extends MsPersistModel<User> {
  String name;
  int age;

  User({required this.name, required this.age});

  @override
  Map<String, dynamic> toMap() {
    return {
      'name': name,
      'age': age,
    };
  }

  @override
  User fromMap(Map<String, dynamic> map) {
    return User(name: map['name'] as String, age: map['age'] as int);
  }
}

3. 保存和读取数据

在你的应用中保存和读取用户数据:

import 'package:flutter/material.dart';
import 'package:ms_persist/ms_persist.dart';
import 'user_model.dart'; // 假设用户模型定义在 user_model.dart 文件中

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  final MsPersist msPersist = MsPersist.instance;
  await msPersist.init(
    storage: Storage.sqlite,
    databaseName: 'my_database.db',
  );

  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  late User user;

  @override
  void initState() {
    super.initState();
    // 示例用户数据
    user = User(name: 'Alice', age: 30);

    // 保存用户数据
    MsPersist.instance.save(user).then((_) {
      print('User saved');
    });

    // 读取用户数据
    MsPersist.instance.getByKey<User>(User.tableName, user.id).then((retrievedUser) {
      if (retrievedUser != null) {
        print('User retrieved: ${retrievedUser.name}, Age: ${retrievedUser.age}');
      } else {
        print('User not found');
      }
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('MsPersist Demo'),
        ),
        body: Center(
          child: Text('Check the console for save and retrieve operations'),
        ),
      ),
    );
  }
}

注意:在实际应用中,你可能希望在UI中处理异步操作的结果,而不是在initState中直接打印。这里为了简洁,直接在控制台打印了结果。

4. 清理资源

在应用关闭时,你可以清理MsPersist实例占用的资源:

@override
void dispose() {
  MsPersist.instance.close();
  super.dispose();
}

这段代码应该放在你的StatefulWidget的dispose方法中。

这样,你就完成了一个简单的Flutter应用,使用ms_persist插件进行数据的持久化存储和读取。如果你有更复杂的数据模型或存储需求,可以进一步参考ms_persist的官方文档。

回到顶部