From 589478a8a705036dd034d91a6bc4d7eb6af0843d Mon Sep 17 00:00:00 2001 From: canxin Date: Sat, 13 Jul 2024 10:04:19 +0800 Subject: [PATCH] [Test] try fix ios no sound --- lib/dialogs/music_fuzz_filter_dialog.dart | 196 ++++++++++++++++++++++ lib/pages/search_page.dart | 39 +++-- lib/types/music_container.dart | 10 +- 3 files changed, 226 insertions(+), 19 deletions(-) create mode 100644 lib/dialogs/music_fuzz_filter_dialog.dart diff --git a/lib/dialogs/music_fuzz_filter_dialog.dart b/lib/dialogs/music_fuzz_filter_dialog.dart new file mode 100644 index 0000000..eed0845 --- /dev/null +++ b/lib/dialogs/music_fuzz_filter_dialog.dart @@ -0,0 +1,196 @@ +import 'dart:async'; + +import 'package:app_rhyme/src/rust/api/bind/mirrors.dart'; +import 'package:flutter/cupertino.dart'; + +Future showMusicFuzzFilterDialog(BuildContext context, + {MusicFuzzFilter? defaultFilter, bool readonly = false}) async { + return showCupertinoDialog( + context: context, + builder: (BuildContext context) => + MusicFuzzFilterDialog(defaultFilter: defaultFilter, readonly: readonly), + ); +} + +class MusicFuzzFilterDialog extends StatefulWidget { + final MusicFuzzFilter? defaultFilter; + final bool readonly; + + const MusicFuzzFilterDialog( + {super.key, this.defaultFilter, this.readonly = false}); + + @override + MusicFuzzFilterDialogState createState() => MusicFuzzFilterDialogState(); +} + +class MusicFuzzFilterDialogState extends State { + late TextEditingController nameController; + late TextEditingController artistController; + late TextEditingController albumController; + + @override + void initState() { + super.initState(); + nameController = + TextEditingController(text: widget.defaultFilter?.name ?? ''); + artistController = TextEditingController( + text: widget.defaultFilter?.artist.join(', ') ?? ''); + albumController = + TextEditingController(text: widget.defaultFilter?.album ?? ''); + } + + @override + Widget build(BuildContext context) { + final Brightness brightness = MediaQuery.of(context).platformBrightness; + final bool isDarkMode = brightness == Brightness.dark; + + String title; + if (widget.readonly) { + title = '音乐筛选'; + } else if (widget.defaultFilter != null) { + title = "编辑筛选条件"; + } else { + title = '创建筛选条件'; + } + + return CupertinoAlertDialog( + title: Text( + title, + style: TextStyle( + color: isDarkMode ? CupertinoColors.white : CupertinoColors.black, + ), + ), + content: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Padding( + padding: const EdgeInsets.only(top: 8.0), + child: CupertinoTextField( + controller: nameController, + placeholder: '音乐名字', + readOnly: widget.readonly, + style: TextStyle( + color: + isDarkMode ? CupertinoColors.white : CupertinoColors.black, + ), + placeholderStyle: TextStyle( + color: isDarkMode + ? CupertinoColors.systemGrey + : CupertinoColors.systemGrey2, + ), + decoration: BoxDecoration( + color: isDarkMode + ? CupertinoColors.darkBackgroundGray + : CupertinoColors.white, + borderRadius: BorderRadius.circular(5.0), + ), + ), + ), + Padding( + padding: const EdgeInsets.only(top: 4.0), + child: CupertinoTextField( + controller: artistController, + placeholder: '艺术家(多个用逗号分隔)', + readOnly: widget.readonly, + maxLines: widget.readonly ? null : 1, + style: TextStyle( + color: + isDarkMode ? CupertinoColors.white : CupertinoColors.black, + ), + placeholderStyle: TextStyle( + color: isDarkMode + ? CupertinoColors.systemGrey + : CupertinoColors.systemGrey2, + ), + decoration: BoxDecoration( + color: isDarkMode + ? CupertinoColors.darkBackgroundGray + : CupertinoColors.white, + borderRadius: BorderRadius.circular(5.0), + ), + ), + ), + Padding( + padding: const EdgeInsets.only(top: 4.0), + child: CupertinoTextField( + controller: albumController, + placeholder: '专辑', + readOnly: widget.readonly, + maxLines: widget.readonly ? null : 1, + style: TextStyle( + color: + isDarkMode ? CupertinoColors.white : CupertinoColors.black, + ), + placeholderStyle: TextStyle( + color: isDarkMode + ? CupertinoColors.systemGrey + : CupertinoColors.systemGrey2, + ), + decoration: BoxDecoration( + color: isDarkMode + ? CupertinoColors.darkBackgroundGray + : CupertinoColors.white, + borderRadius: BorderRadius.circular(5.0), + ), + ), + ), + ], + ), + actions: [ + if (!widget.readonly) + CupertinoDialogAction( + child: Text( + '取消', + style: TextStyle( + color: isDarkMode + ? CupertinoColors.systemGrey2 + : CupertinoColors.activeBlue, + ), + ), + onPressed: () { + Navigator.of(context).pop(); + }, + ), + if (!widget.readonly) + CupertinoDialogAction( + isDefaultAction: true, + onPressed: () { + if (artistController.text.isNotEmpty) { + Navigator.of(context).pop(MusicFuzzFilter( + name: nameController.text, + artist: artistController.text + .split(',') + .map((e) => e.trim()) + .toList(), + album: albumController.text, + )); + } + }, + child: Text( + '完成', + style: TextStyle( + color: isDarkMode + ? CupertinoColors.systemGrey2 + : CupertinoColors.activeBlue, + ), + ), + ), + if (widget.readonly) + CupertinoDialogAction( + isDefaultAction: true, + onPressed: () { + Navigator.of(context).pop(); + }, + child: Text( + '关闭', + style: TextStyle( + color: isDarkMode + ? CupertinoColors.systemGrey2 + : CupertinoColors.activeBlue, + ), + ), + ), + ], + ); + } +} diff --git a/lib/pages/search_page.dart b/lib/pages/search_page.dart index 0cff7ce..f5b3eae 100644 --- a/lib/pages/search_page.dart +++ b/lib/pages/search_page.dart @@ -85,23 +85,25 @@ class _SearchMusicAggregatorPageState extends State MediaQuery.of(context).platformBrightness == Brightness.dark; return Column( children: [ + const SafeArea( + child: SizedBox( + height: 0, + )), // 搜索框 Padding( padding: const EdgeInsets.all(8.0), - child: SafeArea( - child: CupertinoSearchTextField( - style: TextStyle( - color: isDarkMode - ? CupertinoColors.white - : const Color.fromRGBO(0, 0, 0, 1), - ).useSystemChineseFont(), - controller: _inputContentController, - onSubmitted: (String value) { - if (value.isNotEmpty) { - _pagingController.refresh(); - } - }, - ), + child: CupertinoSearchTextField( + style: TextStyle( + color: isDarkMode + ? CupertinoColors.white + : const Color.fromRGBO(0, 0, 0, 1), + ).useSystemChineseFont(), + controller: _inputContentController, + onSubmitted: (String value) { + if (value.isNotEmpty) { + _pagingController.refresh(); + } + }, )), Expanded( child: PagedListView.separated( @@ -217,11 +219,14 @@ class _SearchMusicListState extends State return Column( children: [ + const SafeArea( + child: SizedBox( + height: 0, + )), // 搜索框 Padding( padding: const EdgeInsets.all(8.0), - child: SafeArea( - child: CupertinoSearchTextField( + child: CupertinoSearchTextField( style: TextStyle( color: isDarkMode ? CupertinoColors.white : CupertinoColors.black, ).useSystemChineseFont(), @@ -231,7 +236,7 @@ class _SearchMusicListState extends State _pagingController.refresh(); } }, - )), + ), ), Expanded( child: PagedGridView( diff --git a/lib/types/music_container.dart b/lib/types/music_container.dart index 86143af..aeeca17 100644 --- a/lib/types/music_container.dart +++ b/lib/types/music_container.dart @@ -177,7 +177,10 @@ class MusicContainer { currentQuality.value = playInfo!.quality; if (playInfo!.uri.contains("http")) { - if (Platform.isIOS || Platform.isMacOS) { + if ((Platform.isIOS || Platform.isMacOS) && + ((playInfo!.quality.format != null && + playInfo!.quality.format!.contains("flac")) || + (playInfo!.quality.short.contains("flac")))) { audioSource = ProgressiveAudioSource(Uri.parse(playInfo!.uri), tag: _toMediaItem(), options: const ProgressiveAudioSourceOptions( @@ -188,7 +191,10 @@ class MusicContainer { AudioSource.uri(Uri.parse(playInfo!.uri), tag: _toMediaItem()); } } else { - if (Platform.isIOS || Platform.isMacOS) { + if ((Platform.isIOS || Platform.isMacOS) && + ((playInfo!.quality.format != null && + playInfo!.quality.format!.contains("flac")) || + (playInfo!.quality.short.contains("flac")))) { audioSource = ProgressiveAudioSource(Uri.file(playInfo!.uri), tag: _toMediaItem(), options: const ProgressiveAudioSourceOptions(