【问题标题】:Flutter Getx Stream value changes to Instance after InItFlutter Getx Stream 值在 InIt 后更改为 Instance
【发布时间】:2022-08-19 02:08:47
【问题描述】:

我正在使用 Getx 将流绑定到 userDataModel。初始化时,从 firestore 数据库中打印该值,但稍后该值为 null。

当尝试使用print(_userDataController.userDataModel.value.foodData); 打印值时,它会提示null。

PS:在之前的项目中,我使用了相同的代码。在那里,它仍然有效。

代码如下

用户模型:

  Map? foodData;
  UserDataModel({this.foodData});

  factory UserDataModel.fromMap({dynamic dbData}) {
    return UserDataModel(
      foodData: dbData[\'foodData\'],
    );
  }
}

控制器

class UserDataController extends GetxController {

// ================================= >  Stream READ
  /// Stream User Model
  Rx<UserDataModel> userDataModel = UserDataModel().obs;

  /// Stream
  Stream<UserDataModel> dbStream() {
    return FirebaseFirestore.instance
        .collection(\'Users\')
        .doc(\'user1\')
        .snapshots()
        .map(
      (ds) {
        var _mapData = ds.data();
        print(_mapData); // ONINIT THIS DATA IS PRINTING BUT LATER IT PROMPTS THE ABOVE ERROR

        UserDataModel extractedModel = UserDataModel.fromMap(dbData: _mapData);
        return extractedModel;
      },
    );
  }

  /// FN to bind stream to user model
  void bindStream() {
    userDataModel.bindStream(dbStream());
  }

// ================================= >  OnInIt
  @override
  void onInit() {
    bindStream();
    super.onInit();
  }
}
  • 我在您的代码中没有看到任何错误。消息“Instance of”并不意味着它是一个错误。每当您打印对象时,都会显示此消息。
  • 但是 oninit() 它确实打印了实际值而不是实例。为什么? @emmy-chwan

标签: flutter dart google-cloud-firestore flutter-getx


【解决方案1】:

要了解Instance of '_MapStream&lt;DocumentSnapshot&lt;Map&lt;String, dynamic&gt;&gt;, UserDataModel&gt;' 的内容,请尝试使用foodData.toString()

您收到此提示是因为您没有将响应转换为正确的 DataModel 类。

您必须映射 json to DataModel 类。 为此,您只需将控制台中打印的响应粘贴到https://jsontodart.com/,这将为您准备数据模型类。然后你可以通过iterating访问元素并获取对应的instance variable

供参考参考:

【讨论】:

    猜你喜欢
    • 2011-11-19
    • 2021-12-20
    • 2021-06-07
    • 1970-01-01
    • 2021-05-11
    • 2021-09-18
    • 2021-12-17
    • 2023-01-18
    • 2021-06-30
    相关资源
    最近更新 更多