chore: Follow up background audio player

Signed-off-by: Christian Kußowski <c.kussowski@famedly.com>
This commit is contained in:
Christian Kußowski 2025-05-11 10:46:39 +02:00
commit b022741310
No known key found for this signature in database
GPG key ID: E067ECD60F1A0652

View file

@ -1,23 +1,23 @@
import 'dart:async'; import 'dart:async';
import 'dart:io'; import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:async/async.dart'; import 'package:async/async.dart';
import 'package:flutter_linkify/flutter_linkify.dart';
import 'package:just_audio/just_audio.dart';
import 'package:matrix/matrix.dart';
import 'package:opus_caf_converter_dart/opus_caf_converter_dart.dart';
import 'package:path_provider/path_provider.dart';
import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/config/themes.dart';
import 'package:fluffychat/utils/error_reporter.dart'; import 'package:fluffychat/utils/error_reporter.dart';
import 'package:fluffychat/utils/file_description.dart'; import 'package:fluffychat/utils/file_description.dart';
import 'package:fluffychat/utils/localized_exception_extension.dart'; import 'package:fluffychat/utils/localized_exception_extension.dart';
import 'package:fluffychat/utils/url_launcher.dart'; import 'package:fluffychat/utils/url_launcher.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_linkify/flutter_linkify.dart';
import 'package:just_audio/just_audio.dart';
import 'package:matrix/matrix.dart';
import 'package:opus_caf_converter_dart/opus_caf_converter_dart.dart';
import 'package:path_provider/path_provider.dart';
import '../../../utils/matrix_sdk_extensions/event_extension.dart'; import '../../../utils/matrix_sdk_extensions/event_extension.dart';
import '../../../widgets/fluffy_chat_app.dart';
import '../../../widgets/matrix.dart'; import '../../../widgets/matrix.dart';
class AudioPlayerWidget extends StatefulWidget { class AudioPlayerWidget extends StatefulWidget {
@ -63,38 +63,35 @@ class AudioPlayerState extends State<AudioPlayerWidget> {
ScaffoldMessenger.of(matrix.context).showMaterialBanner( ScaffoldMessenger.of(matrix.context).showMaterialBanner(
MaterialBanner( MaterialBanner(
padding: EdgeInsets.zero, padding: EdgeInsets.zero,
content: Row( leading: StreamBuilder(
children: [ stream: audioPlayer.playerStateStream.asBroadcastStream(),
StreamBuilder( builder: (context, _) => IconButton(
stream: audioPlayer.playerStateStream.asBroadcastStream(), onPressed: () {
builder: (context, _) => IconButton( if (audioPlayer.isAtEndPosition) {
onPressed: () { audioPlayer.seek(Duration.zero);
if (audioPlayer.isAtEndPosition) { } else if (audioPlayer.playing) {
audioPlayer.seek(Duration.zero); audioPlayer.pause();
} else if (audioPlayer.playing) { } else {
audioPlayer.pause(); audioPlayer.play();
} else { }
audioPlayer.play(); },
} icon: audioPlayer.playing && !audioPlayer.isAtEndPosition
}, ? const Icon(Icons.pause_outlined)
icon: audioPlayer.playing && !audioPlayer.isAtEndPosition : const Icon(Icons.play_arrow_outlined),
? const Icon(Icons.pause_outlined) ),
: const Icon(Icons.play_arrow_outlined), ),
), content: StreamBuilder(
stream: audioPlayer.positionStream.asBroadcastStream(),
builder: (context, _) => GestureDetector(
onTap: () => FluffyChatApp.router.go(
'/rooms/${widget.event.room.id}?event=${widget.event.eventId}',
), ),
Expanded( child: Text(
child: StreamBuilder( '🎙️ ${audioPlayer.position.minuteSecondString} / ${audioPlayer.duration?.minuteSecondString} - ${widget.event.senderFromMemoryOrFallback.calcDisplayname()}',
stream: audioPlayer.positionStream.asBroadcastStream(), maxLines: 1,
builder: (context, _) { overflow: TextOverflow.ellipsis,
return Text(
'🎙️ ${audioPlayer.position.minuteSecondString} / ${audioPlayer.duration?.minuteSecondString} - ${widget.event.senderFromMemoryOrFallback.calcDisplayname()}',
maxLines: 1,
overflow: TextOverflow.ellipsis,
);
},
),
), ),
], ),
), ),
actions: [ actions: [
IconButton( IconButton(