~repos /only-bible-app

#kotlin#android#ios

GIT_CONFIG_PARAMETERS="'http.version=HTTP/1.1'" git clone https://git.pyrossh.dev/only-bible-app.git
Discussions: https://groups.google.com/g/rust-embed-devs

The only bible app you will ever need. No ads. No in-app purchases. No distractions.



lib/app.dart



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}) {
final s = store.state;
_router = GoRouter(
navigatorKey: globalNavigatorKey,
initialLocation: "/chapter/${s.savedBook}/${s.savedChapter}",
routes: [
GoRoute(
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}');
if (slideDir != null) {
return CustomTransitionPage(
key: pageKey,
child: Home(bookIndex: bookIndex, chapterIndex: chapterIndex, scrollToVerse: scrollToVerse),
transitionsBuilder: (context, animation, secondaryAnimation, child) {
const begin = Offset(1.0, 0.0);
const end = Offset.zero;
const curve = Curves.ease;
final tween = Tween(begin: begin, end: end).chain(CurveTween(curve: curve));
return SlideTransition(
textDirection: slideDir,
position: animation.drive(tween),
child: child,
);
},
);
}
return NoTransitionPage(
key: pageKey,
child: Home(bookIndex: bookIndex, chapterIndex: chapterIndex, scrollToVerse: scrollToVerse),
);
},
),
],
);
}
@override
Widget build(BuildContext context) {
return StoreProvider<AppState>(
store: store,
child: AppRouterScope(
router: _router,
child: Builder(
builder: (context) => MaterialApp.router(
routerConfig: _router,
title: "Bible",
debugShowCheckedModeBanner: false,
themeMode: context.select((s) => s.darkMode) ? ThemeMode.dark : ThemeMode.light,
theme: lightTheme,
darkTheme: darkTheme,
),
),
),
);
}
}