Проигрыватель Flickvideo щелкните в полноэкранном режиме, затем на 1 секунду установите альбомную ориентацию и снова устIOS

Программируем под IOS
Ответить
Anonymous
 Проигрыватель Flickvideo щелкните в полноэкранном режиме, затем на 1 секунду установите альбомную ориентацию и снова уст

Сообщение Anonymous »

Я хочу показывать видео в виде списка. Я использую видеоплеер Flick. В этом плеере, когда я нажимаю на иконку полноэкранного видео, VideoView переключается в альбомный режим, но через 1 секунду снова переключается в портретный режим. Я удаляю всю ориентацию экрана, а также проверяю и добавляю все проблемы с ориентацией, которые все еще существуют. Ниже приведена проверка кода, и, пожалуйста, прокомментируйте свое решение, я применил все решения из чата GPT, у меня это не работает.
Экран списка видео

Код: Выделить всё

class VideoListScreen extends GetWidget {
final VideoListController vidListController = Get.put(VideoListController());

@override
Widget build(BuildContext context) {
return SafeArea(
child: GetBuilder(
builder: (VideoListController rtc) {
return Scaffold(
body: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(height: 20.h),
Container(
margin: EdgeInsets.symmetric(horizontal: 15.h),
height: 30.h,
child: ListView.separated(
padding: EdgeInsets.zero,
shrinkWrap: true,
scrollDirection: Axis.horizontal,
separatorBuilder: (context, index) => SizedBox(width: 15.w),
itemCount: rtc.authorName.length,
itemBuilder: (context, index) {
final String feeling = rtc.authorName[index];
return GestureDetector(
onTap: () =>  rtc.toggleAuthorSelection(feeling),
child: _buildTabRow(
feeling: feeling,
isSelected: rtc.isAuthorSelected(feeling),
),
);
},
),
),
SizedBox(height: 5.h),
Expanded(
child: ListView.builder(
padding: EdgeInsets.symmetric(
horizontal: 12.h, vertical: 10.h),
itemCount: rtc.displayedVideos.length,
itemBuilder: (context, index) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
margin: EdgeInsets.all(2),
child: ClipRRect(
borderRadius: BorderRadius.circular(10),
child: FlickMultiPlayer(
url: vidListController
.displayedVideos[index].videoUrl,
flickMultiManager: vidListController
.flickMultiManager,
),
),
),
SizedBox(height: 10.h),
Padding(
padding: EdgeInsets.only(left: 4.h),
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
mainAxisAlignment:
MainAxisAlignment.start,
children: [
Text(
rtc.displayedVideos[index].title,
style: CustomTextStyles
.bodyLargeGray5000122,
),
],
),
),
SizedBox(height: 15.h),
],
);
},
),
),
Visibility(
visible: rtc.displayedVideos.length == 0,
child: Container(
height: MediaQuery.of(context).size.height / 1.5,
child: Center(
child: Text(
"No Data Found",
style: CustomTextStyles.titleLargeBluegray80024,
),
),
),
)
],
),
);
},
),
);
}

Widget _buildTabRow({
required String feeling,
required bool isSelected,
}) {
return Container(
padding: EdgeInsets.symmetric(horizontal: 5.h, vertical: 8.h),
decoration: AppDecoration.outlineBlueGray.copyWith(
borderRadius: BorderRadiusStyle.circleBorder30,
color: isSelected ? appTheme.pink50 : Colors.transparent,
),
child: Padding(
padding: EdgeInsets.symmetric(horizontal: 15.h),
child: Text(
feeling.tr,
style: theme.textTheme.titleLarge!.copyWith(
color: appTheme.blueGray90001,
fontSize: 12.fSize,
fontWeight: isSelected ? FontWeight.w600 : FontWeight.w400,
),
),
),
);
}
}

Мультименеджер пролистывания

Код: Выделить всё

import 'package:flick_video_player/flick_video_player.dart';

class FlickMultiManager {
List _flickManagers = [];
FlickManager? _activeManager;
bool _isMute = false;
List get flickManagers =>  _flickManagers;

init(FlickManager flickManager) {
_flickManagers.add(flickManager);
if (_isMute) {
flickManager.flickControlManager?.mute();
} else {
flickManager.flickControlManager?.unmute();
}
if (_flickManagers.length == 1) {
play(flickManager);
}
}

remove(FlickManager flickManager) {
if (_activeManager == flickManager) {
_activeManager = null;
}
flickManager.dispose();
_flickManagers.remove(flickManager);
}

togglePlay(FlickManager flickManager) {
if (_activeManager?.flickVideoManager?.isPlaying == true &&
flickManager == _activeManager) {
pause();
} else {
play(flickManager);
}
}

pause() {
_activeManager?.flickControlManager?.pause();
}

play([FlickManager? flickManager]) {
if (flickManager != null) {
_activeManager?.flickControlManager?.pause();
_activeManager = flickManager;
}

if (_isMute) {
_activeManager?.flickControlManager?.mute();
} else {
_activeManager?.flickControlManager?.unmute();
}

_activeManager?.flickControlManager?.play();
}

toggleMute() {
_activeManager?.flickControlManager?.toggleMute();
_isMute = _activeManager?.flickControlManager?.isMute ?? false;
if (_isMute) {
_flickManagers.forEach((manager) => manager.flickControlManager?.mute());
} else {
_flickManagers
.forEach((manager) => manager.flickControlManager?.unmute());
}
}
}

Менеджер Flickmulti

Код: Выделить всё

class FlickMultiPlayer extends StatefulWidget {
const FlickMultiPlayer(
{Key? key,
required this.url,
required this.flickMultiManager})
: super(key: key);

final String url;
final FlickMultiManager flickMultiManager;

@override
_FlickMultiPlayerState createState() => _FlickMultiPlayerState();
}

class _FlickMultiPlayerState extends State {
late FlickManager flickManager;

@override
void initState() {
flickManager = FlickManager(
videoPlayerController:
VideoPlayerController.networkUrl(Uri.parse(widget.url))
..setLooping(false),
autoPlay: false,
);

widget.flickMultiManager.init(flickManager);

super.initState();
}

void _initializeVideo() {
/*setState(() {
hasError = false;
});*/

}

@override
void dispose() {
widget.flickMultiManager.remove(flickManager);
//flickManager.dispose();

super.dispose();
}

@override
Widget build(BuildContext context) {
return Container(
child: FlickVideoPlayer(
flickManager: flickManager,
flickVideoWithControls: FlickVideoWithControls(
controls: FlickPortraitControls(),
),
flickVideoWithControlsFullscreen: FlickVideoWithControls(
controls: FlickLandscapeControls(),
),
),
);
}

}

Пожалуйста, дайте мне решение этой проблемы или дайте мне альтернативный способ достижения этой функциональности.
Заранее спасибо.

Подробнее здесь: https://stackoverflow.com/questions/793 ... cape-and-a
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»