Тайна флаттера: проблемы с объединением флаттера плеера Youtube и скроллера Tik Tok LIke
Я использую библиотеку, которая принимает список виджетов и позволяет вам переходить от одного виджета к другому в системе смахивания типа Tik Tok. В виджетах, которые я пытаюсь перебрать, есть видеоролики Youtube.
Моя проблема в том, что он позволит мне провести к индексу 1, тогда похоже, что он собирается индексировать 2. Однако сразу после того, как он зафиксируется в позиции, загружается видео youtube из индекса 1. Я потратил около 9 часов, пытаясь понять это, и решил, что пришло время попросить о помощи, ха-ха.
Ниже приведены ссылки на две библиотеки, которые я использовал, а внизу - мой код. Я объединил несколько файлов, чтобы склеить их все вместе.
https://github.com/dmt195/tiktok-flutter-plugin/blob/master/lib/tiktoklikescroller.dart
https://github.com/sarbagyastha/youtube_player_flutter
Еще одна странная вещь, о которой я, вероятно, должен упомянуть, это то, что я заставил ее работать около часа сегодня днем, но так и не сохранил копию. Надеюсь, я усвоил урок в этом отношении.
Заранее благодарим всех, кто решает эту проблему!
import 'package:flutter/material.dart';
import 'package:youtube_player_flutter/youtube_player_flutter.dart';
import 'package:tiktoklikescroller/tiktoklikescroller.dart';
class Lv7 extends StatefulWidget {
final YoutubePlayerController thecontroller;
Lv7(this.thecontroller);
@override
_Lv7State createState() => _Lv7State();
}
class _Lv7State extends State<Lv7> {
Widget trainScreen;
@override
Widget build(BuildContext context) {
trainScreen = Stack(
children: [
Container(
decoration: BoxDecoration(
color: Color.fromRGBO(0, 0, 0, 0),
),
),
Column(
children: [
YoutubePlayer(
controller: widget.thecontroller,
showVideoProgressIndicator: true,
controlsTimeOut: Duration(minutes: 1),
),
],
),
],
);
return trainScreen;
}
}
final upNext = [
youtube(
'nm8QQO4nDJc',
7,
),
youtube(
'N3W3o8ijb7M',
7,
),
youtube(
'JzHqrk9uKso',
7,
),
];
youtube(videoCode, phase) {
YoutubePlayerController thecontroller = YoutubePlayerController(
initialVideoId: videoCode,
flags: const YoutubePlayerFlags(
mute: false,
autoPlay: false,
disableDragSeek: false,
loop: false,
isLive: false,
forceHD: false,
enableCaption: true,
),
);
if (phase == 7) {
return Lv7(thecontroller);
}
}
class Train extends StatefulWidget {
@override
_TrainState createState() => _TrainState();
}
class _TrainState extends State<Train> {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
backgroundColor: Colors.black,
body: Stack(
children: [
TikTokStyleFullPageScroller(
contentSize: upNext.length,
swipeThreshold: 0.2,
swipeVelocityThreshold: 2000,
animationDuration: const Duration(milliseconds: 300),
builder: (BuildContext context, int index) {
print(index);
return upNext[index];
},
),
],
),
),
);
}
}