mirror of
https://github.com/kodjodevf/mangayomi.git
synced 2026-05-09 23:01:07 +00:00
- PageIndicator widget to display current page and total pages. - Created ReaderAppBar for navigation and chapter information. - ReaderBottomBar for page navigation and settings access. - Added ReaderGestureHandler for managing tap zones and gestures. - ReaderSettingsModal for user-configurable settings.
60 lines
1.9 KiB
Dart
60 lines
1.9 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
import 'package:mangayomi/models/chapter.dart';
|
|
import 'package:mangayomi/modules/manga/reader/providers/reader_controller_provider.dart';
|
|
import 'package:mangayomi/modules/more/settings/reader/providers/reader_state_provider.dart';
|
|
|
|
/// Page indicator widget showing current page / total pages.
|
|
///
|
|
/// Displayed at the bottom center when the UI is hidden and
|
|
/// "show page numbers" setting is enabled.
|
|
class PageIndicator extends ConsumerWidget {
|
|
/// The current chapter being read.
|
|
final Chapter chapter;
|
|
|
|
/// Whether the UI overlay is currently visible.
|
|
final bool isUiVisible;
|
|
|
|
/// Total number of pages.
|
|
final int totalPages;
|
|
|
|
/// Function to format the current index for display.
|
|
final String Function(int index) formatCurrentIndex;
|
|
|
|
const PageIndicator({
|
|
super.key,
|
|
required this.chapter,
|
|
required this.isUiVisible,
|
|
required this.totalPages,
|
|
required this.formatCurrentIndex,
|
|
});
|
|
|
|
@override
|
|
Widget build(BuildContext context, WidgetRef ref) {
|
|
final currentIndex = ref.watch(currentIndexProvider(chapter));
|
|
final showPagesNumber = ref.watch(showPagesNumberStateProvider);
|
|
|
|
// Don't show when UI is visible or setting is disabled
|
|
if (isUiVisible || !showPagesNumber) {
|
|
return const SizedBox.shrink();
|
|
}
|
|
|
|
return Align(
|
|
alignment: Alignment.bottomCenter,
|
|
child: Text(
|
|
'${formatCurrentIndex(currentIndex)} / $totalPages',
|
|
style: const TextStyle(
|
|
color: Colors.white,
|
|
fontSize: 20.0,
|
|
shadows: [
|
|
Shadow(offset: Offset(-1, -1), blurRadius: 1),
|
|
Shadow(offset: Offset(1, -1), blurRadius: 1),
|
|
Shadow(offset: Offset(1, 1), blurRadius: 1),
|
|
Shadow(offset: Offset(-1, 1), blurRadius: 1),
|
|
],
|
|
),
|
|
textAlign: TextAlign.center,
|
|
),
|
|
);
|
|
}
|
|
}
|