Как перетасовать видео, извлеченные из firebase, в flutter?

#flutter

Вопрос:

я извлек видео из firestore в flutter,но я не могу изменить порядок извлеченных видео каждый раз , когда пользователь открывает мое приложение, может ли кто-нибудь помочь мне в этом? я пробовал многими способами, наконец, я мог думать о том, чтобы извлекать видео из firebase в списке массивов, а затем перетасовывать данные, но я не понимаю, как именно я могу это сделать, если бы кто-нибудь здесь мог мне помочь, это действительно было бы очень большой помощью для меня .

Это мой код здесь

 var videoscollection = FirebaseFirestore.instance.collection('Videos');
 

И в видео.файл для дротиков

 class VideoPage extends StatefulWidget {
 @override
 _VideoPageState createState() => _VideoPageState();
 

}

 class _VideoPageState extends State<VideoPage> {

 Stream mystream;

  initState(){
  super.initState();

  mystream = videoscollection.snapshots();
  }

   buildmusicalbum(){
    return Container(
    width: 60,
    height: 60,
    child: Column(
      children: [
       Container(
        padding: EdgeInsets.all(11.0),
        height: 50,
        width: 50,
        decoration: BoxDecoration(
            gradient: LinearGradient(colors: 
           [Colors.grey[800],Colors.grey[700]]),
            borderRadius: BorderRadius.circular(25)

        ),
        child: ClipRRect(
          borderRadius: BorderRadius.circular(25),
          child: Image(image: 












   NetworkImage(
  'https://i.ytimg.com/vi/Z8oJV_mBY9g/maxresdefault.jpg'),
    fit: BoxFit.cover,),
         ),
       )
     ],
    ),
   );
  }


 likevideo(String id)async {
 String uid;
 DocumentSnapshot doc = await videoscollection.doc(id).get();
 uid = doc.data()['uid'];
 if (doc.data()['likes'].contains(uid)) {
   videoscollection.doc(id).update({
     'likes': FieldValue.arrayRemove([uid])
   }
   );
   } else {
   videoscollection.doc(id).update({
     'likes': FieldValue.arrayUnion([uid])
   }
  );
  }
}
  sharevideo(String video,String id)async{
  var request = await HttpClient().getUrl(Uri.parse(video));
  var response = await request.close();
  Uint8List bytes = await 
  consolidateHttpClientResponseBytes(response);
  await Share.file('Share to', 'Video.mp4', bytes, 'video/mp4');
  DocumentSnapshot doc = await videoscollection.doc(id).get();
   videoscollection.doc(id).update({
   'sharecount': doc.data()['sharecount'] 1
   });
   }
   download(String video,String id)async{


final status = Permission.storage.request();
if(status.isGranted != null){
  final externalDir = await getExternalStorageDirectory();
  final id = await FlutterDownloader.enqueue(url: video,
    savedDir: externalDir.path,
    fileName: "Motivational Quotes and Videos",
    showNotification: true,
    openFileFromNotification: true,


  );
  DocumentSnapshot doc = await videoscollection.doc(id).get();
  videoscollection.doc(id).update({
    'downloadcount': doc.data()['downloadcount'] 1
  });
}else{
  print("permission denied");
}

}

@override
 Widget build(BuildContext context) {
  var size = MediaQuery.of(context).size;
   return Scaffold(
    body: StreamBuilder(
        stream: mystream,
        builder: (context, snapshot) {
         if(!snapshot.hasData){
           return Center(
             child: CircularProgressIndicator(),
           );
         }
         return PageView.builder(
            itemCount: snapshot.data.docs.length,
            controller: PageController(initialPage: 
      0,viewportFraction: 1),
             scrollDirection: Axis.vertical,
            itemBuilder: (context, index) {
              String uid;

              DocumentSnapshot videos = snapshot.data.docs[index];
              uid = videos.data()['uid'];
              return Stack(
                children: [
                  //video
                  VideoPlayerItem(videos.data()['url']),
                  Column(
                    children: [
                      //top section
                      Container(
                        height: 100,
                        child: Row(
                          crossAxisAlignment: 
                        CrossAxisAlignment.end,
                          mainAxisSize: MainAxisSize.min,
                          children: [
                            Text("Motivational Videos", style: 
                       GoogleFonts.pacifico(
                              
                      color: Colors.white,  fontSize: 17),)
                          ],
                        ),
                      ),
                      //middle section
                      Expanded(child: Row(
                        mainAxisSize: MainAxisSize.max,
                        crossAxisAlignment: CrossAxisAlignment.end,
                        children: [
                          Expanded(
                            child: Container(
                              height: 70,
                              padding: EdgeInsets.only(left: 20),
                              child: Column(
                                mainAxisSize: MainAxisSize.min,
                                 crossAxisAlignment: 
                            CrossAxisAlignment.start,
                                
                    
              mainAxisAlignment:MainAxisAlignment.spaceEvenly,
                                children: [

                                  Row(
                                    children: [
                                      Icon(Icons.music_note,size: 
                                  15,color: Colors.white,),
                                      Text(videos.data() 
                                ['songname'],style: 
                                GoogleFonts.pacifico(
                                          color: Colors.white,  
                          fontSize: 15),),
                                    ],
                                  ),
                                ],
                              ),
                            ),
                          ),
                          // Right Section
                          Container(

                            width: 80,

                            margin: EdgeInsets.only(top: 
                      MediaQuery.of(context).size.height/3.3),
                            child: Column(
                              mainAxisAlignment: 
                     MainAxisAlignment.spaceEvenly,
                              children: [
                                Column(
                                  children: [
                                    InkWell(
                                        onTap:()=> 
                     download(videos.data()['url'],videos.data() 
               ['id']),
                                        child: 
                      Icon(Icons.file_download,size: 35,color: 
            Colors.white,)),

                                  ],
                                ),





                                Column(
                                  children: [
                                    InkWell(
                                        onTap: () 
          =>sharevideo(videos.data()['url'],videos.data()['id']),
                                        child: 
          Icon(Icons.reply,size: 35,color: Colors.white,)),

                                  ],
                                ),
                     
                                )
                              ],
                            ),
                          ),
                        ],

                      ),),


                    ],
                  ),
                ],
              );
            }
        );
      }
      ),
   );
  }

}
   class VideoPlayerItem extends StatefulWidget {
    final String url;
    VideoPlayerItem(this.url);
     @override
   _VideoPlayerItemState createState() => _VideoPlayerItemState();
    }

    class _VideoPlayerItemState extends State<VideoPlayerItem> {
    VideoPlayerController videoPlayerController;

    @override
   void initState() {
  super.initState();
  videoPlayerController = VideoPlayerController.network(widget.url)
  ..initialize().then((value) {
    videoPlayerController.play() ;
    videoPlayerController.setLooping(true);
    videoPlayerController.setVolume(1);

  });

}
 @override
 void dispose() {

  super.dispose();
  videoPlayerController.dispose();
}
 @override
 Widget build(BuildContext context) {
  return Container(
  color: Colors.black,
  width: MediaQuery.of(context).size.width,
  height: MediaQuery.of(context).size.height,
 
  );
}
}
 

Пожалуйста, кто-нибудь, помогите мне с этим .

Комментарии:

1. Вы пробовали использовать shuffle метод? Подробная информация

2. я понятия не имею о методе перетасовки

3. Просто перейдите по ссылке, которую я добавил. Это вам поможет

4. спасибо за вашу любезную помощь

5. я пытался использовать этот метод ,но все, что я получаю, — это ошибки, не могли бы вы, пожалуйста, помочь мне с кодом?