我有一个包含视频缩略图的网格视图。现在这个缩略图列表是从流中生成的。我需要的是,当用户点击任何图像时,特定视频应该在网页浏览中打开。我已经实现了这一点,但是在综合浏览量中打开的视频没有听取任何更改。
我不确定是否可以在 gridview 和 pageview 中使用相同的流。
这是我的一些代码:
StreamBuilder(
stream: Firestore.instance
.collection("videos")
.where("userKey", isEqualTo: userKey)
.where("isActive", isEqualTo: true)
.snapshots(),
builder:
(context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (snapshot.hasData) {
videos = snapshot.data.documents
.map((doc) =>
Video.fromMap(doc.data, doc.documentID))
.toList();
return videos != null && videos.length > 0
? Stack(
children: <Widget>[
GridView.builder(
gridDelegate:
SliverGridDelegateWithFixedCrossAxisCount(
childAspectRatio:
MediaQuery.of(context)
.size
.width /
(MediaQuery.of(context)
.size
.height /
1.4),
crossAxisCount: 3),
itemCount: videos.length,
// padding: EdgeInsets.all(8.0),
itemBuilder:
(BuildContext context, int index) {
return Padding(
padding:
const EdgeInsets.all(1.0),
child: GestureDetector(
onLongPress: () {
Get.defaultDialog(
title: "Delete Video ?",
onConfirm: () async {
await DeleteVideo(
videos[index].id);
Get.back();
},
textConfirm: "Yes",
textCancel: "No",
confirmTextColor:
Colors.white,
cancelTextColor:
Colors.black,
buttonColor: Colors.red
.withOpacity(0.7),
backgroundColor:
Colors.white,
middleText:
"Do you want to delete this video ?");
},
onTap: () {
_pageController =
PageController(
initialPage: index);
currentlyPlayingVideoKey =
videos[index].id;
Get.dialog(
setupAlertDialoadContainer());
// opens a complete new window for each video
//Get.to(ProfileSingleVideo(
//videoKey:
//videos[index].id,
//goBackForMusic: true));
},
Widget setupAlertDialoadContainer(String page) {
showModalBottomSheet(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.vertical(top: Radius.circular(25.0)),
),
context: context,
isScrollControlled: true,
builder: (context) => Container(
child: new PageView.builder(
controller: _pageController,
itemCount: videos.length,
scrollDirection: Axis.vertical,
pageSnapping: true,
reverse: false,
onPageChanged: (page) {
setState(() {
currentlyPlayingVideoKey = videos[page].id;
});
},
itemBuilder: (context, position) {
return pageViewContent(video: videos[position]);
}),
));
}
}
同样,我可以在页面浏览中打开视频并跳转到我想要点击的视频。但是,视频不会听取我在网页浏览中打开视频时所做的更改。例如,喜欢该视频不会增加其计数器,尽管喜欢在其他页面浏览量直接放置在 Streambuilder 内的屏幕中确实有效。在这种情况下,我不想将 pageview 放在 streambuider 中。
下面的截图可以更好地想象它。