🐛 Bug fixes

This commit is contained in:
2024-08-30 21:53:40 +08:00
parent 1ac7704080
commit 47d051dd44
9 changed files with 125 additions and 29 deletions

View File

@ -44,6 +44,11 @@ Future<void> main(List<String> rawArgs) async {
if (PlatformInfo.isDesktop) {
await windowManager.ensureInitialized();
await windowManager.setPreventClose(true);
if (PlatformInfo.isMacOS) {
await windowManager.setTitleBarStyle(TitleBarStyle.hidden);
} else {
await windowManager.setTitleBarStyle(TitleBarStyle.normal);
}
}
if (PlatformInfo.isWindows) {
await SMTCWindows.initialize();

View File

@ -11,9 +11,12 @@ class AboutScreen extends StatelessWidget {
const denseButtonStyle =
ButtonStyle(visualDensity: VisualDensity(vertical: -4));
return Material(
color: Theme.of(context).colorScheme.surface,
child: SizedBox(
return Scaffold(
backgroundColor: Theme.of(context).colorScheme.surface,
appBar: AppBar(
title: const Text('About'),
),
body: SizedBox(
width: double.infinity,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,

View File

@ -132,12 +132,13 @@ class _MiniPlayerScreenState extends State<MiniPlayerScreen> {
await windowManager.setAlwaysOnTop(
snapshot.data == true ? false : true,
);
setState(() {});
},
);
},
),
],
).paddingSymmetric(horizontal: 24),
).paddingSymmetric(horizontal: 14),
),
),
),

View File

@ -9,7 +9,7 @@ class SystemShell extends StatelessWidget {
@override
Widget build(BuildContext context) {
if (PlatformInfo.isDesktop) {
if (PlatformInfo.isMacOS) {
return DragToMoveArea(
child: Column(
children: [

View File

@ -10,6 +10,7 @@ import 'package:rhythm_box/providers/audio_player.dart';
import 'package:rhythm_box/services/audio_services/image.dart';
import 'package:rhythm_box/widgets/auto_cache_image.dart';
import 'package:rhythm_box/widgets/player/controls.dart';
import 'package:rhythm_box/widgets/player/devices.dart';
import 'package:rhythm_box/widgets/player/track_details.dart';
import 'package:rhythm_box/widgets/tracks/querying_track_info.dart';
import 'package:rhythm_box/widgets/volume_slider.dart';
@ -163,6 +164,16 @@ class _BottomPlayerState extends State<BottomPlayer>
child: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
IconButton(
icon: const Icon(Icons.speaker, size: 18),
onPressed: () {
showModalBottomSheet(
useRootNavigator: true,
context: context,
builder: (context) => const PlayerDevicePopup(),
);
},
),
if (!widget.isMiniPlayer && PlatformInfo.isDesktop)
IconButton(
icon: const Icon(

View File

@ -0,0 +1,85 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:media_kit/media_kit.dart';
import 'package:rhythm_box/services/audio_player/audio_player.dart';
class PlayerDevicePopup extends StatefulWidget {
const PlayerDevicePopup({super.key});
@override
State<PlayerDevicePopup> createState() => _PlayerDevicePopupState();
}
class _PlayerDevicePopupState extends State<PlayerDevicePopup> {
late Future<List<AudioDevice>> devicesFuture;
late Stream<List<AudioDevice>> devicesStream;
late Future<AudioDevice> selectedDeviceFuture;
late Stream<AudioDevice> selectedDeviceStream;
@override
void initState() {
super.initState();
devicesFuture = audioPlayer.devices;
devicesStream = audioPlayer.devicesStream;
selectedDeviceFuture = audioPlayer.selectedDevice;
selectedDeviceStream = audioPlayer.selectedDeviceStream;
}
@override
Widget build(BuildContext context) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'Devices',
style: Theme.of(context).textTheme.headlineSmall,
).paddingOnly(left: 24, right: 24, top: 32, bottom: 16),
Expanded(
child: StreamBuilder<List<AudioDevice>>(
stream: devicesStream,
builder: (context, devicesSnapshot) {
return FutureBuilder<List<AudioDevice>>(
future: devicesFuture,
builder: (context, devicesFutureSnapshot) {
final devices =
devicesSnapshot.data ?? devicesFutureSnapshot.data;
return StreamBuilder<AudioDevice>(
stream: selectedDeviceStream,
builder: (context, selectedDeviceSnapshot) {
return FutureBuilder<AudioDevice>(
future: selectedDeviceFuture,
builder: (context, selectedDeviceFutureSnapshot) {
final selectedDevice = selectedDeviceSnapshot.data ??
selectedDeviceFutureSnapshot.data;
if (devices == null || selectedDevice == null) {
return const CircularProgressIndicator();
}
return ListView.builder(
itemCount: devices.length,
itemBuilder: (context, idx) {
final device = devices[idx];
return ListTile(
leading: const Icon(Icons.speaker),
title: Text(device.description),
subtitle: Text(device.name),
selected: selectedDevice == device,
onTap: () => audioPlayer.setAudioDevice(device),
);
},
);
},
);
},
);
},
);
},
),
),
],
);
}
}

View File

@ -67,7 +67,7 @@ class VolumeSlider extends StatelessWidget {
}
},
),
slider,
SizedBox(width: 100, child: slider),
],
);
});