如何在Flutter中更新Hive对象的特定场?

l5tcr1uw  于 2021-06-25  发布在  Hive
关注(0)|答案(2)|浏览(415)

我在flutter应用程序中使用hive作为nosql本地数据库。
下面是我的Hive课程:

import 'dart:convert';

import 'package:hive/hive.dart';
import 'package:lpa_exam/src/model/listofexams.dart';
import 'package:lpa_exam/src/model/profile.dart';
part 'hiveprofile.g.dart';

@HiveType()
class PersonModel extends HiveObject{
  @HiveField(0)
  String language;

  @HiveField(1)
  String examName;

  @HiveField(2)
  int examId;

  @HiveField(3)
  Profile profile;

  @HiveField(4)
  ListExam listexam;

  @override
  String toString() {
    return jsonEncode({
      'language': language,
      'examName': this.examName,
      'examId': examId,
      'profile': profile,
      'listexam': listexam
    });
  }

  PersonModel(
      this.language, this.examName, this.examId, this.profile, this.listexam);
}

所以,我的要求是,每次成功登录时,我都应该更新profile对象。但是为了这个,我也必须设置所有其他的。
如何只更新profile对象?
代码:

_personBox = Hive.openBox('personBox');
          await _personBox.then((item) {
            if (!item.isEmpty) {
              print('empty');
              item.putAt(0, PersonModel(...,..,..,..,...,..));
            }
          });

我正在使用hive版本1.2.0
参考文献:https://resocoder.com/2019/09/30/hive-flutter-tutorial-lightweight-fast-database/

tgabmvqs

tgabmvqs1#

try.save()方法:

_personBox = Hive.openBox('personBox');
      await _personBox.then((item) {
        if (!item.isEmpty) {
          print('empty');
          var i = item.getAt(0, PersonModel(...,..,..,..,...,..));
          i.profile = Somevalue;
          i.save();
        }
 });
0wi1tuuw

0wi1tuuw2#

就用这个 putAt() 方法,如下所示:

Hive.box('products').putAt(productIndex, _product);

你可以得到 productIndex 通过使用 listView.Builder 这样地:

ListView.builder(
  itemBuilder: (cxt, i) {

    return Row(
      children:[
      Text(product[i].name),
        MaterialButton(
          child:Text('edit'),

          onPressed:(){

        Hive.box('products').putAt(i,product);
      }
    ),
  ]
),
}}

相关问题