From 00ebf89b64eb7a84a33e48f385e01efb6ec54417 Mon Sep 17 00:00:00 2001 From: misakajimmy Date: Sun, 26 Mar 2023 19:40:46 +0800 Subject: [PATCH] DEV UPDATE:Fix build problem --- lib/main-new.dart | 19 +- lib/media/tracks/tracks_player.dart | 8 +- .../tracks/tracks_player_impl_lychee.dart | 572 +++++++++--------- lib/navigation/common/page_splash.dart | 54 ++ linux/flutter/generated_plugin_registrant.cc | 4 - linux/flutter/generated_plugins.cmake | 1 - macos/Flutter/GeneratedPluginRegistrant.swift | 2 - pubspec.lock | 8 - pubspec.yaml | 2 +- .../flutter/generated_plugin_registrant.cc | 3 - windows/flutter/generated_plugins.cmake | 1 - 11 files changed, 363 insertions(+), 311 deletions(-) create mode 100644 lib/navigation/common/page_splash.dart diff --git a/lib/main-new.dart b/lib/main-new.dart index b7bee45..4a7f566 100644 --- a/lib/main-new.dart +++ b/lib/main-new.dart @@ -1,10 +1,27 @@ import 'package:EOEFANS/navigation/app.dart'; +import 'package:EOEFANS/navigation/common/page_splash.dart'; +import 'package:EOEFANS/providers/preference_provider.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:overlay_support/overlay_support.dart'; +import 'package:shared_preferences/shared_preferences.dart'; Future main() async { - + final preferences = await SharedPreferences.getInstance(); + runApp( + ProviderScope( + overrides: [ + sharedPreferenceProvider.overrideWithValue(preferences), + ], + child: PageSplash( + futures: const [], + builder: (BuildContext context, List data) { + return const MyApp(); + }, + ), + ), + ); } diff --git a/lib/media/tracks/tracks_player.dart b/lib/media/tracks/tracks_player.dart index 9115c4c..e693d85 100644 --- a/lib/media/tracks/tracks_player.dart +++ b/lib/media/tracks/tracks_player.dart @@ -7,7 +7,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../model/persistence_player_state.dart'; import '../../repository/data/track.dart'; import 'track_list.dart'; -import 'tracks_player_impl_lychee.dart'; +// import 'tracks_player_impl_lychee.dart'; import 'tracks_player_impl_mobile.dart'; enum RepeatMode { @@ -63,9 +63,9 @@ abstract class TracksPlayer extends StateNotifier { ); factory TracksPlayer.platform() { - if (Platform.isMacOS || Platform.isWindows || Platform.isLinux) { - return TracksPlayerImplLychee(); - } + // if (Platform.isMacOS || Platform.isWindows || Platform.isLinux) { + // return TracksPlayerImplLychee(); + // } return TracksPlayerImplMobile(); } diff --git a/lib/media/tracks/tracks_player_impl_lychee.dart b/lib/media/tracks/tracks_player_impl_lychee.dart index d1e3a1c..c0a11d1 100644 --- a/lib/media/tracks/tracks_player_impl_lychee.dart +++ b/lib/media/tracks/tracks_player_impl_lychee.dart @@ -1,286 +1,286 @@ -import 'dart:async'; - -import 'package:flutter/foundation.dart'; -import 'package:lychee_player/lychee_player.dart'; -import 'package:mixin_logger/mixin_logger.dart'; - -import '../../extension.dart'; -import '../../model/persistence_player_state.dart'; -import '../../repository.dart'; -import '../../utils/media_cache/media_cache.dart'; -import 'track_list.dart'; -import 'tracks_player.dart'; - -extension _SecondsExt on double { - Duration toDuration() { - return Duration(milliseconds: (this * 1000).toInt()); - } -} - -class TracksPlayerImplLychee extends TracksPlayer { - TracksPlayerImplLychee(); - - var _trackList = const TrackList.empty(); - var _shuffleTrackIds = const []; - - Track? _current; - - LycheeAudioPlayer? _player; - - double _volume = 1; - - RepeatMode _repeatMode = RepeatMode.sequence; - - @override - Duration? get bufferedPosition => null; - - @override - Track? get current => _current; - - @override - Duration? get duration => _player?.duration().toDuration(); - - @override - Future getNextTrack() async { - final shuffle = _repeatMode == RepeatMode.shuffle; - if (_trackList.tracks.isEmpty) { - assert(false, 'track list is empty'); - return null; - } - if (!shuffle) { - final index = _trackList.tracks.cast().indexOf(current) + 1; - if (index < _trackList.tracks.length) { - return _trackList.tracks[index]; - } - return _trackList.tracks.firstOrNull; - } else { - assert(_shuffleTrackIds.isNotEmpty, 'shuffle track ids is empty'); - if (_shuffleTrackIds.isEmpty) { - _generateShuffleList(); - } - final int index; - if (current == null) { - index = 0; - } else { - index = _shuffleTrackIds.indexOf(current!.id) + 1; - } - final int trackId; - if (index < _shuffleTrackIds.length) { - trackId = _shuffleTrackIds[index]; - } else { - trackId = _shuffleTrackIds.first; - } - return _trackList.tracks.firstWhereOrNull((e) => e.id == trackId); - } - } - - @override - Future getPreviousTrack() async { - final shuffle = _repeatMode == RepeatMode.shuffle; - if (_trackList.tracks.isEmpty) { - assert(false, 'track list is empty'); - return null; - } - if (!shuffle) { - final index = _trackList.tracks.cast().indexOf(current) - 1; - if (index >= 0) { - return _trackList.tracks[index]; - } - return _trackList.tracks.lastOrNull; - } else { - assert(_shuffleTrackIds.isNotEmpty, 'shuffle track ids is empty'); - if (_shuffleTrackIds.isEmpty) { - _generateShuffleList(); - } - final int index; - if (current == null) { - index = 0; - } else { - index = _shuffleTrackIds.indexOf(current!.id) - 1; - } - final int trackId; - if (index >= 0) { - trackId = _shuffleTrackIds[index]; - } else { - trackId = _shuffleTrackIds.last; - } - return _trackList.tracks.firstWhereOrNull((e) => e.id == trackId); - } - } - - @override - Future insertToNext(Track track) async { - final index = _trackList.tracks.cast().indexOf(current); - if (index == -1) { - return; - } - final nextIndex = index + 1; - if (nextIndex >= _trackList.tracks.length) { - _trackList.tracks.add(track); - } else { - final next = _trackList.tracks[nextIndex]; - if (next != track) { - _trackList.tracks.insert(nextIndex, track); - } - } - notifyPlayStateChanged(); - } - - @override - bool get isBuffering => _player?.state.value == PlayerState.buffering; - - @override - bool get isPlaying => - _player?.state.value == PlayerState.ready && - _player?.playWhenReady == true; - - @override - Future pause() async { - _player?.playWhenReady = false; - } - - @override - Future play() async { - _player?.playWhenReady = true; - } - - @override - Future playFromMediaId(int trackId, {bool play = true}) async { - await stop(); - final item = _trackList.tracks.firstWhereOrNull((t) => t.id == trackId); - if (item != null) { - _playTrack(item, playWhenReady: play); - } - } - - @override - double get playbackSpeed => 1; - - @override - Duration? get position => _player?.currentTime().toDuration(); - - @override - RepeatMode get repeatMode => _repeatMode; - - @override - Future seekTo(Duration position) async { - _player?.seek(position.inMilliseconds / 1000); - } - - @override - Future setPlaybackSpeed(double speed) async { - // TODO implement setPlaybackSpeed - } - - @override - Future setRepeatMode(RepeatMode repeatMode) async { - _repeatMode = repeatMode; - notifyPlayStateChanged(); - } - - void _generateShuffleList() { - _shuffleTrackIds = trackList.tracks.map((e) => e.id).toList(); - _shuffleTrackIds.shuffle(); - } - - @override - void setTrackList(TrackList trackList) { - final needStop = trackList.id != _trackList.id; - if (needStop) { - stop(); - _current = null; - } - _trackList = trackList; - _generateShuffleList(); - notifyPlayStateChanged(); - } - - @override - Future setVolume(double volume) async { - _player?.volume = volume; - _volume = volume; - notifyPlayStateChanged(); - } - - @override - Future skipToNext() async { - final next = await getNextTrack(); - if (next != null) { - _playTrack(next); - } - } - - @override - Future skipToPrevious() async { - final previous = await getPreviousTrack(); - if (previous != null) { - _playTrack(previous); - } - } - - @override - Future stop() async { - _player?.playWhenReady = false; - _player?.dispose(); - _player = null; - _current = null; - notifyPlayStateChanged(); - } - - @override - TrackList get trackList => _trackList; - - @override - double get volume => _volume; - - void _playTrack( - Track track, { - bool playWhenReady = true, - }) { - scheduleMicrotask(() async { - // final urlResult = await neteaseRepository!.getPlayUrl(track.id); - // if (urlResult.isError) { - // debugPrint('Failed to get play urlResult: ${urlResult.asError!.error}'); - // return; - // } - // final url = - // await generateTrackProxyUrl(track.id, urlResult.asValue!.value); - final url = "aaa"; - d('Play url: $url'); - if (_current != track) { - // skip play. since the track is changed. - return; - } - _player?.dispose(); - _player = LycheeAudioPlayer(url) - ..playWhenReady = playWhenReady - ..onPlayWhenReadyChanged.addListener(notifyPlayStateChanged) - ..state.addListener(() { - if (_player?.state.value == PlayerState.end) { - final isSingle = _repeatMode == RepeatMode.single; - if (isSingle) { - _playTrack(track); - } else { - skipToNext(); - } - } - notifyPlayStateChanged(); - }) - ..volume = _volume; - }); - _current = track; - notifyPlayStateChanged(); - } - - @override - void restoreFromPersistence(PersistencePlayerState state) { - _trackList = state.playingList; - _repeatMode = state.repeatMode; - _generateShuffleList(); - if (state.playingTrack != null) { - _playTrack(state.playingTrack!, playWhenReady: false); - } - setVolume(state.volume); - notifyPlayStateChanged(); - } -} +// import 'dart:async'; +// +// import 'package:flutter/foundation.dart'; +// import 'package:lychee_player/lychee_player.dart'; +// import 'package:mixin_logger/mixin_logger.dart'; +// +// import '../../extension.dart'; +// import '../../model/persistence_player_state.dart'; +// import '../../repository.dart'; +// import '../../utils/media_cache/media_cache.dart'; +// import 'track_list.dart'; +// import 'tracks_player.dart'; +// +// extension _SecondsExt on double { +// Duration toDuration() { +// return Duration(milliseconds: (this * 1000).toInt()); +// } +// } +// +// class TracksPlayerImplLychee extends TracksPlayer { +// TracksPlayerImplLychee(); +// +// var _trackList = const TrackList.empty(); +// var _shuffleTrackIds = const []; +// +// Track? _current; +// +// LycheeAudioPlayer? _player; +// +// double _volume = 1; +// +// RepeatMode _repeatMode = RepeatMode.sequence; +// +// @override +// Duration? get bufferedPosition => null; +// +// @override +// Track? get current => _current; +// +// @override +// Duration? get duration => _player?.duration().toDuration(); +// +// @override +// Future getNextTrack() async { +// final shuffle = _repeatMode == RepeatMode.shuffle; +// if (_trackList.tracks.isEmpty) { +// assert(false, 'track list is empty'); +// return null; +// } +// if (!shuffle) { +// final index = _trackList.tracks.cast().indexOf(current) + 1; +// if (index < _trackList.tracks.length) { +// return _trackList.tracks[index]; +// } +// return _trackList.tracks.firstOrNull; +// } else { +// assert(_shuffleTrackIds.isNotEmpty, 'shuffle track ids is empty'); +// if (_shuffleTrackIds.isEmpty) { +// _generateShuffleList(); +// } +// final int index; +// if (current == null) { +// index = 0; +// } else { +// index = _shuffleTrackIds.indexOf(current!.id) + 1; +// } +// final int trackId; +// if (index < _shuffleTrackIds.length) { +// trackId = _shuffleTrackIds[index]; +// } else { +// trackId = _shuffleTrackIds.first; +// } +// return _trackList.tracks.firstWhereOrNull((e) => e.id == trackId); +// } +// } +// +// @override +// Future getPreviousTrack() async { +// final shuffle = _repeatMode == RepeatMode.shuffle; +// if (_trackList.tracks.isEmpty) { +// assert(false, 'track list is empty'); +// return null; +// } +// if (!shuffle) { +// final index = _trackList.tracks.cast().indexOf(current) - 1; +// if (index >= 0) { +// return _trackList.tracks[index]; +// } +// return _trackList.tracks.lastOrNull; +// } else { +// assert(_shuffleTrackIds.isNotEmpty, 'shuffle track ids is empty'); +// if (_shuffleTrackIds.isEmpty) { +// _generateShuffleList(); +// } +// final int index; +// if (current == null) { +// index = 0; +// } else { +// index = _shuffleTrackIds.indexOf(current!.id) - 1; +// } +// final int trackId; +// if (index >= 0) { +// trackId = _shuffleTrackIds[index]; +// } else { +// trackId = _shuffleTrackIds.last; +// } +// return _trackList.tracks.firstWhereOrNull((e) => e.id == trackId); +// } +// } +// +// @override +// Future insertToNext(Track track) async { +// final index = _trackList.tracks.cast().indexOf(current); +// if (index == -1) { +// return; +// } +// final nextIndex = index + 1; +// if (nextIndex >= _trackList.tracks.length) { +// _trackList.tracks.add(track); +// } else { +// final next = _trackList.tracks[nextIndex]; +// if (next != track) { +// _trackList.tracks.insert(nextIndex, track); +// } +// } +// notifyPlayStateChanged(); +// } +// +// @override +// bool get isBuffering => _player?.state.value == PlayerState.buffering; +// +// @override +// bool get isPlaying => +// _player?.state.value == PlayerState.ready && +// _player?.playWhenReady == true; +// +// @override +// Future pause() async { +// _player?.playWhenReady = false; +// } +// +// @override +// Future play() async { +// _player?.playWhenReady = true; +// } +// +// @override +// Future playFromMediaId(int trackId, {bool play = true}) async { +// await stop(); +// final item = _trackList.tracks.firstWhereOrNull((t) => t.id == trackId); +// if (item != null) { +// _playTrack(item, playWhenReady: play); +// } +// } +// +// @override +// double get playbackSpeed => 1; +// +// @override +// Duration? get position => _player?.currentTime().toDuration(); +// +// @override +// RepeatMode get repeatMode => _repeatMode; +// +// @override +// Future seekTo(Duration position) async { +// _player?.seek(position.inMilliseconds / 1000); +// } +// +// @override +// Future setPlaybackSpeed(double speed) async { +// // TODO implement setPlaybackSpeed +// } +// +// @override +// Future setRepeatMode(RepeatMode repeatMode) async { +// _repeatMode = repeatMode; +// notifyPlayStateChanged(); +// } +// +// void _generateShuffleList() { +// _shuffleTrackIds = trackList.tracks.map((e) => e.id).toList(); +// _shuffleTrackIds.shuffle(); +// } +// +// @override +// void setTrackList(TrackList trackList) { +// final needStop = trackList.id != _trackList.id; +// if (needStop) { +// stop(); +// _current = null; +// } +// _trackList = trackList; +// _generateShuffleList(); +// notifyPlayStateChanged(); +// } +// +// @override +// Future setVolume(double volume) async { +// _player?.volume = volume; +// _volume = volume; +// notifyPlayStateChanged(); +// } +// +// @override +// Future skipToNext() async { +// final next = await getNextTrack(); +// if (next != null) { +// _playTrack(next); +// } +// } +// +// @override +// Future skipToPrevious() async { +// final previous = await getPreviousTrack(); +// if (previous != null) { +// _playTrack(previous); +// } +// } +// +// @override +// Future stop() async { +// _player?.playWhenReady = false; +// _player?.dispose(); +// _player = null; +// _current = null; +// notifyPlayStateChanged(); +// } +// +// @override +// TrackList get trackList => _trackList; +// +// @override +// double get volume => _volume; +// +// void _playTrack( +// Track track, { +// bool playWhenReady = true, +// }) { +// scheduleMicrotask(() async { +// // final urlResult = await neteaseRepository!.getPlayUrl(track.id); +// // if (urlResult.isError) { +// // debugPrint('Failed to get play urlResult: ${urlResult.asError!.error}'); +// // return; +// // } +// // final url = +// // await generateTrackProxyUrl(track.id, urlResult.asValue!.value); +// final url = "aaa"; +// d('Play url: $url'); +// if (_current != track) { +// // skip play. since the track is changed. +// return; +// } +// _player?.dispose(); +// _player = LycheeAudioPlayer(url) +// ..playWhenReady = playWhenReady +// ..onPlayWhenReadyChanged.addListener(notifyPlayStateChanged) +// ..state.addListener(() { +// if (_player?.state.value == PlayerState.end) { +// final isSingle = _repeatMode == RepeatMode.single; +// if (isSingle) { +// _playTrack(track); +// } else { +// skipToNext(); +// } +// } +// notifyPlayStateChanged(); +// }) +// ..volume = _volume; +// }); +// _current = track; +// notifyPlayStateChanged(); +// } +// +// @override +// void restoreFromPersistence(PersistencePlayerState state) { +// _trackList = state.playingList; +// _repeatMode = state.repeatMode; +// _generateShuffleList(); +// if (state.playingTrack != null) { +// _playTrack(state.playingTrack!, playWhenReady: false); +// } +// setVolume(state.volume); +// notifyPlayStateChanged(); +// } +// } diff --git a/lib/navigation/common/page_splash.dart b/lib/navigation/common/page_splash.dart new file mode 100644 index 0000000..4f0d6f9 --- /dev/null +++ b/lib/navigation/common/page_splash.dart @@ -0,0 +1,54 @@ +import 'dart:async'; + +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +// import '../../providers/account_provider.dart'; + +///used to build application widget +///[data] the data initial in [PageSplash] +typedef AppBuilder = Widget Function(BuildContext context, List data); + +///the splash screen of application +class PageSplash extends ConsumerStatefulWidget { + const PageSplash({super.key, required this.futures, required this.builder}); + + ///the data need init before application running + final List futures; + + final AppBuilder builder; + + @override + ConsumerState createState() => _PageSplashState(); +} + +class _PageSplashState extends ConsumerState { + List? _data; + + @override + void initState() { + super.initState(); + // final tasks = [ + // ref.read(userProvider.notifier).initialize(), + // ]; + // final start = DateTime.now().millisecondsSinceEpoch; + // Future.wait([ + // ...widget.futures, + // ...tasks, + // ]).then((data) { + // final duration = DateTime.now().millisecondsSinceEpoch - start; + // debugPrint('flutter initial in : $duration'); + // setState(() { + // _data = data; + // }); + // }); + } + + @override + Widget build(BuildContext context) { + if (_data == null) { + return const ColoredBox(color: Color(0xFFd92e29)); + } + return widget.builder(context, _data!); + } +} diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc index cb03a7f..76c9a95 100644 --- a/linux/flutter/generated_plugin_registrant.cc +++ b/linux/flutter/generated_plugin_registrant.cc @@ -6,16 +6,12 @@ #include "generated_plugin_registrant.h" -#include #include #include #include #include void fl_register_plugins(FlPluginRegistry* registry) { - g_autoptr(FlPluginRegistrar) lychee_player_registrar = - fl_plugin_registry_get_registrar_for_plugin(registry, "MediaPlayerPlugin"); - media_player_plugin_register_with_registrar(lychee_player_registrar); g_autoptr(FlPluginRegistrar) screen_retriever_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "ScreenRetrieverPlugin"); screen_retriever_plugin_register_with_registrar(screen_retriever_registrar); diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake index d3390a0..7194bb7 100644 --- a/linux/flutter/generated_plugins.cmake +++ b/linux/flutter/generated_plugins.cmake @@ -3,7 +3,6 @@ # list(APPEND FLUTTER_PLUGIN_LIST - lychee_player screen_retriever sentry_flutter url_launcher_linux diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index 92fb2d2..75fa731 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -5,7 +5,6 @@ import FlutterMacOS import Foundation -import lychee_player import package_info_plus import path_provider_foundation import photo_manager @@ -17,7 +16,6 @@ import url_launcher_macos import window_manager func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { - LycheePlayerPlugin.register(with: registry.registrar(forPlugin: "LycheePlayerPlugin")) FLTPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FLTPackageInfoPlusPlugin")) PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) PhotoManagerPlugin.register(with: registry.registrar(forPlugin: "PhotoManagerPlugin")) diff --git a/pubspec.lock b/pubspec.lock index 8b45357..6b73f76 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -560,14 +560,6 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "1.1.1" - lychee_player: - dependency: "direct main" - description: - name: lychee_player - sha256: "64001cab482d8ff078d7e16475e55ed5e0ddbca74d2cef95b57712c389bc378c" - url: "https://pub.flutter-io.cn" - source: hosted - version: "0.4.0" matcher: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 72a5a5a..9b35f4c 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -68,7 +68,7 @@ dependencies: git: url: https://github.com/boyan01/flutter-music-player.git ref: 434e6fdc79a81d1a2a0877339ae29004c0f32734 - lychee_player: ^0.4.0 +# lychee_player: ^0.4.0 dev_dependencies: flutter_test: diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc index 4d317f6..43d19d1 100644 --- a/windows/flutter/generated_plugin_registrant.cc +++ b/windows/flutter/generated_plugin_registrant.cc @@ -6,15 +6,12 @@ #include "generated_plugin_registrant.h" -#include #include #include #include #include void RegisterPlugins(flutter::PluginRegistry* registry) { - MediaPlayerPluginRegisterWithRegistrar( - registry->GetRegistrarForPlugin("MediaPlayerPlugin")); ScreenRetrieverPluginRegisterWithRegistrar( registry->GetRegistrarForPlugin("ScreenRetrieverPlugin")); SentryFlutterPluginRegisterWithRegistrar( diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake index 31347ab..6281416 100644 --- a/windows/flutter/generated_plugins.cmake +++ b/windows/flutter/generated_plugins.cmake @@ -3,7 +3,6 @@ # list(APPEND FLUTTER_PLUGIN_LIST - lychee_player screen_retriever sentry_flutter url_launcher_windows