Flutter轻量级数据库管理插件flutterrealm_light的使用

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

Flutter轻量级数据库管理插件flutterrealm_light的使用

flutterrealm_light 是一个适用于 Android 和 iOS 的 Realm 数据库管理插件。目前该插件支持的平台包括:

  • iOS

如何使用

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

# 在你的dependencies中添加以下行
fluterrealm: ^1.0.19+1

接下来,导入 flutterrealm_light 包:

import 'package:flutterrealm_light/realm.dart';

登录到同步用户:

// 创建同步凭证
SyncCredentials syncCredentials = 
    SyncCredentials.jwt(jwt); // jwt 是你的JWT令牌

// 登录同步用户
SyncUser user = await SyncUser.login(
    credentials: syncCredentials,
    server: serverUrl // serverUrl 是你的服务器地址
);

注销

要注销当前用户,可以调用以下方法:

// 注销同步用户
await syncUser.logout();

完整示例 Demo

以下是一个完整的示例,展示了如何使用 flutterrealm_light 插件进行基本的数据库管理和用户登录/注销操作。

import 'package:flutter/material.dart';
import 'package:flutterrealm_light/realm.dart';

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomeScreen(),
    );
  }
}

class HomeScreen extends StatefulWidget {
  [@override](/user/override)
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  SyncUser? _syncUser;

  [@override](/user/override)
  void initState() {
    super.initState();
    _loginUser();
  }

  Future<void> _loginUser() async {
    // 创建同步凭证
    SyncCredentials syncCredentials = 
        SyncCredentials.jwt("your_jwt_token_here"); // 请替换为你的JWT令牌

    // 登录同步用户
    SyncUser user = await SyncUser.login(
        credentials: syncCredentials,
        server: "your_server_url_here"); // 请替换为你的服务器地址

    setState(() {
      _syncUser = user;
    });
  }

  void _logoutUser() async {
    // 注销同步用户
    if (_syncUser != null) {
      await _syncUser!.logout();
      setState(() {
        _syncUser = null;
      });
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('FlutterRealm Light Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: _syncUser == null ? _loginUser : null,
              child: Text(_syncUser == null ? 'Login' : 'Already Logged In'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _syncUser != null ? _logoutUser : null,
              child: Text(_syncUser != null ? 'Logout' : 'Not Logged In'),
            ),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter轻量级数据库管理插件flutterrealm_light的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter轻量级数据库管理插件flutterrealm_light的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用flutter_realm_light插件进行轻量级数据库管理的代码示例。flutter_realm_light是一个用于Flutter的Realm数据库插件,它提供了轻量级、高性能的数据库管理功能。

1. 添加依赖

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

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

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

2. 配置Realm

在项目的根目录下创建一个realm_config.dart文件,用于配置Realm数据库:

import 'package:flutter_realm_light/flutter_realm_light.dart';

class RealmConfig {
  static final RealmConfiguration configuration = RealmConfiguration()
    ..schemaVersion(1)
    ..migrationBlock((oldRealm, newRealm) {
      // 迁移逻辑(如果有的话)
    })
    ..path("path/to/your/realm/file.realm");  // 指定Realm文件路径
}

3. 定义Realm模型

创建一个Realm模型类,比如User.dart

import 'package:flutter_realm_light/flutter_realm_light.dart';

class User extends RealmObject {
  @PrimaryKey
  String? id;
  String? name;
  int? age;

  // 默认的构造函数是必须的
  User() {}

  // 带参数的构造函数用于创建对象
  User(String id, String name, int age) {
    this.id = id;
    this.name = name;
    this.age = age;
  }
}

4. 使用Realm进行数据库操作

在你的Flutter组件中,你可以使用Realm进行CRUD操作。例如,在main.dart中:

import 'package:flutter/material.dart';
import 'package:flutter_realm_light/flutter_realm_light.dart';
import 'realm_config.dart';
import 'User.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Realm Light Example'),
        ),
        body: RealmExample(),
      ),
    );
  }
}

class RealmExample extends StatefulWidget {
  @override
  _RealmExampleState createState() => _RealmExampleState();
}

class _RealmExampleState extends State<RealmExample> {
  late Realm realm;

  @override
  void initState() {
    super.initState();
    Realm.open(configuration: RealmConfig.configuration).then((openedRealm) {
      setState(() {
        realm = openedRealm!;
      });
    }).catchError((error) {
      print("Failed to open Realm: $error");
    });
  }

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

  void addUser() {
    realm.write(() {
      User user = User("1", "Alice", 30);
      realm.add(user);
    });
  }

  void readUsers() {
    List<User> users = realm.objects(User.self()).toList();
    users.forEach((user) {
      print("User: ${user!.name}, Age: ${user.age}");
    });
  }

  @override
  Widget build(BuildContext context) {
    return Center(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          ElevatedButton(
            onPressed: addUser,
            child: Text('Add User'),
          ),
          ElevatedButton(
            onPressed: readUsers,
            child: Text('Read Users'),
          ),
        ],
      ),
    );
  }
}

注意事项

  1. 线程安全:Realm操作需要在写事务(realm.write)中进行,以确保线程安全。
  2. 迁移:当Realm模型发生变化时,需要更新schemaVersion并提供迁移逻辑。
  3. 关闭Realm:确保在不需要时关闭Realm实例以释放资源。

上述代码示例展示了如何使用flutter_realm_light插件进行基本的数据库操作。根据你的实际需求,你可以进一步扩展和优化这些代码。

回到顶部