У меня есть gridview, который содержит миниатюры для видео. Теперь этот список миниатюр генерируется из потока. Что мне нужно, так это то, что когда пользователь нажимает на любое изображение, конкретное видео должно открываться при просмотре страницы. Я уже добился этого, но тогда видео, открытое в просмотре страницы, не слушает никаких изменений.
Я не уверен, могу ли я использовать один и тот же поток в представлении сетки и в просмотре страницы.
Вот некоторые из моего кода:
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. Однако в этом случае я не хочу размещать просмотр страницы внутри streambuider.
Скриншот ниже, чтобы представить это лучше.