diff --git a/flutter-exoplayer/flutter_beta_exoplayer_creator/.gitignore b/flutter-exoplayer/flutter_beta_exoplayer_creator/.gitignore
deleted file mode 100644
index 79c113f..0000000
--- a/flutter-exoplayer/flutter_beta_exoplayer_creator/.gitignore
+++ /dev/null
@@ -1,45 +0,0 @@
-# Miscellaneous
-*.class
-*.log
-*.pyc
-*.swp
-.DS_Store
-.atom/
-.build/
-.buildlog/
-.history
-.svn/
-.swiftpm/
-migrate_working_dir/
-
-# IntelliJ related
-*.iml
-*.ipr
-*.iws
-.idea/
-
-# The .vscode folder contains launch configuration and tasks you configure in
-# VS Code which you may wish to be included in version control, so this line
-# is commented out by default.
-#.vscode/
-
-# Flutter/Dart/Pub related
-**/doc/api/
-**/ios/Flutter/.last_build_id
-.dart_tool/
-.flutter-plugins
-.flutter-plugins-dependencies
-.pub-cache/
-.pub/
-/build/
-
-# Symbolication related
-app.*.symbols
-
-# Obfuscation related
-app.*.map.json
-
-# Android Studio will place build artifacts here
-/android/app/debug
-/android/app/profile
-/android/app/release
diff --git a/flutter-exoplayer/flutter_beta_exoplayer_creator/.metadata b/flutter-exoplayer/flutter_beta_exoplayer_creator/.metadata
deleted file mode 100644
index 52db189..0000000
--- a/flutter-exoplayer/flutter_beta_exoplayer_creator/.metadata
+++ /dev/null
@@ -1,30 +0,0 @@
-# This file tracks properties of this Flutter project.
-# Used by Flutter tool to assess capabilities and perform upgrades etc.
-#
-# This file should be version controlled and should not be manually edited.
-
-version:
- revision: "8495dee1fd4aacbe9de707e7581203232f591b2f"
- channel: "stable"
-
-project_type: app
-
-# Tracks metadata for the flutter migrate command
-migration:
- platforms:
- - platform: root
- create_revision: 8495dee1fd4aacbe9de707e7581203232f591b2f
- base_revision: 8495dee1fd4aacbe9de707e7581203232f591b2f
- - platform: android
- create_revision: 8495dee1fd4aacbe9de707e7581203232f591b2f
- base_revision: 8495dee1fd4aacbe9de707e7581203232f591b2f
-
- # User provided section
-
- # List of Local paths (relative to this file) that should be
- # ignored by the migrate tool.
- #
- # Files that are not part of the templates will be ignored by default.
- unmanaged_files:
- - 'lib/main.dart'
- - 'ios/Runner.xcodeproj/project.pbxproj'
diff --git a/flutter-exoplayer/flutter_beta_exoplayer_creator/README.md b/flutter-exoplayer/flutter_beta_exoplayer_creator/README.md
deleted file mode 100644
index 11ac461..0000000
--- a/flutter-exoplayer/flutter_beta_exoplayer_creator/README.md
+++ /dev/null
@@ -1,16 +0,0 @@
-# media3_exoplayer_creator
-
-ExoPlayer Creator that supports Media3
-
-## Getting Started
-
-This project is a starting point for a Flutter application.
-
-A few resources to get you started if this is your first Flutter project:
-
-- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab)
-- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook)
-
-For help getting started with Flutter development, view the
-[online documentation](https://docs.flutter.dev/), which offers tutorials,
-samples, guidance on mobile development, and a full API reference.
diff --git a/flutter-exoplayer/flutter_beta_exoplayer_creator/analysis_options.yaml b/flutter-exoplayer/flutter_beta_exoplayer_creator/analysis_options.yaml
deleted file mode 100644
index 0d29021..0000000
--- a/flutter-exoplayer/flutter_beta_exoplayer_creator/analysis_options.yaml
+++ /dev/null
@@ -1,28 +0,0 @@
-# This file configures the analyzer, which statically analyzes Dart code to
-# check for errors, warnings, and lints.
-#
-# The issues identified by the analyzer are surfaced in the UI of Dart-enabled
-# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
-# invoked from the command line by running `flutter analyze`.
-
-# The following line activates a set of recommended lints for Flutter apps,
-# packages, and plugins designed to encourage good coding practices.
-include: package:flutter_lints/flutter.yaml
-
-linter:
- # The lint rules applied to this project can be customized in the
- # section below to disable rules from the `package:flutter_lints/flutter.yaml`
- # included above or to enable additional rules. A list of all available lints
- # and their documentation is published at https://dart.dev/lints.
- #
- # Instead of disabling a lint rule for the entire project in the
- # section below, it can also be suppressed for a single line of code
- # or a specific dart file by using the `// ignore: name_of_lint` and
- # `// ignore_for_file: name_of_lint` syntax on the line or in the file
- # producing the lint.
- rules:
- # avoid_print: false # Uncomment to disable the `avoid_print` rule
- # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
-
-# Additional information about this file can be found at
-# https://dart.dev/guides/language/analysis-options
diff --git a/flutter-exoplayer/flutter_beta_exoplayer_creator/android/.gitignore b/flutter-exoplayer/flutter_beta_exoplayer_creator/android/.gitignore
deleted file mode 100644
index 55afd91..0000000
--- a/flutter-exoplayer/flutter_beta_exoplayer_creator/android/.gitignore
+++ /dev/null
@@ -1,13 +0,0 @@
-gradle-wrapper.jar
-/.gradle
-/captures/
-/gradlew
-/gradlew.bat
-/local.properties
-GeneratedPluginRegistrant.java
-
-# Remember to never publicly share your keystore.
-# See https://flutter.dev/to/reference-keystore
-key.properties
-**/*.keystore
-**/*.jks
diff --git a/flutter-exoplayer/flutter_beta_exoplayer_creator/android/app/build.gradle b/flutter-exoplayer/flutter_beta_exoplayer_creator/android/app/build.gradle
deleted file mode 100644
index f1c79d5..0000000
--- a/flutter-exoplayer/flutter_beta_exoplayer_creator/android/app/build.gradle
+++ /dev/null
@@ -1,44 +0,0 @@
-plugins {
- id "com.android.application"
- id "kotlin-android"
- // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.
- id "dev.flutter.flutter-gradle-plugin"
-}
-
-android {
- namespace = "com.anirudhsevugan.md3exoplayer.media3_exoplayer_creator"
- compileSdk = flutter.compileSdkVersion
- ndkVersion = flutter.ndkVersion
-
- compileOptions {
- sourceCompatibility = JavaVersion.VERSION_1_8
- targetCompatibility = JavaVersion.VERSION_1_8
- }
-
- kotlinOptions {
- jvmTarget = JavaVersion.VERSION_1_8
- }
-
- defaultConfig {
- // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
- applicationId = "com.anirudhsevugan.md3exoplayer.media3_exoplayer_creator"
- // You can update the following values to match your application needs.
- // For more information, see: https://flutter.dev/to/review-gradle-config.
- minSdk = flutter.minSdkVersion
- targetSdk = flutter.targetSdkVersion
- versionCode = flutter.versionCode
- versionName = flutter.versionName
- }
-
- buildTypes {
- release {
- // TODO: Add your own signing config for the release build.
- // Signing with the debug keys for now, so `flutter run --release` works.
- signingConfig = signingConfigs.debug
- }
- }
-}
-
-flutter {
- source = "../.."
-}
diff --git a/flutter-exoplayer/flutter_beta_exoplayer_creator/android/app/src/debug/AndroidManifest.xml b/flutter-exoplayer/flutter_beta_exoplayer_creator/android/app/src/debug/AndroidManifest.xml
deleted file mode 100644
index 399f698..0000000
--- a/flutter-exoplayer/flutter_beta_exoplayer_creator/android/app/src/debug/AndroidManifest.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
diff --git a/flutter-exoplayer/flutter_beta_exoplayer_creator/android/app/src/main/AndroidManifest.xml b/flutter-exoplayer/flutter_beta_exoplayer_creator/android/app/src/main/AndroidManifest.xml
deleted file mode 100644
index 7fe6dc0..0000000
--- a/flutter-exoplayer/flutter_beta_exoplayer_creator/android/app/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/flutter-exoplayer/flutter_beta_exoplayer_creator/android/app/src/main/kotlin/com/anirudhsevugan/md3exoplayer/media3_exoplayer_creator/MainActivity.kt b/flutter-exoplayer/flutter_beta_exoplayer_creator/android/app/src/main/kotlin/com/anirudhsevugan/md3exoplayer/media3_exoplayer_creator/MainActivity.kt
deleted file mode 100644
index 155d6b9..0000000
--- a/flutter-exoplayer/flutter_beta_exoplayer_creator/android/app/src/main/kotlin/com/anirudhsevugan/md3exoplayer/media3_exoplayer_creator/MainActivity.kt
+++ /dev/null
@@ -1,5 +0,0 @@
-package com.anirudhsevugan.md3exoplayer.media3_exoplayer_creator
-
-import io.flutter.embedding.android.FlutterActivity
-
-class MainActivity: FlutterActivity()
diff --git a/flutter-exoplayer/flutter_beta_exoplayer_creator/android/app/src/main/res/drawable-v21/launch_background.xml b/flutter-exoplayer/flutter_beta_exoplayer_creator/android/app/src/main/res/drawable-v21/launch_background.xml
deleted file mode 100644
index f74085f..0000000
--- a/flutter-exoplayer/flutter_beta_exoplayer_creator/android/app/src/main/res/drawable-v21/launch_background.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/flutter-exoplayer/flutter_beta_exoplayer_creator/android/app/src/main/res/drawable/launch_background.xml b/flutter-exoplayer/flutter_beta_exoplayer_creator/android/app/src/main/res/drawable/launch_background.xml
deleted file mode 100644
index 304732f..0000000
--- a/flutter-exoplayer/flutter_beta_exoplayer_creator/android/app/src/main/res/drawable/launch_background.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/flutter-exoplayer/flutter_beta_exoplayer_creator/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/flutter-exoplayer/flutter_beta_exoplayer_creator/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
deleted file mode 100644
index db77bb4..0000000
Binary files a/flutter-exoplayer/flutter_beta_exoplayer_creator/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and /dev/null differ
diff --git a/flutter-exoplayer/flutter_beta_exoplayer_creator/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/flutter-exoplayer/flutter_beta_exoplayer_creator/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
deleted file mode 100644
index 17987b7..0000000
Binary files a/flutter-exoplayer/flutter_beta_exoplayer_creator/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and /dev/null differ
diff --git a/flutter-exoplayer/flutter_beta_exoplayer_creator/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/flutter-exoplayer/flutter_beta_exoplayer_creator/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
deleted file mode 100644
index 09d4391..0000000
Binary files a/flutter-exoplayer/flutter_beta_exoplayer_creator/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ
diff --git a/flutter-exoplayer/flutter_beta_exoplayer_creator/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/flutter-exoplayer/flutter_beta_exoplayer_creator/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
deleted file mode 100644
index d5f1c8d..0000000
Binary files a/flutter-exoplayer/flutter_beta_exoplayer_creator/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ
diff --git a/flutter-exoplayer/flutter_beta_exoplayer_creator/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/flutter-exoplayer/flutter_beta_exoplayer_creator/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
deleted file mode 100644
index 4d6372e..0000000
Binary files a/flutter-exoplayer/flutter_beta_exoplayer_creator/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ
diff --git a/flutter-exoplayer/flutter_beta_exoplayer_creator/android/app/src/main/res/values-night/styles.xml b/flutter-exoplayer/flutter_beta_exoplayer_creator/android/app/src/main/res/values-night/styles.xml
deleted file mode 100644
index 06952be..0000000
--- a/flutter-exoplayer/flutter_beta_exoplayer_creator/android/app/src/main/res/values-night/styles.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
diff --git a/flutter-exoplayer/flutter_beta_exoplayer_creator/android/app/src/main/res/values/styles.xml b/flutter-exoplayer/flutter_beta_exoplayer_creator/android/app/src/main/res/values/styles.xml
deleted file mode 100644
index cb1ef88..0000000
--- a/flutter-exoplayer/flutter_beta_exoplayer_creator/android/app/src/main/res/values/styles.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
diff --git a/flutter-exoplayer/flutter_beta_exoplayer_creator/android/app/src/profile/AndroidManifest.xml b/flutter-exoplayer/flutter_beta_exoplayer_creator/android/app/src/profile/AndroidManifest.xml
deleted file mode 100644
index 399f698..0000000
--- a/flutter-exoplayer/flutter_beta_exoplayer_creator/android/app/src/profile/AndroidManifest.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
diff --git a/flutter-exoplayer/flutter_beta_exoplayer_creator/android/build.gradle b/flutter-exoplayer/flutter_beta_exoplayer_creator/android/build.gradle
deleted file mode 100644
index d2ffbff..0000000
--- a/flutter-exoplayer/flutter_beta_exoplayer_creator/android/build.gradle
+++ /dev/null
@@ -1,18 +0,0 @@
-allprojects {
- repositories {
- google()
- mavenCentral()
- }
-}
-
-rootProject.buildDir = "../build"
-subprojects {
- project.buildDir = "${rootProject.buildDir}/${project.name}"
-}
-subprojects {
- project.evaluationDependsOn(":app")
-}
-
-tasks.register("clean", Delete) {
- delete rootProject.buildDir
-}
diff --git a/flutter-exoplayer/flutter_beta_exoplayer_creator/android/gradle.properties b/flutter-exoplayer/flutter_beta_exoplayer_creator/android/gradle.properties
deleted file mode 100644
index 2597170..0000000
--- a/flutter-exoplayer/flutter_beta_exoplayer_creator/android/gradle.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError
-android.useAndroidX=true
-android.enableJetifier=true
diff --git a/flutter-exoplayer/flutter_beta_exoplayer_creator/android/gradle/wrapper/gradle-wrapper.properties b/flutter-exoplayer/flutter_beta_exoplayer_creator/android/gradle/wrapper/gradle-wrapper.properties
deleted file mode 100644
index 7bb2df6..0000000
--- a/flutter-exoplayer/flutter_beta_exoplayer_creator/android/gradle/wrapper/gradle-wrapper.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-distributionBase=GRADLE_USER_HOME
-distributionPath=wrapper/dists
-zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip
diff --git a/flutter-exoplayer/flutter_beta_exoplayer_creator/android/settings.gradle b/flutter-exoplayer/flutter_beta_exoplayer_creator/android/settings.gradle
deleted file mode 100644
index a42444d..0000000
--- a/flutter-exoplayer/flutter_beta_exoplayer_creator/android/settings.gradle
+++ /dev/null
@@ -1,25 +0,0 @@
-pluginManagement {
- def flutterSdkPath = {
- def properties = new Properties()
- file("local.properties").withInputStream { properties.load(it) }
- def flutterSdkPath = properties.getProperty("flutter.sdk")
- assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
- return flutterSdkPath
- }()
-
- includeBuild("$flutterSdkPath/packages/flutter_tools/gradle")
-
- repositories {
- google()
- mavenCentral()
- gradlePluginPortal()
- }
-}
-
-plugins {
- id "dev.flutter.flutter-plugin-loader" version "1.0.0"
- id "com.android.application" version "8.2.1" apply false
- id "org.jetbrains.kotlin.android" version "1.8.22" apply false
-}
-
-include ":app"
diff --git a/flutter-exoplayer/flutter_beta_exoplayer_creator/assets/icon.png b/flutter-exoplayer/flutter_beta_exoplayer_creator/assets/icon.png
deleted file mode 100644
index 1a775c8..0000000
Binary files a/flutter-exoplayer/flutter_beta_exoplayer_creator/assets/icon.png and /dev/null differ
diff --git a/flutter-exoplayer/flutter_beta_exoplayer_creator/lib/main.dart b/flutter-exoplayer/flutter_beta_exoplayer_creator/lib/main.dart
deleted file mode 100644
index b49f2b5..0000000
--- a/flutter-exoplayer/flutter_beta_exoplayer_creator/lib/main.dart
+++ /dev/null
@@ -1,107 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:media3_exoplayer_creator/screens/video_screen.dart'; // Import other files as needed
-
-void main() {
- runApp(MyApp());
-}
-
-class MyApp extends StatefulWidget {
- const MyApp({super.key});
-
- @override
- State createState() => _MyAppState();
-}
-
-class _MyAppState extends State {
- bool _isDarkMode = false;
-
- void _toggleTheme() {
- setState(() {
- _isDarkMode = !_isDarkMode;
- });
- }
-
- @override
- Widget build(BuildContext context) {
- return MaterialApp(
- debugShowCheckedModeBanner: false,
- theme: _isDarkMode
- ? ThemeData.dark().copyWith(
- primaryColor: Colors.lightBlue, // Light Blue primary color
- colorScheme: ColorScheme.fromSwatch(primarySwatch: Colors.lightBlue)
- .copyWith(secondary: Colors.lightBlue),
- appBarTheme: AppBarTheme(
- color: Colors.lightBlue,
- titleTextStyle: TextStyle(
- color: Colors.white,
- fontSize: 20,
- fontWeight: FontWeight.bold,
- ),
- ),
- textButtonTheme: TextButtonThemeData(
- style: TextButton.styleFrom(
- foregroundColor: Colors.lightBlue, // Light Blue for text buttons
- ),
- ),
- inputDecorationTheme: InputDecorationTheme(
- filled: true,
- fillColor: Colors.white,
- border: OutlineInputBorder(
- borderRadius: BorderRadius.circular(8),
- borderSide: BorderSide(
- color: Colors.lightBlue, // Light Blue for borders
- width: 2,
- ),
- ),
- focusedBorder: OutlineInputBorder(
- borderRadius: BorderRadius.circular(8),
- borderSide: BorderSide(
- color: Colors.lightBlue, // Light Blue for focused border
- width: 2,
- ),
- ),
- ),
- )
- : ThemeData.light().copyWith(
- primaryColor: Colors.lightBlue, // Light Blue primary color
- scaffoldBackgroundColor: Colors.white,
- colorScheme: ColorScheme.fromSwatch(primarySwatch: Colors.lightBlue)
- .copyWith(secondary: Colors.lightBlue),
- appBarTheme: AppBarTheme(
- color: Colors.lightBlue,
- titleTextStyle: TextStyle(
- color: Colors.white,
- fontSize: 20,
- fontWeight: FontWeight.bold,
- ),
- ),
- textButtonTheme: TextButtonThemeData(
- style: TextButton.styleFrom(
- foregroundColor: Colors.lightBlue, // Light Blue for text buttons
- ),
- ),
- inputDecorationTheme: InputDecorationTheme(
- filled: true,
- fillColor: Colors.white,
- border: OutlineInputBorder(
- borderRadius: BorderRadius.circular(8),
- borderSide: BorderSide(
- color: Colors.lightBlue, // Light Blue for borders
- width: 2,
- ),
- ),
- focusedBorder: OutlineInputBorder(
- borderRadius: BorderRadius.circular(8),
- borderSide: BorderSide(
- color: Colors.lightBlue, // Light Blue for focused border
- width: 2,
- ),
- ),
- ),
- ),
- home: Scaffold(
- body: VideoScreen(),
- ),
- );
- }
-}
diff --git a/flutter-exoplayer/flutter_beta_exoplayer_creator/lib/screens/video_screen.dart b/flutter-exoplayer/flutter_beta_exoplayer_creator/lib/screens/video_screen.dart
deleted file mode 100644
index 241dc12..0000000
--- a/flutter-exoplayer/flutter_beta_exoplayer_creator/lib/screens/video_screen.dart
+++ /dev/null
@@ -1,339 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:file_picker/file_picker.dart';
-import '../widgets/video_player_widget.dart';
-
-class VideoScreen extends StatefulWidget {
- const VideoScreen({super.key});
-
- @override
- _VideoScreenState createState() => _VideoScreenState();
-}
-
-class _VideoScreenState extends State {
- String _videoUrl = '';
- String _filePath = '';
- String _subtitleUrl = '';
- String _subtitleFilePath = '';
- final bool _isDarkMode = false; // Store the manual theme preference
-
- // Function to pick the file after choosing the type
- Future _pickFile(FileType type) async {
- FilePickerResult? result = await FilePicker.platform.pickFiles(
- type: type, // File type selected by user
- );
-
- if (result != null && result.files.single.path != null) {
- setState(() {
- _filePath = result.files.single.path!;
- _videoUrl = ''; // Clear video URL if file is picked
- });
- }
- }
-
- // Show the dialog to choose file type
- Future _showFileTypeDialog() async {
- return showDialog(
- context: context,
- barrierDismissible: false,
- builder: (BuildContext context) {
- return AlertDialog(
- title: const Text('What kind of file would you like to pick?'),
- actions: [
- TextButton(
- child: const Text('Video'),
- onPressed: () {
- Navigator.of(context).pop();
- _pickFile(FileType.video); // Pick video files
- },
- ),
- TextButton(
- child: const Text('Audio'),
- onPressed: () {
- Navigator.of(context).pop();
- _pickFile(FileType.audio); // Pick audio files
- },
- ),
- TextButton(
- child: const Text('Cancel'),
- onPressed: () => Navigator.of(context).pop(), // Cancel action
- ),
- ],
- );
- },
- );
- }
-
- // Show the dialog to enter video URL
- Future _showVideoURLDialog() async {
- final TextEditingController videoController = TextEditingController();
-
- return showDialog(
- context: context,
- barrierDismissible: false,
- builder: (BuildContext context) {
- return AlertDialog(
- title: const Text('Enter Media URL'),
- content: TextField(
- controller: videoController,
- decoration: const InputDecoration(hintText: 'Enter a valid media URL'),
- keyboardType: TextInputType.url,
- ),
- actions: [
- TextButton(
- child: const Text('Cancel'),
- onPressed: () => Navigator.of(context).pop(),
- ),
- TextButton(
- child: const Text('OK'),
- onPressed: () {
- setState(() {
- _videoUrl = videoController.text;
- _filePath = '';
- });
- Navigator.of(context).pop();
- },
- ),
- ],
- );
- },
- );
- }
-
- // Show the subtitle dialog
- Future _showSubtitleDialog() async {
- final TextEditingController subtitleController = TextEditingController();
-
- return showDialog(
- context: context,
- barrierDismissible: false,
- builder: (BuildContext context) {
- return AlertDialog(
- title: const Text('Enter Subtitle URL'),
- content: TextField(
- controller: subtitleController,
- decoration: const InputDecoration(hintText: 'Enter a valid subtitle URL'),
- keyboardType: TextInputType.url,
- ),
- actions: [
- TextButton(
- child: const Text('Cancel'),
- onPressed: () => Navigator.of(context).pop(),
- ),
- TextButton(
- child: const Text('OK'),
- onPressed: () {
- setState(() {
- _subtitleUrl = subtitleController.text;
- _subtitleFilePath = ''; // Clear file path when URL is used
- });
- Navigator.of(context).pop();
- },
- ),
- ],
- );
- },
- );
- }
-
- // Play the video
- void _playMedia() {
- setState(() {
- // Switch to the VideoPlayerWidget screen
- });
- }
-
- @override
- Widget build(BuildContext context) {
- return WillPopScope(
- onWillPop: _onWillPop, // Custom back button behavior
- child: MaterialApp(
- debugShowCheckedModeBanner: false,
- themeMode: _isDarkMode ? ThemeMode.dark : ThemeMode.system,
- // Respect system theme
- theme: _lightTheme(),
- darkTheme: _darkTheme(),
- home: Scaffold(
- appBar: _videoUrl.isNotEmpty || _filePath.isNotEmpty
- ? null // Hide AppBar when video is playing
- : AppBar(
- title: const Text('SimpliPlay Neo'),
- ),
- body: Center(
- child: _videoUrl.isEmpty && _filePath.isEmpty
- ? SingleChildScrollView(
- child: Column(
- mainAxisAlignment: MainAxisAlignment.center,
- children: [
- // Central Buttons (Enter Video URL, Choose File, Add Subtitle)
- _buildButtonRow(),
- SizedBox(height: 20),
- // Play Button - This only appears if a file or URL is chosen
- ],
- ),
- )
- : WillPopScope(
- onWillPop: () async {
- // Show confirmation dialog before exiting VideoPlayerWidget
- return (await _showExitConfirmation()) ?? false;
- },
- child: VideoPlayerWidget(
- videoUrl: _videoUrl,
- filePath: _filePath,
- subtitleUrl: _subtitleUrl,
- subtitleFilePath: _subtitleFilePath,
- ),
- ),
- ),
- ),
- ),
- );
- }
-
- // Row containing the buttons
- Widget _buildButtonRow() {
- return Row(
- mainAxisAlignment: MainAxisAlignment.center,
- children: [
- _buildCentralButton(
- icon: Icons.link,
- label: 'Enter Media URL',
- onPressed: _showVideoURLDialog,
- ),
- SizedBox(width: 20),
- _buildCentralButton(
- icon: Icons.video_library,
- label: 'Choose File',
- onPressed: _showFileTypeDialog, // Show the file type dialog
- ),
- SizedBox(width: 20),
- _buildCentralButton(
- icon: Icons.subtitles,
- label: 'Enter Subtitle URL',
- onPressed: _showSubtitleDialog,
- ),
- ],
- );
- }
-
- // Central button widget
- Widget _buildCentralButton({
- required IconData icon,
- required String label,
- required VoidCallback onPressed,
- }) {
- return Column(
- children: [
- IconButton(
- icon: Icon(icon, size: 50),
- onPressed: onPressed,
- ),
- Text(label),
- ],
- );
- }
-
- Future _onWillPop() async {
- // If the video is not playing (i.e., file or URL is empty), exit the app
- if (_videoUrl.isEmpty && _filePath.isEmpty) {
- return true; // Exit the app
- }
-
- // If the video is playing, show the confirmation dialog
- return (await _showExitConfirmation()) ?? false;
- }
-
- // Show the exit confirmation dialog
- Future _showExitConfirmation() async {
- return showDialog(
- context: context,
- barrierDismissible: false, // Prevent dismissing by tapping outside the dialog
- builder: (BuildContext context) {
- return AlertDialog(
- title: const Text('Are you sure you want to exit?'),
- actions: [
- TextButton(
- child: const Text('No'),
- onPressed: () {
- Navigator.of(context).pop(false); // Stay on current screen
- },
- ),
- TextButton(
- child: const Text('Yes'),
- onPressed: () {
- Navigator.of(context).pop(true); // Navigate back to VideoScreen
- Navigator.of(context).pushReplacement(
- MaterialPageRoute(builder: (context) => VideoScreen()));
- },
- ),
- ],
- );
- },
- );
- }
-
- // Light theme
- ThemeData _lightTheme() {
- return ThemeData(
- primaryColor: Colors.lightBlue,
- scaffoldBackgroundColor: Colors.white,
- colorScheme: ColorScheme.fromSwatch(primarySwatch: Colors.lightBlue)
- .copyWith(secondary: Colors.lightBlue),
- appBarTheme: AppBarTheme(
- color: Colors.lightBlue,
- titleTextStyle: TextStyle(
- color: Colors.white,
- fontSize: 20,
- fontWeight: FontWeight.bold,
- ),
- ),
- iconTheme: IconThemeData(
- color: Colors.black, // Black icons for light mode
- ),
- textTheme: TextTheme(
- bodyLarge: TextStyle(color: Colors.black),
- bodyMedium: TextStyle(color: Colors.black),
- bodySmall: TextStyle(color: Colors.black),
- ),
- dialogTheme: DialogTheme(
- backgroundColor: Colors.white,
- // White background for dialog in light mode
- titleTextStyle: TextStyle(
- color: Colors.black), // Black text in light mode
- ),
- );
- }
-
- // Dark theme
- ThemeData _darkTheme() {
- return ThemeData(
- primaryColor: Colors.blue,
- // Primary color for the theme
- scaffoldBackgroundColor: Colors.black,
- // Black background for the scaffold
- colorScheme: ColorScheme.fromSwatch(primarySwatch: Colors.blue)
- .copyWith(secondary: Colors.blue),
- appBarTheme: AppBarTheme(
- color: Colors.blue, // Blue AppBar background
- titleTextStyle: TextStyle(
- color: Colors.white, // White text on AppBar
- fontSize: 20,
- fontWeight: FontWeight.bold,
- ),
- ),
- iconTheme: IconThemeData(
- color: Colors.white, // White icons for dark mode
- ),
- textTheme: TextTheme(
- bodyLarge: TextStyle(color: Colors.white),
- bodyMedium: TextStyle(color: Colors.white),
- bodySmall: TextStyle(color: Colors.white),
- ),
- dialogTheme: DialogTheme(
- backgroundColor: Color(0xFF333333),
- // Dark background for dialog in dark mode
- titleTextStyle: TextStyle(
- color: Colors.white), // White text in dark mode
- ),
- );
- }
-}
diff --git a/flutter-exoplayer/flutter_beta_exoplayer_creator/lib/utils/permission_utils.dart b/flutter-exoplayer/flutter_beta_exoplayer_creator/lib/utils/permission_utils.dart
deleted file mode 100644
index 8a60c6e..0000000
--- a/flutter-exoplayer/flutter_beta_exoplayer_creator/lib/utils/permission_utils.dart
+++ /dev/null
@@ -1,52 +0,0 @@
-import 'package:permission_handler/permission_handler.dart';
-import 'package:flutter/material.dart';
-
-Future requestPermissionIfNeeded(String subtitleFilePath, BuildContext context) async {
- if (subtitleFilePath.isNotEmpty) {
- // Only request permission if a subtitle file is chosen
- PermissionStatus status = await Permission.storage.status;
-
- if (!status.isGranted) {
- // If permission is not granted, request it
- status = await Permission.storage.request();
- if (status.isDenied) {
- // If permission is denied, show an alert dialog
- _showPermissionDeniedDialog(context);
- return; // Exit as we cannot proceed without permission
- } else if (status.isPermanentlyDenied) {
- // If the permission is permanently denied, guide the user to settings
- _showPermissionDeniedDialog(context, permanentlyDenied: true);
- return;
- }
- }
- }
-}
-
-void _showPermissionDeniedDialog(BuildContext context, {bool permanentlyDenied = false}) {
- showDialog(
- context: context,
- barrierDismissible: false, // Prevent tapping outside to dismiss
- builder: (BuildContext context) {
- return AlertDialog(
- title: Text('Permission Denied'),
- content: Text(
- permanentlyDenied
- ? 'The permission to access external storage has been permanently denied. Please go to the app settings to enable it.'
- : 'You have denied the permission to access external storage. Please allow it to proceed.',
- ),
- actions: [
- TextButton(
- onPressed: () {
- if (permanentlyDenied) {
- // Optionally, open app settings if permission is permanently denied
- openAppSettings();
- }
- Navigator.of(context).pop(); // Close the dialog
- },
- child: Text('OK'),
- ),
- ],
- );
- },
- );
-}
diff --git a/flutter-exoplayer/flutter_beta_exoplayer_creator/lib/utils/video_player_manager.dart b/flutter-exoplayer/flutter_beta_exoplayer_creator/lib/utils/video_player_manager.dart
deleted file mode 100644
index b4d16b1..0000000
--- a/flutter-exoplayer/flutter_beta_exoplayer_creator/lib/utils/video_player_manager.dart
+++ /dev/null
@@ -1,25 +0,0 @@
-class VideoPlayerManager {
- static final VideoPlayerManager _instance = VideoPlayerManager._internal();
-
- bool _isPlaying = false;
-
- // Private constructor
- VideoPlayerManager._internal();
-
- factory VideoPlayerManager() {
- return _instance;
- }
-
- // To start playing the video
- void playVideo() {
- _isPlaying = true;
- }
-
- // To stop or pause the video
- void stopVideo() {
- _isPlaying = false;
- }
-
- // To check if video is playing
- bool get isPlaying => _isPlaying;
-}
diff --git a/flutter-exoplayer/flutter_beta_exoplayer_creator/lib/utils/web_vtt.dart b/flutter-exoplayer/flutter_beta_exoplayer_creator/lib/utils/web_vtt.dart
deleted file mode 100644
index 51dda3e..0000000
--- a/flutter-exoplayer/flutter_beta_exoplayer_creator/lib/utils/web_vtt.dart
+++ /dev/null
@@ -1,38 +0,0 @@
-class WebVttCue {
- final Duration start;
- final Duration end;
- final String text;
-
- WebVttCue({
- required this.start,
- required this.end,
- required this.text,
- });
-}
-
-// Subtitle parsing logic (WebVTT format)
-List parseWebVtt(String subtitleData) {
- final cuePattern = RegExp(r'(\d{2}:\d{2}:\d{2}.\d{3}) --> (\d{2}:\d{2}:\d{2}.\d{3})\n(.*?)\n\n', dotAll: true);
- final List cues = [];
-
- for (final match in cuePattern.allMatches(subtitleData)) {
- final start = _parseTime(match.group(1)!);
- final end = _parseTime(match.group(2)!);
- final text = match.group(3)!;
- cues.add(WebVttCue(start: start, end: end, text: text));
- }
-
- return cues;
-}
-
-// Helper method to parse time string to Duration
-Duration _parseTime(String time) {
- final parts = time.split(':');
- final secondsParts = parts[2].split('.');
- return Duration(
- hours: int.parse(parts[0]),
- minutes: int.parse(parts[1]),
- seconds: int.parse(secondsParts[0]),
- milliseconds: int.parse(secondsParts[1]),
- );
-}
diff --git a/flutter-exoplayer/flutter_beta_exoplayer_creator/lib/widgets/video_player_widget.dart b/flutter-exoplayer/flutter_beta_exoplayer_creator/lib/widgets/video_player_widget.dart
deleted file mode 100644
index d794be5..0000000
--- a/flutter-exoplayer/flutter_beta_exoplayer_creator/lib/widgets/video_player_widget.dart
+++ /dev/null
@@ -1,304 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:flutter/services.dart';
-import 'package:video_player/video_player.dart';
-import 'package:chewie/chewie.dart';
-import 'package:http/http.dart' as http;
-import 'dart:io'; // Import to use File class
-import 'package:media3_exoplayer_creator/utils/permission_utils.dart'; // Import permission_utils.dart for permission handling
-import 'package:keep_screen_on/keep_screen_on.dart'; // Import keep_screen_on
-import '../utils/web_vtt.dart'; // Import web_vtt.dart for subtitle handling
-
-class VideoPlayerWidget extends StatefulWidget {
- final String videoUrl;
- final String filePath;
- final String subtitleUrl;
- final String subtitleFilePath;
-
- const VideoPlayerWidget({
- super.key,
- required this.videoUrl,
- required this.filePath,
- required this.subtitleUrl,
- required this.subtitleFilePath,
- });
-
- @override
- _VideoPlayerWidgetState createState() => _VideoPlayerWidgetState();
-}
-
-class _VideoPlayerWidgetState extends State {
- late VideoPlayerController _videoPlayerController;
- late ChewieController _chewieController;
- late List _subtitles;
- String? _currentSubtitle;
- bool _isLoading = true;
- double _playbackSpeed = 1.0;
- bool _controlsVisible = true; // Keep track of control visibility
-
- @override
- void initState() {
- super.initState();
-
- // Request permission for subtitle files if needed
- if (widget.subtitleFilePath.isNotEmpty) {
- requestPermissionIfNeeded(widget.subtitleFilePath, context);
- }
-
- // Initialize the video player controller based on video URL or file path
- if (widget.filePath.isNotEmpty) {
- _videoPlayerController =
- VideoPlayerController.file(File(widget.filePath));
- } else {
- _videoPlayerController =
- VideoPlayerController.networkUrl(Uri.parse(widget.videoUrl));
- }
-
- // Initialize the Chewie controller for video playback
- _initializeChewieController();
-
- // Load subtitles if needed
- _loadSubtitles();
-
- // Keep the screen on while the video is playing
- KeepScreenOn.turnOn();
-
- // Listen to video position changes to update subtitles
- _videoPlayerController.addListener(_updateCurrentSubtitle);
-
- // Apply immersive mode once the widget builds
- WidgetsBinding.instance.addPostFrameCallback((_) {
- _applyImmersiveMode();
- });
-
- // Initialize the video player
- _initializeVideoPlayer();
- }
-
- void _applyImmersiveMode() {
- SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersiveSticky);
- }
-
- void _initializeChewieController() {
- _chewieController = ChewieController(
- videoPlayerController: _videoPlayerController,
- aspectRatio: 16 / 9,
- autoPlay: true,
- looping: true,
- allowPlaybackSpeedChanging: false,
- // Disable built-in playback speed dropdown
- customControls: MaterialControls(
- // Custom controls if needed
- ),
- showControlsOnInitialize: true, // Show controls on initialization
- );
- }
-
- @override
- void dispose() {
- KeepScreenOn.turnOff();
- SystemChrome.setEnabledSystemUIMode(
- SystemUiMode.manual, overlays: SystemUiOverlay.values);
-
- _videoPlayerController.removeListener(_updateCurrentSubtitle);
- _chewieController.dispose();
- _videoPlayerController.dispose();
- super.dispose();
- }
-
- Future _loadSubtitles() async {
- setState(() {
- _isLoading = true;
- });
-
- if (widget.subtitleFilePath.isNotEmpty) {
- try {
- final file = File(widget.subtitleFilePath);
- final subtitleData = await file.readAsString();
- setState(() {
- _subtitles = parseWebVtt(subtitleData);
- _isLoading = false;
- });
- } catch (e) {
- setState(() {
- _isLoading = false;
- });
- print('Error loading subtitle file: $e');
- }
- } else if (widget.subtitleUrl.isNotEmpty) {
- try {
- final response = await http.get(Uri.parse(widget.subtitleUrl));
- if (response.statusCode == 200) {
- setState(() {
- _subtitles = parseWebVtt(response.body);
- _isLoading = false;
- });
- } else {
- setState(() {
- _isLoading = false;
- });
- print('Failed to load subtitle from URL: ${response.statusCode}');
- }
- } catch (e) {
- setState(() {
- _isLoading = false;
- });
- print('Error loading subtitle from URL: $e');
- }
- }
- }
-
- void _updateCurrentSubtitle() {
- final currentTime = _videoPlayerController.value.position;
-
- for (var cue in _subtitles) {
- if (currentTime >= cue.start && currentTime <= cue.end) {
- setState(() {
- _currentSubtitle = cue.text;
- });
- return;
- }
- }
-
- setState(() {
- _currentSubtitle = '';
- });
- }
-
- void _initializeVideoPlayer() async {
- await _videoPlayerController.initialize();
- setState(() {
- _isLoading = false;
- });
- }
-
- void _changePlaybackSpeed(double speed) {
- setState(() {
- _playbackSpeed = speed;
- _videoPlayerController.setPlaybackSpeed(speed);
-
- // Reapply immersive mode after speed change
- WidgetsBinding.instance.addPostFrameCallback((_) {
- _applyImmersiveMode();
- });
- });
- }
-
- @override
- Widget build(BuildContext context) {
- return WillPopScope(
- onWillPop: () async {
- _applyImmersiveMode(); // Reapply immersive mode on back press
- return true; // Allow the back action to proceed
- },
- child: Scaffold(
- body: Stack(
- children: [
- // This GestureDetector is now the topmost widget in the stack
- GestureDetector(
- onTap: () {
- setState(() {
- _controlsVisible = !_controlsVisible; // Toggle controls visibility on tap anywhere
- });
- _applyImmersiveMode(); // Reapply immersive mode
- },
- child: Column(
- children: [
- Expanded(
- child: Container(
- color: Colors.black,
- child: Chewie(controller: _chewieController),
- ),
- ),
- ],
- ),
- ),
- // Loading Indicator
- if (_isLoading)
- Center(child: CircularProgressIndicator()),
-
- // Subtitle display
- if (_currentSubtitle != null && _currentSubtitle!.isNotEmpty && !_isLoading)
- Positioned(
- bottom: 70,
- left: 0,
- right: 0,
- child: Container(
- padding: EdgeInsets.symmetric(horizontal: 20, vertical: 10),
- color: Colors.black.withOpacity(0.7),
- child: Text(
- _currentSubtitle!,
- style: TextStyle(fontSize: 19, color: Colors.white),
- textAlign: TextAlign.center,
- ),
- ),
- ),
-
- // Custom playback speed control button
- Positioned(
- top: 8,
- right: 8,
- child: AnimatedOpacity(
- opacity: _controlsVisible ? 1.0 : 0.0,
- duration: Duration(milliseconds: 300),
- // Adjust duration for fade effect
- child: IconButton(
- icon: SizedBox.shrink(), // No icon, just an empty space
- onPressed: () {
- _applyImmersiveMode(); // Reapply immersive mode
- _showPlaybackSpeedDialog();
- },
- ),
- ),
- ),
- ],
- ),
- ),
- );
- }
-
- void _showPlaybackSpeedDialog() {
- showDialog(
- context: context,
- builder: (BuildContext context) {
- return AlertDialog(
- title: Text(
- "Select Playback Speed",
- style: TextStyle(
- fontSize: 20, // Keep the title size consistent
- color: Theme
- .of(context)
- .brightness == Brightness.light
- ? Colors.grey
- : Colors.grey
- ),
- ),
- content: SingleChildScrollView( // Wrap content with SingleChildScrollView
- child: Column(
- mainAxisSize: MainAxisSize.min,
- children: [0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0].map((
- speed) {
- return ListTile(
- title: Text(
- "${speed}x",
- style: TextStyle(
- color: Theme
- .of(context)
- .textTheme
- .bodyMedium
- ?.color ??
- Colors.grey, // Dynamic text color based on theme
- ),
- ),
- onTap: () {
- _changePlaybackSpeed(speed);
- Navigator.of(context).pop();
- },
- );
- }).toList(),
- ),
- ),
- );
- },
- );
- }
-}
diff --git a/flutter-exoplayer/flutter_beta_exoplayer_creator/pubspec.lock b/flutter-exoplayer/flutter_beta_exoplayer_creator/pubspec.lock
deleted file mode 100644
index bc3fc9d..0000000
--- a/flutter-exoplayer/flutter_beta_exoplayer_creator/pubspec.lock
+++ /dev/null
@@ -1,642 +0,0 @@
-# Generated by pub
-# See https://dart.dev/tools/pub/glossary#lockfile
-packages:
- archive:
- dependency: transitive
- description:
- name: archive
- sha256: "6199c74e3db4fbfbd04f66d739e72fe11c8a8957d5f219f1f4482dbde6420b5a"
- url: "https://pub.dev"
- source: hosted
- version: "4.0.2"
- args:
- dependency: transitive
- description:
- name: args
- sha256: bf9f5caeea8d8fe6721a9c358dd8a5c1947b27f1cfaa18b39c301273594919e6
- url: "https://pub.dev"
- source: hosted
- version: "2.6.0"
- async:
- dependency: transitive
- description:
- name: async
- sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
- url: "https://pub.dev"
- source: hosted
- version: "2.11.0"
- boolean_selector:
- dependency: transitive
- description:
- name: boolean_selector
- sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
- url: "https://pub.dev"
- source: hosted
- version: "2.1.1"
- characters:
- dependency: transitive
- description:
- name: characters
- sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
- url: "https://pub.dev"
- source: hosted
- version: "1.3.0"
- checked_yaml:
- dependency: transitive
- description:
- name: checked_yaml
- sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff
- url: "https://pub.dev"
- source: hosted
- version: "2.0.3"
- chewie:
- dependency: "direct main"
- description:
- name: chewie
- sha256: "335df378c025588aef400c704bd71f0daea479d4cd57c471c88c056c1144e7cd"
- url: "https://pub.dev"
- source: hosted
- version: "1.8.5"
- cli_util:
- dependency: transitive
- description:
- name: cli_util
- sha256: ff6785f7e9e3c38ac98b2fb035701789de90154024a75b6cb926445e83197d1c
- url: "https://pub.dev"
- source: hosted
- version: "0.4.2"
- clock:
- dependency: transitive
- description:
- name: clock
- sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
- url: "https://pub.dev"
- source: hosted
- version: "1.1.1"
- collection:
- dependency: transitive
- description:
- name: collection
- sha256: a1ace0a119f20aabc852d165077c036cd864315bd99b7eaa10a60100341941bf
- url: "https://pub.dev"
- source: hosted
- version: "1.19.0"
- cross_file:
- dependency: transitive
- description:
- name: cross_file
- sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670"
- url: "https://pub.dev"
- source: hosted
- version: "0.3.4+2"
- crypto:
- dependency: transitive
- description:
- name: crypto
- sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855"
- url: "https://pub.dev"
- source: hosted
- version: "3.0.6"
- csslib:
- dependency: transitive
- description:
- name: csslib
- sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e"
- url: "https://pub.dev"
- source: hosted
- version: "1.0.2"
- cupertino_icons:
- dependency: transitive
- description:
- name: cupertino_icons
- sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6
- url: "https://pub.dev"
- source: hosted
- version: "1.0.8"
- dbus:
- dependency: transitive
- description:
- name: dbus
- sha256: "365c771ac3b0e58845f39ec6deebc76e3276aa9922b0cc60840712094d9047ac"
- url: "https://pub.dev"
- source: hosted
- version: "0.7.10"
- fake_async:
- dependency: transitive
- description:
- name: fake_async
- sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
- url: "https://pub.dev"
- source: hosted
- version: "1.3.1"
- ffi:
- dependency: transitive
- description:
- name: ffi
- sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6"
- url: "https://pub.dev"
- source: hosted
- version: "2.1.3"
- file_picker:
- dependency: "direct main"
- description:
- name: file_picker
- sha256: c904b4ab56d53385563c7c39d8e9fa9af086f91495dfc48717ad84a42c3cf204
- url: "https://pub.dev"
- source: hosted
- version: "8.1.7"
- flutter:
- dependency: "direct main"
- description: flutter
- source: sdk
- version: "0.0.0"
- flutter_launcher_icons:
- dependency: "direct dev"
- description:
- name: flutter_launcher_icons
- sha256: "526faf84284b86a4cb36d20a5e45147747b7563d921373d4ee0559c54fcdbcea"
- url: "https://pub.dev"
- source: hosted
- version: "0.13.1"
- flutter_lints:
- dependency: "direct dev"
- description:
- name: flutter_lints
- sha256: "5398f14efa795ffb7a33e9b6a08798b26a180edac4ad7db3f231e40f82ce11e1"
- url: "https://pub.dev"
- source: hosted
- version: "5.0.0"
- flutter_plugin_android_lifecycle:
- dependency: transitive
- description:
- name: flutter_plugin_android_lifecycle
- sha256: "615a505aef59b151b46bbeef55b36ce2b6ed299d160c51d84281946f0aa0ce0e"
- url: "https://pub.dev"
- source: hosted
- version: "2.0.24"
- flutter_test:
- dependency: "direct dev"
- description: flutter
- source: sdk
- version: "0.0.0"
- flutter_web_plugins:
- dependency: transitive
- description: flutter
- source: sdk
- version: "0.0.0"
- html:
- dependency: transitive
- description:
- name: html
- sha256: "1fc58edeaec4307368c60d59b7e15b9d658b57d7f3125098b6294153c75337ec"
- url: "https://pub.dev"
- source: hosted
- version: "0.15.5"
- http:
- dependency: transitive
- description:
- name: http
- sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010
- url: "https://pub.dev"
- source: hosted
- version: "1.2.2"
- http_parser:
- dependency: transitive
- description:
- name: http_parser
- sha256: "76d306a1c3afb33fe82e2bbacad62a61f409b5634c915fceb0d799de1a913360"
- url: "https://pub.dev"
- source: hosted
- version: "4.1.1"
- image:
- dependency: transitive
- description:
- name: image
- sha256: "8346ad4b5173924b5ddddab782fc7d8a6300178c8b1dc427775405a01701c4a6"
- url: "https://pub.dev"
- source: hosted
- version: "4.5.2"
- json_annotation:
- dependency: transitive
- description:
- name: json_annotation
- sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1"
- url: "https://pub.dev"
- source: hosted
- version: "4.9.0"
- keep_screen_on:
- dependency: "direct main"
- description:
- name: keep_screen_on
- sha256: "374405358a3229b0e1041b6e390ff4c74e73fbd21075298042044e0c84b5574c"
- url: "https://pub.dev"
- source: hosted
- version: "3.0.0"
- keep_screen_on_platform_interface:
- dependency: transitive
- description:
- name: keep_screen_on_platform_interface
- sha256: "065a0811407a970027c7530f9b8f36d11c89f36aab85b4b5acdacfe2cf3a8568"
- url: "https://pub.dev"
- source: hosted
- version: "3.0.0"
- leak_tracker:
- dependency: transitive
- description:
- name: leak_tracker
- sha256: "7bb2830ebd849694d1ec25bf1f44582d6ac531a57a365a803a6034ff751d2d06"
- url: "https://pub.dev"
- source: hosted
- version: "10.0.7"
- leak_tracker_flutter_testing:
- dependency: transitive
- description:
- name: leak_tracker_flutter_testing
- sha256: "9491a714cca3667b60b5c420da8217e6de0d1ba7a5ec322fab01758f6998f379"
- url: "https://pub.dev"
- source: hosted
- version: "3.0.8"
- leak_tracker_testing:
- dependency: transitive
- description:
- name: leak_tracker_testing
- sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
- url: "https://pub.dev"
- source: hosted
- version: "3.0.1"
- lints:
- dependency: transitive
- description:
- name: lints
- sha256: c35bb79562d980e9a453fc715854e1ed39e24e7d0297a880ef54e17f9874a9d7
- url: "https://pub.dev"
- source: hosted
- version: "5.1.1"
- matcher:
- dependency: transitive
- description:
- name: matcher
- sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
- url: "https://pub.dev"
- source: hosted
- version: "0.12.16+1"
- material_color_utilities:
- dependency: transitive
- description:
- name: material_color_utilities
- sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec
- url: "https://pub.dev"
- source: hosted
- version: "0.11.1"
- meta:
- dependency: transitive
- description:
- name: meta
- sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
- url: "https://pub.dev"
- source: hosted
- version: "1.15.0"
- nested:
- dependency: transitive
- description:
- name: nested
- sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20"
- url: "https://pub.dev"
- source: hosted
- version: "1.0.0"
- package_info_plus:
- dependency: transitive
- description:
- name: package_info_plus
- sha256: "70c421fe9d9cc1a9a7f3b05ae56befd469fe4f8daa3b484823141a55442d858d"
- url: "https://pub.dev"
- source: hosted
- version: "8.1.2"
- package_info_plus_platform_interface:
- dependency: transitive
- description:
- name: package_info_plus_platform_interface
- sha256: a5ef9986efc7bf772f2696183a3992615baa76c1ffb1189318dd8803778fb05b
- url: "https://pub.dev"
- source: hosted
- version: "3.0.2"
- path:
- dependency: transitive
- description:
- name: path
- sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
- url: "https://pub.dev"
- source: hosted
- version: "1.9.0"
- permission_handler:
- dependency: "direct main"
- description:
- name: permission_handler
- sha256: "18bf33f7fefbd812f37e72091a15575e72d5318854877e0e4035a24ac1113ecb"
- url: "https://pub.dev"
- source: hosted
- version: "11.3.1"
- permission_handler_android:
- dependency: transitive
- description:
- name: permission_handler_android
- sha256: "71bbecfee799e65aff7c744761a57e817e73b738fedf62ab7afd5593da21f9f1"
- url: "https://pub.dev"
- source: hosted
- version: "12.0.13"
- permission_handler_apple:
- dependency: transitive
- description:
- name: permission_handler_apple
- sha256: e6f6d73b12438ef13e648c4ae56bd106ec60d17e90a59c4545db6781229082a0
- url: "https://pub.dev"
- source: hosted
- version: "9.4.5"
- permission_handler_html:
- dependency: transitive
- description:
- name: permission_handler_html
- sha256: "38f000e83355abb3392140f6bc3030660cfaef189e1f87824facb76300b4ff24"
- url: "https://pub.dev"
- source: hosted
- version: "0.1.3+5"
- permission_handler_platform_interface:
- dependency: transitive
- description:
- name: permission_handler_platform_interface
- sha256: e9c8eadee926c4532d0305dff94b85bf961f16759c3af791486613152af4b4f9
- url: "https://pub.dev"
- source: hosted
- version: "4.2.3"
- permission_handler_windows:
- dependency: transitive
- description:
- name: permission_handler_windows
- sha256: "1a790728016f79a41216d88672dbc5df30e686e811ad4e698bfc51f76ad91f1e"
- url: "https://pub.dev"
- source: hosted
- version: "0.2.1"
- petitparser:
- dependency: transitive
- description:
- name: petitparser
- sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27
- url: "https://pub.dev"
- source: hosted
- version: "6.0.2"
- plugin_platform_interface:
- dependency: transitive
- description:
- name: plugin_platform_interface
- sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
- url: "https://pub.dev"
- source: hosted
- version: "2.1.8"
- posix:
- dependency: transitive
- description:
- name: posix
- sha256: a0117dc2167805aa9125b82eee515cc891819bac2f538c83646d355b16f58b9a
- url: "https://pub.dev"
- source: hosted
- version: "6.0.1"
- provider:
- dependency: transitive
- description:
- name: provider
- sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c
- url: "https://pub.dev"
- source: hosted
- version: "6.1.2"
- sky_engine:
- dependency: transitive
- description: flutter
- source: sdk
- version: "0.0.0"
- source_span:
- dependency: transitive
- description:
- name: source_span
- sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
- url: "https://pub.dev"
- source: hosted
- version: "1.10.0"
- stack_trace:
- dependency: transitive
- description:
- name: stack_trace
- sha256: "9f47fd3630d76be3ab26f0ee06d213679aa425996925ff3feffdec504931c377"
- url: "https://pub.dev"
- source: hosted
- version: "1.12.0"
- stream_channel:
- dependency: transitive
- description:
- name: stream_channel
- sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
- url: "https://pub.dev"
- source: hosted
- version: "2.1.2"
- string_scanner:
- dependency: transitive
- description:
- name: string_scanner
- sha256: "688af5ed3402a4bde5b3a6c15fd768dbf2621a614950b17f04626c431ab3c4c3"
- url: "https://pub.dev"
- source: hosted
- version: "1.3.0"
- term_glyph:
- dependency: transitive
- description:
- name: term_glyph
- sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
- url: "https://pub.dev"
- source: hosted
- version: "1.2.1"
- test_api:
- dependency: transitive
- description:
- name: test_api
- sha256: "664d3a9a64782fcdeb83ce9c6b39e78fd2971d4e37827b9b06c3aa1edc5e760c"
- url: "https://pub.dev"
- source: hosted
- version: "0.7.3"
- typed_data:
- dependency: transitive
- description:
- name: typed_data
- sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006
- url: "https://pub.dev"
- source: hosted
- version: "1.4.0"
- url_launcher:
- dependency: "direct main"
- description:
- name: url_launcher
- sha256: "9d06212b1362abc2f0f0d78e6f09f726608c74e3b9462e8368bb03314aa8d603"
- url: "https://pub.dev"
- source: hosted
- version: "6.3.1"
- url_launcher_android:
- dependency: transitive
- description:
- name: url_launcher_android
- sha256: "6fc2f56536ee873eeb867ad176ae15f304ccccc357848b351f6f0d8d4a40d193"
- url: "https://pub.dev"
- source: hosted
- version: "6.3.14"
- url_launcher_ios:
- dependency: transitive
- description:
- name: url_launcher_ios
- sha256: "16a513b6c12bb419304e72ea0ae2ab4fed569920d1c7cb850263fe3acc824626"
- url: "https://pub.dev"
- source: hosted
- version: "6.3.2"
- url_launcher_linux:
- dependency: transitive
- description:
- name: url_launcher_linux
- sha256: "4e9ba368772369e3e08f231d2301b4ef72b9ff87c31192ef471b380ef29a4935"
- url: "https://pub.dev"
- source: hosted
- version: "3.2.1"
- url_launcher_macos:
- dependency: transitive
- description:
- name: url_launcher_macos
- sha256: "17ba2000b847f334f16626a574c702b196723af2a289e7a93ffcb79acff855c2"
- url: "https://pub.dev"
- source: hosted
- version: "3.2.2"
- url_launcher_platform_interface:
- dependency: transitive
- description:
- name: url_launcher_platform_interface
- sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029"
- url: "https://pub.dev"
- source: hosted
- version: "2.3.2"
- url_launcher_web:
- dependency: transitive
- description:
- name: url_launcher_web
- sha256: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e"
- url: "https://pub.dev"
- source: hosted
- version: "2.3.3"
- url_launcher_windows:
- dependency: transitive
- description:
- name: url_launcher_windows
- sha256: "44cf3aabcedde30f2dba119a9dea3b0f2672fbe6fa96e85536251d678216b3c4"
- url: "https://pub.dev"
- source: hosted
- version: "3.1.3"
- vector_math:
- dependency: transitive
- description:
- name: vector_math
- sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
- url: "https://pub.dev"
- source: hosted
- version: "2.1.4"
- video_player:
- dependency: "direct main"
- description:
- name: video_player
- sha256: "4a8c3492d734f7c39c2588a3206707a05ee80cef52e8c7f3b2078d430c84bc17"
- url: "https://pub.dev"
- source: hosted
- version: "2.9.2"
- video_player_android:
- dependency: transitive
- description:
- name: video_player_android
- sha256: "391e092ba4abe2f93b3e625bd6b6a6ec7d7414279462c1c0ee42b5ab8d0a0898"
- url: "https://pub.dev"
- source: hosted
- version: "2.7.16"
- video_player_avfoundation:
- dependency: transitive
- description:
- name: video_player_avfoundation
- sha256: "33224c19775fd244be2d6e3dbd8e1826ab162877bd61123bf71890772119a2b7"
- url: "https://pub.dev"
- source: hosted
- version: "2.6.5"
- video_player_platform_interface:
- dependency: transitive
- description:
- name: video_player_platform_interface
- sha256: "229d7642ccd9f3dc4aba169609dd6b5f3f443bb4cc15b82f7785fcada5af9bbb"
- url: "https://pub.dev"
- source: hosted
- version: "6.2.3"
- video_player_web:
- dependency: transitive
- description:
- name: video_player_web
- sha256: "881b375a934d8ebf868c7fb1423b2bfaa393a0a265fa3f733079a86536064a10"
- url: "https://pub.dev"
- source: hosted
- version: "2.3.3"
- vm_service:
- dependency: transitive
- description:
- name: vm_service
- sha256: f6be3ed8bd01289b34d679c2b62226f63c0e69f9fd2e50a6b3c1c729a961041b
- url: "https://pub.dev"
- source: hosted
- version: "14.3.0"
- wakelock_plus:
- dependency: transitive
- description:
- name: wakelock_plus
- sha256: "36c88af0b930121941345306d259ec4cc4ecca3b151c02e3a9e71aede83c615e"
- url: "https://pub.dev"
- source: hosted
- version: "1.2.10"
- wakelock_plus_platform_interface:
- dependency: transitive
- description:
- name: wakelock_plus_platform_interface
- sha256: "70e780bc99796e1db82fe764b1e7dcb89a86f1e5b3afb1db354de50f2e41eb7a"
- url: "https://pub.dev"
- source: hosted
- version: "1.2.2"
- web:
- dependency: transitive
- description:
- name: web
- sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb
- url: "https://pub.dev"
- source: hosted
- version: "1.1.0"
- win32:
- dependency: transitive
- description:
- name: win32
- sha256: "8b338d4486ab3fbc0ba0db9f9b4f5239b6697fcee427939a40e720cbb9ee0a69"
- url: "https://pub.dev"
- source: hosted
- version: "5.9.0"
- xml:
- dependency: transitive
- description:
- name: xml
- sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226
- url: "https://pub.dev"
- source: hosted
- version: "6.5.0"
- yaml:
- dependency: transitive
- description:
- name: yaml
- sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce
- url: "https://pub.dev"
- source: hosted
- version: "3.1.3"
-sdks:
- dart: ">=3.6.0 <4.0.0"
- flutter: ">=3.24.0"
diff --git a/flutter-exoplayer/flutter_beta_exoplayer_creator/pubspec.yaml b/flutter-exoplayer/flutter_beta_exoplayer_creator/pubspec.yaml
deleted file mode 100644
index 9b2e5e3..0000000
--- a/flutter-exoplayer/flutter_beta_exoplayer_creator/pubspec.yaml
+++ /dev/null
@@ -1,97 +0,0 @@
-name: media3_exoplayer_creator
-description: "ExoPlayer Creator that supports Media3"
-# The following line prevents the package from being accidentally published to
-# pub.dev using `flutter pub publish`. This is preferred for private packages.
-publish_to: 'none' # Remove this line if you wish to publish to pub.dev
-
-# The following defines the version and build number for your application.
-# A version number is three numbers separated by dots, like 1.2.43
-# followed by an optional build number separated by a +.
-# Both the version and the builder number may be overridden in flutter
-# build by specifying --build-name and --build-number, respectively.
-# In Android, build-name is used as versionName while build-number used as versionCode.
-# Read more about Android versioning at https://developer.android.com/studio/publish/versioning
-# In iOS, build-name is used as CFBundleShortVersionString while build-number is used as CFBundleVersion.
-# Read more about iOS versioning at
-# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
-# In Windows, build-name is used as the major, minor, and patch parts
-# of the product and file versions while build-number is used as the build suffix.
-version: 1.0.0+1
-
-environment:
- sdk: ^3.6.0
-
-# Dependencies specify other packages that your package needs in order to work.
-# To automatically upgrade your package dependencies to the latest versions
-# consider running `flutter pub upgrade --major-versions`. Alternatively,
-# dependencies can be manually updated by changing the version numbers below to
-# the latest version available on pub.dev. To see which dependencies have newer
-# versions available, run `flutter pub outdated`.
-dependencies:
- flutter:
- sdk: flutter
- video_player: ^2.9.2 # Make sure to check for the latest version
- chewie: ^1.8.5 # Optional, if you want to use a higher-level video player with controls
- keep_screen_on: ^3.0.0 # Add this line
- file_picker: ^8.1.7 # Use the latest version
- permission_handler: ^11.3.1
- url_launcher: ^6.3.1
-
-dev_dependencies:
- flutter_test:
- sdk: flutter
- flutter_launcher_icons: ^0.13.1
-
- # The "flutter_lints" package below contains a set of recommended lints to
- # encourage good coding practices. The lint set provided by the package is
- # activated in the `analysis_options.yaml` file located at the root of your
- # package. See that file for information about deactivating specific lint
- # rules and activating additional ones.
- flutter_lints: ^5.0.0
-
-# For information on the generic Dart part of this file, see the
-# following page: https://dart.dev/tools/pub/pubspec
-flutter_launcher_icons:
- android: true
- ios: true
- image_path: "assets/icon.png"
-
-# The following section is specific to Flutter packages.
-flutter:
-
- # The following line ensures that the Material Icons font is
- # included with your application, so that you can use the icons ina
- # the material Icons class.
- uses-material-design: true
-
- # To add assets to your application, add an assets section, like this:
- assets:
- - assets/ani.png
- - assets/icon.png
-
- # An image asset can refer to one or more resolution-specific "variants", see
- # https://flutter.dev/to/resolution-aware-images
-
- # For details regarding adding assets from package dependencies, see
- # https://flutter.dev/to/asset-from-package
-
- # To add custom fonts to your application, add a fonts section here,
- # in this "flutter" section. Each entry in this list should have a
- # "family" key with the font family name, and a "fonts" key with a
- # list giving the asset and other descriptors for the font. For
- # example:
- # fonts:
- # - family: Schyler
- # fonts:
- # - asset: fonts/Schyler-Regular.ttf
- # - asset: fonts/Schyler-Italic.ttf
- # style: italic
- # - family: Trajan Pro
- # fonts:
- # - asset: fonts/TrajanPro.ttf
- # - asset: fonts/TrajanPro_Bold.ttf
- # weight: 700
- #
- # For details regarding fonts from package dependencies,
- # see https://flutter.dev/to/font-from-package
-
diff --git a/flutter-exoplayer/flutter_beta_exoplayer_creator/test/widget_test.dart b/flutter-exoplayer/flutter_beta_exoplayer_creator/test/widget_test.dart
deleted file mode 100644
index 886e971..0000000
--- a/flutter-exoplayer/flutter_beta_exoplayer_creator/test/widget_test.dart
+++ /dev/null
@@ -1 +0,0 @@
-// useless
\ No newline at end of file