hukusuke1007 / flamingo

[Flutter Library] Flamingo is a firebase firestore model framework library. 🐤
https://pub.dev/packages/flamingo
MIT License
118 stars 20 forks source link

Retrieve document with reference inside model #21

Closed phoefnagel closed 3 years ago

phoefnagel commented 3 years ago

Hi,

First of all, thank you for building Flamingo.

I'm currently having the following problem:

For example:

Let's say i have a document called Cart. The cart document will contain an array with objects

Schermafbeelding 2021-01-06 om 23 59 14

Cart Document

import 'package:flamingo/flamingo.dart';
import 'package:flamingo_annotation/flamingo_annotation.dart';
import 'cart_product.dart';

part 'cart.flamingo.dart';

class Cart extends Document<Cart> {
  Cart({
    String id,
    DocumentSnapshot snapshot,
    Map<String, dynamic> values,
  }) : super(id: id, snapshot: snapshot, values: values);

  @ModelField()
  List<CartProduct> products = [];

  @override
  Map<String, dynamic> toData() => _$toData(this);

  @override
  void fromData(Map<String, dynamic> data) => _$fromData(this, data);
}

CartProduct Model

import 'package:flamingo/flamingo.dart';
import 'package:flamingo_annotation/flamingo_annotation.dart';
import 'package:{hidden}/models/product.dart';

part 'cart_product.flamingo.dart';

class CartProduct extends Model {
  CartProduct({
    this.product,
    this.quantity,
    Map<String, dynamic> values,
  }) : super(values: values);

  @Field()
  Product product; // This is not going to work

  @Field()
  double quantity;

  @override
  Map<String, dynamic> toData() => _$toData(this);

  @override
  void fromData(Map<String, dynamic> data) => _$fromData(this, data);
}

Product Document

import 'package:flamingo/flamingo.dart';
import 'package:flamingo_annotation/flamingo_annotation.dart';

part 'product.flamingo.dart';

class Product extends Document<Product> {
  Product({
    String id,
    DocumentSnapshot snapshot,
    Map<String, dynamic> values,
  }) : super(id: id, snapshot: snapshot, values: values);

  @Field()
  String name;

  @override
  Map<String, dynamic> toData() => _$toData(this);

  @override
  void fromData(Map<String, dynamic> data) => _$fromData(this, data);
}

I've seen a similar issue #6 but it looks like i am having a different issue.

My goal is to load a Cart with a list of CartProduct that contain the product.