Я получаю данные из коллекции firebase на страницу, но страница не возвращает никаких данных. Ошибок нет, но я не получаю никаких данных. Страница застревает на круговом индикаторе выполнения (я назначил циклический прогресс оператору if
, когда нет данных).
Вот код (примечание: shopRef
объявлен на домашней странице):
class Live extends StatefulWidget {
@override
_LiveState createState() => _LiveState();
}
class _LiveState extends State<Live> {
getProducts()async {
QuerySnapshot snapshot = await shopRef
.orderBy('timestamp', descending: true).getDocuments();
List<ShopItem> shopItems = [];
snapshot.documents.forEach((doc) {
shopItems.add(ShopItem.fromDocument(doc));
});
return shopItems;
}
@override
Widget build(BuildContext context) {
return Scaffold(appBar: AppBar(backgroundColor: kPrimaryColor,
title: Text( 'FASHOWtv',
style: TextStyle(
fontFamily :"MajorMonoDisplay",
fontSize: 35.0 ,
color: Colors.white),),
iconTheme: new IconThemeData(color: kSecondaryColor),
),
backgroundColor: kSecondaryColor,
body: Container(
child: FutureBuilder(
future: getProducts(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return circularProgress();
}
return Column(
children: snapshot.data,
);
},
),
),
floatingActionButton: FloatingActionButton(
backgroundColor: Colors.black38,
onPressed: () { Navigator.push(context, MaterialPageRoute(builder: (context) =>WalletPage()));
},
child: Icon(Icons.add_to_queue),
),
);
}
}
Widget shopmediaPreview;
class ShopItem extends StatelessWidget {
final String username;
final String prodId;
final String ownerId;
final String photoUrl;
final String shopmediaUrl;
final String productname;
final String price;
final String userId;
ShopItem({
this.ownerId,
this.prodId,
this.shopmediaUrl,
this.username,
this.photoUrl,
this.price,
this.productname,
this.userId,
});
factory ShopItem.fromDocument(DocumentSnapshot doc) {
return ShopItem(
username: doc['username'],
price: doc['price'],
productname: doc['productname'],
shopmediaUrl: doc['shopmediaUrl'],
userId: doc['userId'],
prodId: doc['prodId'],
ownerId: doc['ownerId'],
photoUrl: doc['photoUrl'],
);
}
showProduct(context) {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => ProductScreen(
prodId: prodId,
userId: ownerId,
),
),
);
}
configureshopmediaPreview(context){
shopmediaPreview = GFButton(
onPressed: () => showProduct(context) ,
text: "More",
icon: Icon(Icons.card_travel),
shape: GFButtonShape.pills,
);
}
@override
Widget build(BuildContext context) {
configureshopmediaPreview(context);
return Container(
height: 500,
margin: EdgeInsets.only(
top: 1.0, left: 10.0, right: 10.0, bottom: 1.0),
child: Column( children: <Widget>[
SizedBox( height:1.0,),
Stack(
children: <Widget>[
Container(
child:Row(
children: <Widget>[
Expanded(
child: Container(
// width: 360,
height: 400.0,
child:AspectRatio(
aspectRatio: 16 / 9,
child: Container(
decoration: BoxDecoration(
image: DecorationImage(
fit: BoxFit.cover,
image: CachedNetworkImageProvider(shopmediaUrl),
)),
),
),
),
),
],
),
),
Expanded(
child: Positioned(
bottom: 10,
left: 10,
child: GestureDetector(
onTap: showProfile(context, profileId: userId),
child: Container(
height: 40,
width: 40,
child: CircleAvatar(
backgroundImage: CachedNetworkImageProvider(shopmediaUrl),
),
),
),
),
),
Expanded(
child: Positioned(
bottom: 20,
left: 60,
child: Container(
child: Text(username,style: TextStyle(color: Colors.white,fontWeight:FontWeight.bold),),
),
),
),
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [shopmediaPreview],
),
],
),
Row(
children: <Widget>[
Container(
child: Text(productname,style: TextStyle(color: kText,fontSize: 30.0,fontWeight:FontWeight.bold),),
),
],
),
Row(
children: <Widget>[
Container( child: Text('₹',style: TextStyle(color: kText,)),
),
Container(
child: Text(price,style: TextStyle(color: kText,fontSize: 20.0,fontWeight:FontWeight.bold),),
),
],
),
Divider(color: kGrey,),
],
),
);
}
}
showProfile(BuildContext context, {String profileId}) {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => Profile(
profileId: profileId,
)));
}