如何正确使用ObjectBox flutter store的打开和关闭?

2023-12-10

我希望使用 Flutter 和 ObjectBox (1.1.1 -> Flutter) 定义最佳开发实践。

我想建立一个由Repository组成的架构来实现对数据库中存储的对象的查询功能。这是一个对象人的示例。存储库主要从 viewModel 调用。

import 'package:flutter_app_best_practice/data/person_repository_interface.dart';
import 'package:flutter_app_best_practice/model/person.dart';
import 'package:flutter_app_best_practice/objectbox.g.dart';
import 'package:objectbox/objectbox.dart';

class PersonRepository implements IPersonRepository{
  var _store;
  late Box _box;

  @override
  Future<List<Person>>? getPeople() {
    List<Person> list = _box.getAll() as List<Person>;
    return Future.value(list);
  }

  @override
  Future<void>? addPerson(String name, int age) async {
    Person person = new Person();
    person.name = name;
    person.age = age;
    _box.put(person);  // Add
    return;
  }

  @override
  Future<void>? initialize() async {
    // Future<Store> openStore() {...} is defined in the generated objectbox.g.dart
    openStore().then((Store store) {
      _store = store;
    });

    _box = _store.box<Person>();

    return;
  }
}

这是我的问题:

  • 或者使用这种架构调用 _store.close ?
  • 与其使用Initialize函数,不如在每次交易之前打开商店,然后在交易完成后关闭商店会更好吗?
  • 是否有使用最新版本的 objectBox 的类似结构的示例(使用 openStore ().Then ((Store store))

您如何看待这个实现:


class PersonRepository implements IPersonRepository {

  @override
  Future<List<Person>>? getPeople() async {
    late List<Person> persons;

    await openStore().then((Store store) {
      var _box = store.box<Person>();
      persons = _box.getAll();
      store.close();
    });

    return Future.value(persons);
  }

  @override
  Future<void>? addPerson(String name, int age) async {

    await openStore().then((Store store) {
      var _box = store.box<Person>();
      Person person = new Person();
      person.name = name;
      person.age = age;
      _box.put(person);  // Add
      store.close();
    });
    
    return;
  }
}


或者使用这种架构调用 _store.close ?

你可以忽略Store.close()在正常应用程序中,没有过多的后台操作。

与其使用Initialize函数,不如在每次交易之前打开商店,然后在交易完成后关闭商店会更好吗?

不,开一家商店的成本“相当”高,所以你不应该在每次访问商店时都这样做——这只会减慢你的速度,而且没有任何好处。

是否有使用最新版本的 objectBox 的类似结构的示例(使用 openStore ().Then ((Store store))

objectbox 包本身有一个示例,尽管代码结构不同:https://github.com/objectbox/objectbox-dart/blob/main/objectbox/example/flutter/objectbox_demo/lib/main.dart#L79


举一个例子,在保持代码尝试执行的抽象级别的同时,您可以做什么:

class PersonRepository implements IPersonRepository {
  final Store _store;
  final Box<Person> _box;

  PersonRepository(this._store) : _box = _store.box() {}

  @override
  Future<List<Person>>? getPeople() {
    List<Person> list = _box.getAll() as List<Person>;
    return Future.value(list);
  }

  @override
  Future<void>? addPerson(String name, int age) async {
    Person person = new Person();
    person.name = name;
    person.age = age;
    _box.put(person);  // Add
    return;
  }
}

abstract class IDatabaseRepositories {
  IPersonRepository get people;
}

class ObjectBoxRepositories implements IDatabaseRepositories {
  final Store _store;

  final PersonRepository people;

  static Future<IDatabaseRepositories> create() async =>
      ObjectBoxRepositories._(await openStore());

  ObjectBoxRepositories._(this._store) : people = PersonRepository(_store);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何正确使用ObjectBox flutter store的打开和关闭? 的相关文章

随机推荐

  • Android SQLite 更新/插入

    我想要UPDATE我的桌子上有一排 WHERE 键 最后选择的如果具有该键的行不存在 我想要INSERT it 我可以得到UPDATE如果该行已经存在 则可以工作 但不会INSERT如果丢失 我已经尝试过这些 第一个正确更新 但不插入 St
  • Elmah 无法使用 ASP.NET 网站

    我尝试在我的 asp net 网站上使用 elmah 但每当我尝试访问http localhost 端口 elmah axd我得到资源未找到异常 我的 web config 如下
  • Git Config 仅排除一个分支的文件

    我想在我的公共分支中排除一个名为 config dbconfig js 的文件 我用它推送到 github 但仍然能够从 master 推送到我的 noester com git 存储库以推送到生产环境 我将配置文件更改为 core rep
  • Typescript 给出“找不到模块‘xmlhttprequest’的声明文件。”

    Using import XMLHttpRequest from xmlhttprequest 在 Node 上 当我使用以下命令进行编译时 出现以下错误tsc index ts 4 col 32 错误 7016 QF 可用 找不到模块 的
  • JVM 缺少 Rhino

    我有一个使用 ScriptEngine 处理一些 javascript 的项目 并且在我的机器上运行良好 但是当我将项目的 jar 发送到服务器时 我发现服务器的 JVM 没有内置 Rhino 当该代码调用 new ScriptEngine
  • 发送至:网络无法访问

    我有两台机器正在测试我的代码 一台工作正常 另一台我遇到了一些问题 我不知道为什么会这样 我正在使用一个对象 C 作为我项目的网络部分 在服务器端 我这样做 为了清楚起见 删除了错误检查 res getaddrinfo NULL port
  • 在 Android 中完成父级和当前活动

    我有 3 项活动 活动 A 会导致活动 B 活动 B 又可以返回活动 A 或启动活动 C 但是 如果我在活动 C 中按返回 应用程序应该关闭 总结 活动 A 启动活动 B 紧迫Back活动 B 应该导致 A 活动 B 开始活动 C 紧迫Ba
  • 使用星号 * 量词的奇怪结果

    我正在尝试在一个简单的字符串上练习星号 量词 但是虽然我只有两个字母 但结果包含第三个匹配项 结果出来了 array 1 0 gt array 3 0 gt string 1 a 1 gt string 0 2 gt string 0 据我
  • 如何在不同的系统文化中转换日期时间?

    我需要转换DateTime不同文化格式中的值 无论系统中设置如何 没有选择任何特定的时区进行转换 任何区域性格式都使用转换日期时间值 DateTimeFormatInfo ukDtfi new CultureInfo CultureInfo
  • MFMailComposeViewController 和隐私 - 隐藏“收件人:”字段?

    我正在创建我的第二个 iPhone 应用程序 并且我已经使用 MFMailComposeViewController 包含了一个反馈表单 这可以正常显示和工作 但我不确定是否希望所有用户都能看到我的电子邮件地址 有没有办法将 to 字段设置
  • CSS - 渐变文本阴影

    I want to make a gradient text shadow like this Is it possible to do that with CSS or and Javascript Thanks for help 你可以
  • 如何在Asp.Net MVC中导出到Excel?

    SCRIPT function PostExportValues meter id range type id start date end date returnUrl var meter meter selection val 0 aj
  • 在 OpenGL 着色器的 main 之外进行计算是否合理?

    我有一些类似于以下的顶点着色器代码 这是一个简化的示例 attribute vec2 aPosition attribute vec4 aColor varying lowp vec4 vColor uniform vec4 uViewpo
  • 从 Ada 调用 scanf

    如何从 Ada 调用 scanf 也就是说 大概有一个适当的 pragma import 声明 但是声明会是什么样子呢 我感兴趣的是如何从 Ada 调用更难以驾驭的 C 函数 而不是如何解析字符串本身 所以我不是在寻找纯粹的 Ada 解决方
  • 使用 jQuery 更改依赖于滚动位置的类

    我有一个单页网站 有固定的浮动导航 我希望能够通过向相关导航标签添加一类 on 来突出显示用户所在的部分 当用户不再位于该部分时 需要删除此类 并且新的当前部分需要反映在导航中 这无法通过点击功能来完成 因为用户仍然可以上下滚动页面 我知道
  • 确定Word单元格是否合并

    我需要以编程方式在 Word 2010 表中添加和删除行 不幸的是 表的标题包含合并的单元格 水平和垂直合并 使用 Row Add 和 Row Delete 方法时这会导致错误 我已经测试并发现我可以以编程方式删除合并的单元格 Cell S
  • 我的控制器的 rspec 测试返回 nil(+工厂女孩)

    我正在用 rspec 和 Factory Girl 在 Rails 上学习测试 但我无法让它们工作 我的用户控制器如下所示 class UsersController lt ApplicationController def index u
  • 400 Hibernate @Valid 的错误请求

    当我验证我的表单时 我有一个奇怪的行为 一旦我添加 Hibernate Valid 注释 如果发布的数据无效 Tomcat 就会将我的请求视为 错误 如果数据有效 就不用担心 I use 雄猫7 0 52 Javax 验证 API 1 1
  • Jasper Report - 在 PDF 文档中设置作者属性

    有没有办法在从 Java 调用 Jasper 时通过设置参数来设置 PDF 文档的 Author 属性 这就是我从 Java 生成 Jasper 报告的方法 JasperPrint jasperPrint String outFile 39
  • 如何正确使用ObjectBox flutter store的打开和关闭?

    我希望使用 Flutter 和 ObjectBox 1 1 1 gt Flutter 定义最佳开发实践 我想建立一个由Repository组成的架构来实现对数据库中存储的对象的查询功能 这是一个对象人的示例 存储库主要从 viewModel