Есть ли способ создать класс модели для базы данных Firestore на Flutter? - PullRequest
1 голос
/ 04 марта 2020

В настоящее время я выполняю этот процесс вручную. Это пример класса данных. Есть ли способ генерировать автоматически?

class RideModel {
  final String docId;
  final bool hasRequest;
  final String rideCollectionId;
  final String vehicleTypeId;
  final double corporationRate;
  final double driverRate;
  final double driverInsurance;
  final double passengerInsurance;
  final List startUpCharge;
  final double waitingCharge;
  final double normalCharge;

  RideModel({this.docId, this.hasRequest, this.rideCollectionId,this.vehicleTypeId, this.corporationRate, this.driverRate, this.driverInsurance, this.passengerInsurance, this.startUpCharge, this.waitingCharge, this.normalCharge});

  factory RideModel.fromFirestore(DocumentSnapshot doc) {
    var data = doc.data;

    return RideModel(
        docId: data['docId'],
        hasRequest: data['hasRequest'],
        rideCollectionId: data['rideCollectionId'],
        vehicleTypeId: data['tripDetails']['vehicleType']['vehicleTypeId'],
        corporationRate: data['tripDetails']['vehicleType']['corporation'].toDouble()??0.0,
        driverRate: data['tripDetails']['vehicleType']['driver'].toDouble()??0.0,
        driverInsurance: data['tripDetails']['vehicleType']['driverInsurance'].toDouble()??0.0,
        passengerInsurance: data['tripDetails']['vehicleType']['passengerInsurance'].toDouble()??0.0,
        normalCharge: data['tripDetails']['vehicleType']['normalCharge'].toDouble()??0.0,
        startUpCharge: data['tripDetails']['vehicleType']['startUpCharge']??[],
        waitingCharge: data['tripDetails']['vehicleType']['waitingCharge'].toDouble()??0.0);
  }
}

Ответы [ 2 ]

0 голосов
/ 04 марта 2020

Лично я предпочитаю использовать онлайн-инструмент ... https://app.quicktype.io/ Это может быть все, что вам нужно.

0 голосов
/ 04 марта 2020

Как упомянул @Alex Sunder Singh в комментариях и в одном из ответов на этот пост сообщества , вы можете использовать JsonSerializable () , чтобы сделать это.

Чтобы использовать его, вы должны установить эти зависимости на вашем pubspe c .yaml

dependencies:
  # Your other regular dependencies here
  json_annotation: <latest_version>

dev_dependencies:
  # Your other dev_dependencies here
  build_runner: <latest_version>
  json_serializable: <latest_version>

Затем добавьте аннотацию @JsonSerializable() в свой класс и импортируйте пакет для вашего класса, это будет выглядеть примерно так

import 'package:json_annotation/json_annotation.dart';

@JsonSerializable()
class RideModel {
  final String docId;
  final bool hasRequest;
  final String rideCollectionId;
  final String vehicleTypeId;
  final double corporationRate;
  final double driverRate;
  final double driverInsurance;
  final double passengerInsurance;
  final List startUpCharge;
  final double waitingCharge;
  final double normalCharge;

  RideModel(this.docId, this.hasRequest, this.rideCollectionId,this.vehicleTypeId, this.corporationRate, this.driverRate, this.driverInsurance, this.passengerInsurance, this.startUpCharge, this.waitingCharge, this.normalCharge);

  factory RideModel.fromJson(Map<String, dynamic> json) => _$RideModelFromJson(json);

  Map<String, dynamic> toJson() => _$RideModelToJson(this);
}

ПРИМЕЧАНИЕ: используйте @JsonSerializable(explicitToJson: true), если вы хотите, чтобы все ваши не примитивные объекты были описаны как json, а не как «Экземпляр объекта» '

Наконец, сгенерируйте код сериализации JSON, запустив утилиту генерации кода с вашего терминала

flutter packages pub run build_runner build

С этим вы сможете использовать toJson() для отображения данных на вас объект и fromJson() для отправки вашего объекта в качестве данных.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...