【问题标题】:StreamBuilder data == nullStreamBuilder 数据 == null
【发布时间】:2023-03-03 01:24:01
【问题描述】:
  @override
  Widget build(BuildContext context) {
    final user = Provider.of<User>(context);

    return StreamBuilder<UserData>(
        stream: DatabaseService(uid: user.uid).currentUserData,
        builder: (context, snapshot) {
          print(snapshot.data); // return null

数据库服务类

class DatabaseService {
  final String uid;

  DatabaseService({this.uid});

  //collection reference
  CollectionReference userCollection = Firestore.instance.collection('user');

  //get user data stream
  Stream<UserData> get currentUserData {
    return userCollection.document(uid).snapshots().map(_userDataFromSnapshot);
  }

  //user data from snapshot
  UserData _userDataFromSnapshot(DocumentSnapshot snapshot) {
    return UserData(
      uid: snapshot.data['uid'],
      email: snapshot.data['email'],
      fName: snapshot.data['first_name'],
      lName: snapshot.data['last_name'],
      mobileNumber: snapshot.data['mobile_number'],
      gender: snapshot.data['gender'],
      dob: snapshot.data['date_of_birth'],
    );
  }
}

我期望得到的数据是我调用的对象的实例。 它返回flutter: null

当我在我的练习应用中尝试时,它返回 I/flutter (11395): Instance of 'UserData'

我不知道问题的根源在哪里,请帮忙。我是 Flutter 的新手。

【问题讨论】:

  • 首先,您必须检查数据是否可用..like..builder: (context, snapshot) { if(snapshot.sata != null) { print(snapshot.data); } else {print("no data available");} 希望能解决您的问题..如果对您有用,请回复..
  • 我已经检查了数据是否可用,结果是数据不可用。我想知道,为什么没有数据。我已经在数据库类中获得了流。
  • 嗯,我相信,这是你必须弄清楚的事情..

标签: flutter


【解决方案1】:

当我们使用Streams 时,可能在小部件渲染时尚未获取任何数据。所以我们需要在尝试访问下面的数据之前检查流的状态

if (snapshot.hasError){
  // access error using snapshot.error
}
else{
  // check for stream state
  switch (snapshot.connectionState) {
    case ConnectionState.none:
    case ConnectionState.waiting:
    case ConnectionState.active:         // access snapshot.data in this case 
    case ConnectionState.done:
  }
}

更多参考可以看StreamBuilder的文档

【讨论】:

    猜你喜欢
    • 2020-12-19
    • 2020-07-12
    • 2021-04-19
    • 2021-06-24
    • 2019-10-01
    • 2021-01-28
    • 2020-11-03
    • 2021-12-25
    • 1970-01-01
    相关资源
    最近更新 更多