Skip to content

Commit

Permalink
improve locale settings
Browse files Browse the repository at this point in the history
  • Loading branch information
pyrossh committed Aug 25, 2023
1 parent 6bdbc40 commit a6934a6
Show file tree
Hide file tree
Showing 5 changed files with 125 additions and 183 deletions.
93 changes: 2 additions & 91 deletions lib/models.dart
Original file line number Diff line number Diff line change
@@ -1,20 +1,17 @@
import "package:flutter/material.dart";
import "package:flutter_gen/gen_l10n/app_localizations.dart";
import "package:only_bible_app/providers/app_model.dart";

class Bible {
final int id;
final String name;
final bool hasAudio;
List<Book> books = [];

Bible({
required this.id,
required this.name,
required this.hasAudio,
});

Bible.withBooks({
required this.id,
required this.name,
required this.hasAudio,
required this.books,
Expand All @@ -31,78 +28,6 @@ class Bible {
List<Book> getNewBooks() {
return books.where((it) => it.isNewTestament()).toList();
}

static List<String> getBookNames(BuildContext context) {
final l = AppLocalizations.of(context)!;
return [
l.genesis,
l.exodus,
l.leviticus,
l.numbers,
l.deuteronomy,
l.joshua,
l.judges,
l.ruth,
l.firstSamuel,
l.secondSamuel,
l.firstKings,
l.secondKings,
l.firstChronicles,
l.secondChronicles,
l.ezra,
l.nehemiah,
l.esther,
l.job,
l.psalms,
l.proverbs,
l.ecclesiastes,
l.song_of_solomon,
l.isaiah,
l.jeremiah,
l.lamentations,
l.ezekiel,
l.daniel,
l.hosea,
l.joel,
l.amos,
l.obadiah,
l.jonah,
l.micah,
l.nahum,
l.habakkuk,
l.zephaniah,
l.haggai,
l.zechariah,
l.malachi,
l.matthew,
l.mark,
l.luke,
l.john,
l.acts,
l.romans,
l.firstCorinthians,
l.secondCorinthians,
l.galatians,
l.ephesians,
l.philippians,
l.colossians,
l.firstThessalonians,
l.secondThessalonians,
l.firstTimothy,
l.secondTimothy,
l.titus,
l.philemon,
l.hebrews,
l.james,
l.firstPeter,
l.secondPeter,
l.firstJohn,
l.secondJohn,
l.thirdJohn,
l.jude,
l.revelation,
];
}
}

class Book {
Expand All @@ -115,7 +40,7 @@ class Book {
});

String name(BuildContext context) {
return Bible.getBookNames(context)[index];
return AppModel.of(context).getBookNames(context)[index];
}

bool isOldTestament() => index < 39;
Expand Down Expand Up @@ -146,20 +71,6 @@ class Verse {
const Verse({required this.index, required this.text, required this.chapter, required this.book});
}

final bibles = [
Bible(id: 1, name: "English", hasAudio: false),
Bible(id: 2, name: "Kannada", hasAudio: true),
Bible(id: 3, name: "Nepali", hasAudio: false),
Bible(id: 4, name: "Hindi", hasAudio: false),
Bible(id: 5, name: "Gujarati", hasAudio: false),
Bible(id: 6, name: "Malayalam", hasAudio: false),
Bible(id: 7, name: "Oriya", hasAudio: false),
Bible(id: 8, name: "Punjabi", hasAudio: false),
Bible(id: 9, name: "Tamil", hasAudio: false),
Bible(id: 10, name: "Telugu", hasAudio: false),
Bible(id: 11, name: "Bengali", hasAudio: false),
];

List<Book> getBibleFromText(String text) {
final List<Book> books = [];
final lines = text.split("\n");
Expand Down
118 changes: 91 additions & 27 deletions lib/providers/app_model.dart
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
// import "package:firebase_performance/firebase_performance.dart";
import "package:flutter_gen/gen_l10n/app_localizations.dart";
import "package:flutter/services.dart";
import "package:flutter/material.dart";
import "package:only_bible_app/screens/bible_select_screen.dart";
import "package:only_bible_app/screens/book_select_screen.dart";
import "package:only_bible_app/models.dart";
import "package:only_bible_app/screens/locale_select_screen.dart";
import "package:only_bible_app/widgets/actions_sheet.dart";
import "package:only_bible_app/widgets/highlight_button.dart";
import "package:only_bible_app/widgets/scaffold_markdown.dart";
Expand All @@ -27,8 +27,9 @@ class HistoryFrame {

class AppModel extends ChangeNotifier {
late PackageInfo packageInfo;
Locale locale = const Locale("en");
Bible bible = bibles.first;
late Bible bible;
late Locale locale;
bool engTitles = false;
bool darkMode = false;
bool fontBold = false;
double textScaleFactor = 0;
Expand All @@ -48,7 +49,7 @@ class AppModel extends ChangeNotifier {

save() async {
final prefs = await SharedPreferences.getInstance();
await prefs.setInt("bibleId", bible.id);
await prefs.setString("bibleName", bible.name);
await prefs.setBool("darkMode", darkMode);
await prefs.setBool("fontBold", fontBold);
await prefs.setDouble("textScaleFactor", textScaleFactor);
Expand All @@ -58,44 +59,105 @@ class AppModel extends ChangeNotifier {
Future<(int, int)> loadData() async {
packageInfo = await PackageInfo.fromPlatform();
final prefs = await SharedPreferences.getInstance();
final bibleId = prefs.getInt("bibleId") ?? 1;
darkMode = prefs.getBool("darkMode") ?? false;
fontBold = prefs.getBool("fontBold") ?? false;
textScaleFactor = prefs.getDouble("textScaleFactor") ?? 1;
locale = Locale(prefs.getString("languageCode") ?? "en");
bible = await loadBible(bibleId);
bible = await loadBible(prefs.getString("bibleName") ?? "English");
// await Future.delayed(Duration(seconds: 3));
final book = prefs.getInt("book") ?? 0;
final chapter = prefs.getInt("chapter") ?? 0;
updateStatusBar();
return (book, chapter);
}

Future<Bible> loadBible(int id) async {
final selectedBible = bibles.firstWhere((it) => it.id == id);
Future<Bible> loadBible(String name) async {
// Trace customTrace;
// if (!isDesktop()) {
// customTrace = FirebasePerformance.instance.newTrace("loadBible");
// await customTrace.start();
// }
final books = await getBibleFromAsset(selectedBible.name);
final books = await getBibleFromAsset(name);
// if (!isDesktop()) {
// await customTrace.stop();
// }
return Bible.withBooks(
id: selectedBible.id,
name: selectedBible.name,
hasAudio: selectedBible.hasAudio,
name: name,
hasAudio: true,
books: books,
);
}

changeLocale(BuildContext context) {
Navigator.of(context).pushReplacement(
createNoTransitionPageRoute(
const LocaleSelectScreen(),
),
);
List<String> getBookNames(BuildContext context) {
final l = engTitles ? lookupAppLocalizations(Locale("en")) : AppLocalizations.of(context)!;
return [
l.genesis,
l.exodus,
l.leviticus,
l.numbers,
l.deuteronomy,
l.joshua,
l.judges,
l.ruth,
l.firstSamuel,
l.secondSamuel,
l.firstKings,
l.secondKings,
l.firstChronicles,
l.secondChronicles,
l.ezra,
l.nehemiah,
l.esther,
l.job,
l.psalms,
l.proverbs,
l.ecclesiastes,
l.song_of_solomon,
l.isaiah,
l.jeremiah,
l.lamentations,
l.ezekiel,
l.daniel,
l.hosea,
l.joel,
l.amos,
l.obadiah,
l.jonah,
l.micah,
l.nahum,
l.habakkuk,
l.zephaniah,
l.haggai,
l.zechariah,
l.malachi,
l.matthew,
l.mark,
l.luke,
l.john,
l.acts,
l.romans,
l.firstCorinthians,
l.secondCorinthians,
l.galatians,
l.ephesians,
l.philippians,
l.colossians,
l.firstThessalonians,
l.secondThessalonians,
l.firstTimothy,
l.secondTimothy,
l.titus,
l.philemon,
l.hebrews,
l.james,
l.firstPeter,
l.secondPeter,
l.firstJohn,
l.secondJohn,
l.thirdJohn,
l.jude,
l.revelation,
];
}

changeBible(BuildContext context) {
Expand All @@ -114,15 +176,11 @@ class AppModel extends ChangeNotifier {
);
}

updateCurrentLocale(Locale l) async {
locale = l;
notifyListeners();
save();
}

updateCurrentBible(BuildContext context, int id) async {
// TODO: maybe don't pass name here
updateCurrentBible(BuildContext context, Locale l, String name) async {
// TODO: maybe use a future as the bible needs to load
bible = await loadBible(id);
locale = l;
bible = await loadBible(name);
notifyListeners();
save();
}
Expand All @@ -135,13 +193,19 @@ class AppModel extends ChangeNotifier {
);
}

toggleMode() async {
toggleDarkMode() {
darkMode = !darkMode;
updateStatusBar();
notifyListeners();
save();
}

toggleEngBookNames() {
engTitles = !engTitles;
notifyListeners();
save();
}

updateStatusBar() {
if (darkMode) {
SystemChrome.setSystemUIOverlayStyle(const SystemUiOverlayStyle(
Expand Down
31 changes: 23 additions & 8 deletions lib/screens/bible_select_screen.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import "package:flutter/material.dart";
import "package:only_bible_app/models.dart";
import "package:flutter_gen/gen_l10n/app_localizations.dart";
import "package:only_bible_app/providers/app_model.dart";
import "package:only_bible_app/widgets/scaffold_menu.dart";
import "package:only_bible_app/widgets/sliver_heading.dart";
Expand All @@ -19,13 +19,28 @@ class BibleSelectScreen extends StatelessWidget {
SliverTileGrid(
listType: ListType.large,
children: List.of(
bibles.map((bible) {
return TextButton(
child: Text(bible.name),
onPressed: () {
model.updateCurrentBible(context, bible.id);
Navigator.of(context).pop();
},
AppLocalizations.supportedLocales.map((l) {
return Localizations.override(
context: context,
locale: Locale(l.languageCode),
child: Builder(
builder: (context) {
final bibleName = AppLocalizations.of(context)!.languageTitle;
return TextButton(
child: Text(bibleName),
// child: Column(
// children: [
// Text(l.name),
// // Text("(${l.localName})"),
// ],
// ),
onPressed: () {
AppModel.ofEvent(context).updateCurrentBible(context, l, bibleName);
Navigator.of(context).pop();
},
);
},
),
);
}),
),
Expand Down
Loading

0 comments on commit a6934a6

Please sign in to comment.