Flutter:StreamBuilder不使用Firebase返回我的流

时间:2020-01-07 08:04:14

标签: android ios firebase flutter google-cloud-firestore

我正试图退回显示Firebase数据库中建筑数据的卡片。 数据已创建并存储在用户的uid下的数据库中,该用户使用ModalBottomSheet通过应用程序输入了建筑数据。

我正在使用Streamprovider生成一个 building_card.dart (StatelessWidget)模板,其中包含Firebase中的数据,并显示在 building_card_list.dart 文件中,它是一个StatefulWidget,并返回一个ListView.builder,该列表返回 building_card.dart 模板。然后,该BuildingList类在 home_screen.dart 中作为扩展控件的子级显示。

问题是,它从不显示任何内容,并且我尝试了一切从Firebase检索数据并生成卡列表的方法。

以下是我的代码段:

home_screen.dart

class HomeScreen extends StatelessWidget {
  final AuthService authService = AuthService();
  Widget addBuildingSheet(BuildContext context) {
    return AddBuildingSheetCode();
  }

  Widget addProblemPickerSheet(BuildContext context) {
    return AddProblemPickerSheetCode();
  }

  @override
  Widget build(BuildContext context) {
    final FirebaseAuth _auth = FirebaseAuth.instance;

    return StreamProvider<List<BuildingDataModel>>.value(
      value: DatabaseService().buildings,
      child: Scaffold(
        backgroundColor: Color(0xff131517),
        body: SafeArea(
          bottom: false,
          child: Column(
            children: <Widget>[

              Expanded(
                flex: 30,
                child: Row(
                  children: <Widget>[
                    Expanded(child: BuildingList()),

building_card_list.dart

class BuildingList extends StatefulWidget {
  @override
  _BuildingListState createState() => _BuildingListState();
}

class _BuildingListState extends State<BuildingList> {
  @override
  Widget build(BuildContext context) {
    final building = Provider.of<List<BuildingDataModel>>(context) ?? [];

    return ListView.builder(
      itemCount: building.length,
      itemBuilder: (context, index) {
        return BuildingCard(buildings: building[index]);
      },
    );
  }
}

building_card

class BuildingCard extends StatelessWidget {
  final BuildingDataModel buildings;
  BuildingCard({this.buildings});

  final buildingImage = AssetImage('assets/images/building1.png');

  @override
  Widget build(BuildContext context) {
    return Padding(

building_data_model

class BuildingDataModel {
  final String userUid;
  final String buildingName;
  final int buildingRooms;
  final String buildingLocation;
  final String buildingType;
  final String userEmail;

  BuildingDataModel({
    this.buildingName,
    this.buildingRooms,
    this.buildingLocation,
    this.buildingType,
    this.userEmail,
    this.userUid,
  });
}

DatabaseService.buildings

Stream<List<BuildingDataModel>> get buildings {
    return buildingCollection
        .document(uid)
        .collection('buildings')
        .snapshots()
        .map(_buildingListFromSnapshot);
  }

如果您可以提供帮助,我很想知道我在做错什么!如果您需要更多信息,请让我知道... 这是我使用的第一个应用程序,因为我不熟悉使用流提供程序编码和更新用户数据,该提供程序从Firebase接收数据输入,这在过去一周一直是我生存的祸根...

提前谢谢!

0 个答案:

没有答案