Files
Immich/mobile/lib/presentation/widgets/slideshow/slideshow_progress_bar.widget.dart
Adam Gastineau a6d43828f6 fix(mobile): rewrite slideshow controller system (#30771)
* fix(mobile): rewrite slideshow controller system

* Normalize playback status changes

* Improve preloading assets

* Added controller and widget tests

* Minor fixes from PR comments

* More minor fixes

* Move slideshow test after rename
2026-09-04 07:48:49 -07:00

35 lines
1.2 KiB
Dart

import 'package:flutter/material.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:immich_mobile/domain/models/asset/base_asset.model.dart';
import 'package:immich_mobile/extensions/build_context_extensions.dart';
import 'package:immich_mobile/providers/asset_viewer/video_player_provider.dart';
/// Bar indicating current progress through a given slide's alloted display time
class SlideshowProgressBar extends ConsumerWidget {
final BaseAsset asset;
final Animation<double> progress;
const SlideshowProgressBar({super.key, required this.asset, required this.progress});
@override
Widget build(BuildContext context, WidgetRef ref) {
final asset = this.asset;
if (asset.isImage) {
return AnimatedBuilder(animation: progress, builder: (context, _) => _bar(context, progress.value));
}
final position = ref.watch(videoPlayerProvider(asset.id).select((s) => s.position));
return _bar(context, position.inMilliseconds / asset.duration.inMilliseconds);
}
Widget _bar(BuildContext context, double value) {
return LinearProgressIndicator(
color: context.colorScheme.primary,
borderRadius: BorderRadius.zero,
minHeight: 5,
value: value,
);
}
}