Flutter数据库适配插件foodb_objectbox_adapter的使用

Flutter数据库适配插件foodb_objectbox_adapter的使用

Getting Started

本项目是一个新的Dart包项目,可以轻松地在多个Flutter或Dart项目中共享库模块。

对于如何开始使用Flutter,您可以查看我们的在线文档,该文档提供了教程、示例、移动开发指南和完整的API参考。

运行单元测试

  1. ObjectBox入门 由于本仓库使用了ObjectBox,强烈建议您先阅读ObjectBox入门指南

  2. 安装ObjectBox工具 您还需要运行以下命令:

    bash <(curl -s https://raw.githubusercontent.com/objectbox/objectbox-dart/main/install.sh)
    
  3. 创建lib目录(针对MacOS) 如果遇到错误,手动创建lib目录。可能是创建了一个可执行文件。

    ls: /usr/local/lib/*: 不是目录
    安装库时找不到 - 未找到
    
  4. 创建temp目录libtest目录同一级别创建temp目录。

  5. 创建.env文件libtest目录同一级别创建.env文件。

  6. 定义COUCHDB_TEST_URI变量.env文件中定义COUCHDB_TEST_URI变量,例如:

    COUCHDB_TEST_URI=http://admin:password[@localhost](/user/localhost):5984
    

使用Docker运行CouchDB

  1. Docker镜像选项

  2. 解决终端中的错误 继续操作以解决终端中的错误。

  3. 创建挂载卷的目录

    $ mkdir ~/data
    $ docker run -p 5984:5984 --volume ~/data:/opt/couchdb/data --env COUCHDB_USER=admin --env COUCHDB_PASSWORD=password apache/couchdb:2.1.1
    
  4. 更新用户

    $ curl localhost:5984
    {"couchdb":"Welcome","version":"2.1.1","features":["scheduler"],"vendor":{"name":"The Apache Software Foundation"}}
    $ curl -X PUT http://admin:password[@localhost](/user/localhost):5984/_users
    {"ok":true}
    $ curl -X PUT http://admin:password[@localhost](/user/localhost):5984/_replicator
    {"ok":true}
    $ curl -X PUT http://admin:password[@localhost](/user/localhost):5984/_global_changes
    {"ok":true}
    
  5. 更新COUCHDB_TEST_URICOUCHDB_TEST_URI更新为:

    COUCHDB_TEST_URI=http://admin:password[@localhost](/user/localhost):5984
    

示例代码

import 'package:flutter/material.dart';
import 'package:objectbox/objectbox.dart';
import 'package:foodb_objectbox_adapter/foodb_objectbox_adapter.dart';

[@Entity](/user/Entity)()
class User {
  int id;
  String name;
  String email;

  User({required this.id, required this.name, required this.email});
}

void main() async {
  // 初始化ObjectBox
  final store = await openStore();
  final box = Box<User>(store);

  // 创建用户实例
  final user = User(id: 1, name: 'John Doe', email: 'john.doe@example.com');

  // 插入用户数据
  box.put(user);

  // 查询用户数据
  final query = box.query(User_.id.equals(1)).build();
  final foundUser = query.findFirst();

  // 打印查询结果
  print(foundUser);

  // 关闭存储
  await store.close();
}

更多关于Flutter数据库适配插件foodb_objectbox_adapter的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


foodb_objectbox_adapter 是一个用于在 Flutter 应用中适配 ObjectBox 数据库的插件。它提供了一种简单的方式来使用 ObjectBox 进行数据持久化。以下是如何在 Flutter 项目中使用 foodb_objectbox_adapter 的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  foodb_objectbox_adapter: ^latest_version
  objectbox: ^latest_version

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

2. 初始化 ObjectBox

在你的 Flutter 应用中,你需要在应用启动时初始化 ObjectBox。通常,你可以在 main.dart 文件中进行初始化:

import 'package:flutter/material.dart';
import 'package:objectbox/objectbox.dart';
import 'package:foodb_objectbox_adapter/foodb_objectbox_adapter.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化 ObjectBox
  final store = await openStore();
  final adapter = ObjectBoxAdapter(store);

  runApp(MyApp(adapter: adapter));
}

class MyApp extends StatelessWidget {
  final ObjectBoxAdapter adapter;

  MyApp({required this.adapter});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(adapter: adapter),
    );
  }
}

3. 定义数据模型

你需要定义一个数据模型,并使用 ObjectBox 的注解来标记实体和字段:

import 'package:objectbox/objectbox.dart';

@Entity()
class User {
  @Id()
  int id = 0;

  String name;

  User({this.id = 0, required this.name});
}

4. 使用 foodb_objectbox_adapter 进行 CRUD 操作

你可以使用 foodb_objectbox_adapter 来执行 CRUD(创建、读取、更新、删除)操作:

import 'package:flutter/material.dart';
import 'package:foodb_objectbox_adapter/foodb_objectbox_adapter.dart';
import 'package:objectbox/objectbox.dart';

class MyHomePage extends StatefulWidget {
  final ObjectBoxAdapter adapter;

  MyHomePage({required this.adapter});

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

class _MyHomePageState extends State<MyHomePage> {
  late Box<User> userBox;

  [@override](/user/override)
  void initState() {
    super.initState();
    userBox = widget.adapter.box<User>();
  }

  void _addUser() {
    final user = User(name: 'John Doe');
    userBox.put(user);
    setState(() {});
  }

  void _deleteUser(User user) {
    userBox.remove(user.id);
    setState(() {});
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    final users = userBox.getAll();

    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter ObjectBox Demo'),
      ),
      body: ListView.builder(
        itemCount: users.length,
        itemBuilder: (context, index) {
          final user = users[index];
          return ListTile(
            title: Text(user.name),
            trailing: IconButton(
              icon: Icon(Icons.delete),
              onPressed: () => _deleteUser(user),
            ),
          );
        },
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _addUser,
        tooltip: 'Add User',
        child: Icon(Icons.add),
      ),
    );
  }
}
回到顶部