首页 > 解决方案 > Flutter Sqflite 如何从表中获取数据并将其传递给提供者

问题描述

在我的应用程序中,这些是包含我从 API 解析的用户数据的 localdb。我的目标是从本地表中获取这些值,并使用提供者将这些值用于状态管理。我为表创建了一个模型类

class UserTable {
  int? id;
  String? accountDetails;
  String? accountId;
  String? childName;
  String? childGender;
  int? expiry;
  int? finalSequenceNo;
  int? packageIndex;
  String? parentName;
  String? productType;
  String? userId;
  int? age;
  int? dob;
  int? nextSyncTime;
  String? productSubType;
  String? validTill;
  int? latestUpdatePkgSeqNo;
  int? guidedTour;
  UserTable(
      {this.id,
      this.accountDetails,
      this.accountId,
      this.childName,
      this.childGender,
      this.expiry,
      this.finalSequenceNo,
      this.packageIndex,
      this.parentName,
      this.productType,
      this.userId,
      this.age,
      this.dob,
      this.nextSyncTime,
      this.productSubType,
      this.validTill,
      this.latestUpdatePkgSeqNo,
      this.guidedTour,
      });
  Map<String, dynamic> toMap() {
    var map = <String, dynamic>{
      DatabaseHelper.USER_TABLE_ID: id,
      DatabaseHelper.ACCOUNT_DETAILS: accountDetails,
      DatabaseHelper.ACCOUNT_ID: accountId,
      DatabaseHelper.USER_CHILD_NAME: childName,
      DatabaseHelper.USER_CHILD_GENDER: childGender,
      DatabaseHelper.EXPIRY: expiry,
      DatabaseHelper.FINAL_SEQ_NO: finalSequenceNo,
      DatabaseHelper.PACKAGE_INDEX: packageIndex,
      DatabaseHelper.PARENT_NAME: parentName,
      DatabaseHelper.PRODUCT_TYPE: productType,
      DatabaseHelper.USER_ID: userId,
      DatabaseHelper.AGE: age,
      DatabaseHelper.DOB: dob,
      DatabaseHelper.NEXT_SYNC_TIME: nextSyncTime,
      DatabaseHelper.PRODUCT_SUB_TYPE: productSubType,
      DatabaseHelper.VALID_TILL: validTill,
      DatabaseHelper.LATEST_UPDATED_PKG_SEQ_NO: latestUpdatePkgSeqNo,
      DatabaseHelper.GUIDED_TOUR: guidedTour,
    };
    if (id != null) {
      map[DatabaseHelper.USER_TABLE_ID] = id;
    }
    return map;
  }

  UserTable.fromMap(Map<String, dynamic> map) {
    id = map[DatabaseHelper.USER_TABLE_ID];
    accountDetails = map[DatabaseHelper.ACCOUNT_DETAILS];
    accountId = map[DatabaseHelper.ACCOUNT_ID];
    childName = map[DatabaseHelper.USER_CHILD_NAME];
    childGender = map[DatabaseHelper.USER_CHILD_GENDER];
    expiry = map[DatabaseHelper.EXPIRY];
    finalSequenceNo = map[DatabaseHelper.FINAL_SEQ_NO];
    packageIndex = map[DatabaseHelper.PACKAGE_INDEX];
    parentName = map[DatabaseHelper.PARENT_NAME];
    productType = map[DatabaseHelper.PRODUCT_TYPE];
    userId = map[DatabaseHelper.USER_ID];
    age = map[DatabaseHelper.AGE];
    dob = map[DatabaseHelper.DOB];
    nextSyncTime = map[DatabaseHelper.NEXT_SYNC_TIME];
    productSubType = map[DatabaseHelper.PRODUCT_SUB_TYPE];
    validTill = map[DatabaseHelper.VALID_TILL];
    latestUpdatePkgSeqNo = map[DatabaseHelper.LATEST_UPDATED_PKG_SEQ_NO];
    guidedTour = map[DatabaseHelper.GUIDED_TOUR];
  }
}

如何从 localdb 检索数据,以便我可以使用该数据进行状态管理。下面是我现在如何检索数据。

Future<List<UserTable>> getAllUserData() async {
    final db = await this.database;
    final List<Map<String, dynamic>> map =
        await db!.rawQuery("SELECT * FROM  $TABLE_USER");
        List<UserTable> list = map.isNotEmpty?map.map((e) => UserTable.fromMap(e)).toList():[];
        return list;

我怎样才能做到这一点?请提出任何解决方法

标签: flutterflutter-providersqflite

解决方案


推荐阅读