🐛 Bug fixes
This commit is contained in:
@ -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(
|
||||
|
85
lib/widgets/player/devices.dart
Normal file
85
lib/widgets/player/devices.dart
Normal 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),
|
||||
);
|
||||
},
|
||||
);
|
||||
},
|
||||
);
|
||||
},
|
||||
);
|
||||
},
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
@ -67,7 +67,7 @@ class VolumeSlider extends StatelessWidget {
|
||||
}
|
||||
},
|
||||
),
|
||||
slider,
|
||||
SizedBox(width: 100, child: slider),
|
||||
],
|
||||
);
|
||||
});
|
||||
|
Reference in New Issue
Block a user