~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/dialog.dart



import "package:flutter/material.dart";
import "package:only_bible_app/gen/bible.gen.dart";
import "package:only_bible_app/store/actions_navigation.dart";
import "package:only_bible_app/utils.dart";
import "package:only_bible_app/store/app_state.dart";
void showAlert(BuildContext context, String title, String message) {
showDialog(
context: context,
barrierColor: Colors.black54,
builder: (_) {
return AlertDialog(
title: Text(title),
content: Text(message),
actionsAlignment: MainAxisAlignment.center,
actionsOverflowButtonSpacing: 8.0,
actions: [
TextButton(
onPressed: () {
Navigator.of(context).pop();
},
child: const Text("OK"),
),
],
);
},
);
}
void showError(BuildContext context, String message) {
showAlert(context, "Error", message);
}
void showBibleSelectDialog(BuildContext context, Bible bible) {
showDialog(
context: context,
barrierColor: Colors.black54,
builder: (_) {
return AlertDialog(
title: Text(bible.bibleSelectTitle!),
contentPadding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12),
content: SizedBox(
width: double.maxFinite,
height: 400,
child: ListView.separated(
itemCount: bibleItems.length,
separatorBuilder: (_, __) => const Divider(height: 1),
itemBuilder: (_, index) {
final item = bibleItems.values.elementAt(index);
final isSelected = context.read().bible.name == item.fileName;
return ListTile(
selected: isSelected,
tileColor: null,
leading: const Icon(Icons.menu_book),
title: Text(item.languageNative, style: const TextStyle(fontWeight: FontWeight.w600)),
subtitle: (item.languageNative != item.languageEnglish)
? Text(item.languageEnglish, style: const TextStyle(fontSize: 15, fontWeight: FontWeight.w400))
: null,
trailing: isSelected ? const Icon(Icons.check) : null,
onTap: () {
final s = context.read();
Navigator.of(_).pop();
context.dispatch(
UpdateCurrentBibleAction(item.fileName, s.savedBook, s.savedChapter),
);
},
);
},
),
),
);
},
);
}
void showReportError(BuildContext context, String message, StackTrace? st) {
if (message.contains("LateInitializationError") || message.contains("HardwareKeyboard")) {
return;
}
showDialog(
context: context,
barrierColor: Colors.black54,
builder: (_) {
return AlertDialog(
title: const Text("Alert"),
content: const Text("An error has occurred. Do you want to report this error to us?"),
actionsAlignment: MainAxisAlignment.end,
actionsOverflowButtonSpacing: 8.0,
actions: [
TextButton(
onPressed: () {
recordError(message, st);
Navigator.of(context).pop();
showBibleSelectDialog(context, context.read().bible);
},
child: const Text("Yes"),
),
TextButton(
onPressed: () {
Navigator.of(context).pop();
showBibleSelectDialog(context, context.read().bible);
},
child: const Text("No"),
),
],
);
},
);
}