desktop script console log

This commit is contained in:
wanghongenpin
2024-03-11 22:53:56 +08:00
parent 67d16c761d
commit 672ca2b53d
11 changed files with 450 additions and 284 deletions

View File

@@ -4,7 +4,6 @@ import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:network_proxy/network/bin/server.dart';
import 'package:network_proxy/network/util/crts.dart';
import 'package:network_proxy/ui/mobile/setting/video_player.dart';
import 'package:url_launcher/url_launcher.dart';
class MobileSslWidget extends StatefulWidget {
@@ -56,16 +55,16 @@ class _MobileSslState extends State<MobileSslWidget> {
Widget ios() {
return Column(children: [
if (localizations.localeName != 'zh')
ExpansionTile(
title: Text(localizations.useGuide),
shape: const Border(),
maintainState: true,
children: [
Container(
height: 350, padding: const EdgeInsets.only(left: 15, right: 15), child: const VideoPlayerScreen())
],
),
// if (localizations.localeName != 'zh')
// ExpansionTile(
// title: Text(localizations.useGuide),
// shape: const Border(),
// maintainState: true,
// children: [
// Container(
// height: 350, padding: const EdgeInsets.only(left: 15, right: 15), child: const VideoPlayerScreen())
// ],
// ),
ExpansionTile(
title: Text(localizations.installRootCa),
initiallyExpanded: true,

View File

@@ -1,167 +1,167 @@
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:video_player/video_player.dart';
void main() => runApp(const VideoPlayerApp());
class VideoPlayerApp extends StatelessWidget {
const VideoPlayerApp({super.key});
@override
Widget build(BuildContext context) {
return const MaterialApp(
title: 'Video Player Demo',
home: VideoPlayerScreen(),
);
}
}
class VideoPlayerScreen extends StatefulWidget {
const VideoPlayerScreen({super.key});
@override
State<VideoPlayerScreen> createState() => _VideoPlayerScreenState();
}
class _VideoPlayerScreenState extends State<VideoPlayerScreen> {
late VideoPlayerController _controller;
late Future<void> _initializeVideoPlayerFuture;
@override
void initState() {
super.initState();
_controller = VideoPlayerController.network(
'https://github.com/wanghongenpin/network_proxy_flutter/assets/24794200/38bc5a83-999f-4af2-9d74-863532a81cef',
videoPlayerOptions: VideoPlayerOptions(mixWithOthers: true, allowBackgroundPlayback: true),
);
_initializeVideoPlayerFuture = _controller.initialize();
_initializeVideoPlayerFuture.whenComplete(() {
final MediaQueryData data = MediaQuery.of(context);
EdgeInsets paddingSafeArea = data.padding;
double widthScreen = data.size.width;
_controller.setPictureInPictureOverlayRect(
rect: Rect.fromLTWH(0, paddingSafeArea.top, widthScreen, 9 * widthScreen / 16));
// _controller.setAutomaticallyStartPictureInPicture(enableStartPictureInPictureAutomaticallyFromInline: true);
});
_controller.addListener(() {
setState(() {});
});
}
@override
void dispose() {
// Ensure disposing of the VideoPlayerController to free up resources.
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: _initializeVideoPlayerFuture,
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
return AspectRatio(
aspectRatio: _controller.value.aspectRatio,
// Use the VideoPlayer widget to display the video.
child: Stack(alignment: Alignment.bottomCenter, children: [
VideoPlayer(_controller),
_ControlsOverlay(controller: _controller),
VideoProgressIndicator(
_controller,
allowScrubbing: true,
),
]),
);
} else {
// If the VideoPlayerController is still initializing, show a
// loading spinner.
return const Center(
child: CircularProgressIndicator(),
);
}
},
);
}
}
class _ControlsOverlay extends StatelessWidget {
const _ControlsOverlay({required this.controller});
static const List<double> _playbackRates = <double>[
0.25,
0.5,
1.0,
1.5,
2.0,
];
final VideoPlayerController controller;
@override
Widget build(BuildContext context) {
return Stack(
children: <Widget>[
AnimatedSwitcher(
duration: const Duration(milliseconds: 50),
reverseDuration: const Duration(milliseconds: 200),
child: controller.value.isPlaying
? const SizedBox.shrink()
: Container(
color: Colors.black26,
child: const Center(
child: Icon(
Icons.play_arrow,
color: Colors.white,
size: 80.0,
semanticLabel: 'Play',
),
),
),
),
GestureDetector(
onTap: () {
controller.value.isPlaying ? controller.pause() : controller.play();
},
),
Align(
alignment: Alignment.topRight,
child: IconButton(
onPressed: () async {
controller.startPictureInPicture();
},
icon: const Icon(Icons.picture_in_picture),
)),
Align(
alignment: Alignment.bottomRight,
child: PopupMenuButton<double>(
initialValue: controller.value.playbackSpeed,
tooltip: 'Playback speed',
onSelected: (double speed) {
controller.setPlaybackSpeed(speed);
},
itemBuilder: (BuildContext context) {
return <PopupMenuItem<double>>[
for (final double speed in _playbackRates)
PopupMenuItem<double>(
value: speed,
child: Text('${speed}x'),
)
];
},
child: Padding(
padding: const EdgeInsets.symmetric(
vertical: 15,
horizontal: 16,
),
child: Text('${controller.value.playbackSpeed}x', style: const TextStyle(color: Colors.white)),
),
),
),
],
);
}
}
// import 'dart:async';
//
// import 'package:flutter/material.dart';
// import 'package:video_player/video_player.dart';
//
// void main() => runApp(const VideoPlayerApp());
//
// class VideoPlayerApp extends StatelessWidget {
// const VideoPlayerApp({super.key});
//
// @override
// Widget build(BuildContext context) {
// return const MaterialApp(
// title: 'Video Player Demo',
// home: VideoPlayerScreen(),
// );
// }
// }
//
// class VideoPlayerScreen extends StatefulWidget {
// const VideoPlayerScreen({super.key});
//
// @override
// State<VideoPlayerScreen> createState() => _VideoPlayerScreenState();
// }
//
// class _VideoPlayerScreenState extends State<VideoPlayerScreen> {
// late VideoPlayerController _controller;
// late Future<void> _initializeVideoPlayerFuture;
//
// @override
// void initState() {
// super.initState();
//
// _controller = VideoPlayerController.network(
// 'https://github.com/wanghongenpin/network_proxy_flutter/assets/24794200/38bc5a83-999f-4af2-9d74-863532a81cef',
// videoPlayerOptions: VideoPlayerOptions(mixWithOthers: true, allowBackgroundPlayback: true),
// );
// _initializeVideoPlayerFuture = _controller.initialize();
// _initializeVideoPlayerFuture.whenComplete(() {
// final MediaQueryData data = MediaQuery.of(context);
//
// EdgeInsets paddingSafeArea = data.padding;
// double widthScreen = data.size.width;
// _controller.setPictureInPictureOverlayRect(
// rect: Rect.fromLTWH(0, paddingSafeArea.top, widthScreen, 9 * widthScreen / 16));
// // _controller.setAutomaticallyStartPictureInPicture(enableStartPictureInPictureAutomaticallyFromInline: true);
// });
// _controller.addListener(() {
// setState(() {});
// });
// }
//
// @override
// void dispose() {
// // Ensure disposing of the VideoPlayerController to free up resources.
// _controller.dispose();
// super.dispose();
// }
//
// @override
// Widget build(BuildContext context) {
// return FutureBuilder(
// future: _initializeVideoPlayerFuture,
// builder: (context, snapshot) {
// if (snapshot.connectionState == ConnectionState.done) {
// return AspectRatio(
// aspectRatio: _controller.value.aspectRatio,
// // Use the VideoPlayer widget to display the video.
// child: Stack(alignment: Alignment.bottomCenter, children: [
// VideoPlayer(_controller),
// _ControlsOverlay(controller: _controller),
// VideoProgressIndicator(
// _controller,
// allowScrubbing: true,
// ),
// ]),
// );
// } else {
// // If the VideoPlayerController is still initializing, show a
// // loading spinner.
// return const Center(
// child: CircularProgressIndicator(),
// );
// }
// },
// );
// }
// }
//
// class _ControlsOverlay extends StatelessWidget {
// const _ControlsOverlay({required this.controller});
//
// static const List<double> _playbackRates = <double>[
// 0.25,
// 0.5,
// 1.0,
// 1.5,
// 2.0,
// ];
//
// final VideoPlayerController controller;
//
// @override
// Widget build(BuildContext context) {
// return Stack(
// children: <Widget>[
// AnimatedSwitcher(
// duration: const Duration(milliseconds: 50),
// reverseDuration: const Duration(milliseconds: 200),
// child: controller.value.isPlaying
// ? const SizedBox.shrink()
// : Container(
// color: Colors.black26,
// child: const Center(
// child: Icon(
// Icons.play_arrow,
// color: Colors.white,
// size: 80.0,
// semanticLabel: 'Play',
// ),
// ),
// ),
// ),
// GestureDetector(
// onTap: () {
// controller.value.isPlaying ? controller.pause() : controller.play();
// },
// ),
// Align(
// alignment: Alignment.topRight,
// child: IconButton(
// onPressed: () async {
// controller.startPictureInPicture();
// },
// icon: const Icon(Icons.picture_in_picture),
// )),
// Align(
// alignment: Alignment.bottomRight,
// child: PopupMenuButton<double>(
// initialValue: controller.value.playbackSpeed,
// tooltip: 'Playback speed',
// onSelected: (double speed) {
// controller.setPlaybackSpeed(speed);
// },
// itemBuilder: (BuildContext context) {
// return <PopupMenuItem<double>>[
// for (final double speed in _playbackRates)
// PopupMenuItem<double>(
// value: speed,
// child: Text('${speed}x'),
// )
// ];
// },
// child: Padding(
// padding: const EdgeInsets.symmetric(
// vertical: 15,
// horizontal: 16,
// ),
// child: Text('${controller.value.playbackSpeed}x', style: const TextStyle(color: Colors.white)),
// ),
// ),
// ),
// ],
// );
// }
// }