import "package:async_redux/async_redux.dart" show Store, StoreProvider;
import "package:flutter/material.dart";
import "package:go_router/go_router.dart";
import "package:only_bible_app/home.dart";
import "package:only_bible_app/store/app_navigator.dart";
import "package:only_bible_app/store/app_state.dart";
import "package:only_bible_app/theme.dart";
class App extends StatelessWidget {
final GlobalKey<NavigatorState> globalNavigatorKey;
final Store<AppState> store;
late final GoRouter _router;
App({super.key, required this.globalNavigatorKey, required this.store}) {
navigatorKey: globalNavigatorKey,
initialLocation: "/chapter/${s.savedBook}/${s.savedChapter}",
path: "/chapter/:bookIndex/:chapterIndex",
pageBuilder: (context, state) {
final bookIndex = int.parse(state.pathParameters["bookIndex"]!);
final chapterIndex = int.parse(state.pathParameters["chapterIndex"]!);
final extra = state.extra as ({TextDirection? slideDir, int? scrollToVerse, int navId})?;
final slideDir = extra?.slideDir;
final scrollToVerse = extra?.scrollToVerse;
final pageKey = ValueKey('$bookIndex-$chapterIndex-${extra?.navId ?? 0}');
return CustomTransitionPage(
child: Home(bookIndex: bookIndex, chapterIndex: chapterIndex, scrollToVerse: scrollToVerse),
transitionsBuilder: (context, animation, secondaryAnimation, child) {
const begin = Offset(1.0, 0.0);
const curve = Curves.ease;
final tween = Tween(begin: begin, end: end).chain(CurveTween(curve: curve));
position: animation.drive(tween),
child: Home(bookIndex: bookIndex, chapterIndex: chapterIndex, scrollToVerse: scrollToVerse),
Widget build(BuildContext context) {
return StoreProvider<AppState>(
builder: (context) => MaterialApp.router(
debugShowCheckedModeBanner: false,
themeMode: context.select((s) => s.darkMode) ? ThemeMode.dark : ThemeMode.light,