~repos /only-bible-app
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/widgets/settings_sheet.dart
import "package:flutter/material.dart";import "package:only_bible_app/gen/bible.gen.dart";import "package:only_bible_app/store/app_state.dart";import "package:only_bible_app/store/actions_state.dart";
class SettingsSheet extends StatelessWidget { final Bible bible;
const SettingsSheet({super.key, required this.bible});
@override Widget build(BuildContext context) { final darkMode = context.select((s) => s.darkMode); final fontWeight = context.select((s) => s.fontWeight); final engTitles = context.select((s) => s.engTitles); final fontSize = context.select((s) => s.fontSize); final colorScheme = Theme.of(context).colorScheme; final isDark = Theme.of(context).brightness == Brightness.dark; final cardColor = isDark ? colorScheme.surfaceContainerHigh : colorScheme.surface; final cardBorderColor = isDark ? colorScheme.outlineVariant : colorScheme.scrim;
return Padding( padding: const EdgeInsets.symmetric(horizontal: 20), child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( bible.settingsTitle!, style: Theme.of(context).textTheme.headlineMedium, ), const SizedBox(height: 16), // Theme toggle Material( elevation: isDark ? 2 : 1, borderRadius: BorderRadius.circular(12), color: cardColor, shadowColor: colorScheme.shadow, child: Container( padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 2), decoration: BoxDecoration( borderRadius: BorderRadius.circular(12), border: Border.all(color: cardBorderColor), ), child: Row( children: [ const Icon(Icons.color_lens_outlined, color: Colors.green), const SizedBox(width: 12), Expanded(child: Text(bible.themeTitle!)), ToggleButtons( onPressed: (_) => context.dispatch(ToggleDarkModeAction()), highlightColor: Colors.transparent, borderColor: Colors.grey, borderRadius: const BorderRadius.all(Radius.circular(25)), selectedColor: darkMode ? Colors.lightBlue.shade300 : Colors.yellowAccent.shade700, selectedBorderColor: Colors.grey, color: Colors.grey, fillColor: Colors.transparent, constraints: const BoxConstraints(minHeight: 36, minWidth: 50), isSelected: [!darkMode, darkMode], children: const [ Icon(Icons.light_mode), Icon(Icons.dark_mode), ], ), ], ), ), ), const SizedBox(height: 8), // Font size slider Material( elevation: isDark ? 2 : 1, borderRadius: BorderRadius.circular(12), color: cardColor, shadowColor: colorScheme.shadow, child: Container( padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 2), decoration: BoxDecoration( borderRadius: BorderRadius.circular(12), border: Border.all(color: cardBorderColor), ), child: Row( children: [ Icon(Icons.format_size, color: colorScheme.onSurface), const SizedBox(width: 12), Text("${fontSize.round()}"), Expanded( child: Slider( value: fontSize, min: 14, max: 26, divisions: 12, label: "${fontSize.round()}", onChanged: (v) => context.dispatch(UpdateFontSizeAction(v)), ), ), ], ), ), ), const SizedBox(height: 8), // Font weight slider Material( elevation: isDark ? 2 : 1, borderRadius: BorderRadius.circular(12), color: cardColor, shadowColor: colorScheme.shadow, child: Container( padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 2), decoration: BoxDecoration( borderRadius: BorderRadius.circular(12), border: Border.all(color: cardBorderColor), ), child: Row( children: [ Icon(Icons.format_bold, color: colorScheme.onSurface), const SizedBox(width: 12), Text("$fontWeight"), Expanded( child: Slider( value: fontWeight.toDouble(), min: 100, max: 900, divisions: 8, label: "$fontWeight", onChanged: (v) => context.dispatch(UpdateFontWeightAction(v.round())), ), ), ], ), ), ), const SizedBox(height: 8), // English titles toggle Material( elevation: isDark ? 2 : 1, borderRadius: BorderRadius.circular(12), color: cardColor, shadowColor: colorScheme.shadow, child: Container( padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 2), decoration: BoxDecoration( borderRadius: BorderRadius.circular(12), border: Border.all(color: cardBorderColor), ), child: Row( children: [ Icon(Icons.abc, color: colorScheme.onSurface), const SizedBox(width: 12), Expanded(child: Text(bible.engTitles!)), Switch( value: engTitles, onChanged: (_) => context.dispatch(ToggleEngTitlesAction()), ), ], ), ), ), const SizedBox(height: 16), Spacer(), ], ), ); }}