Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions assets/lang/en.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
{
"title": "Yahrtzeit Manager",
"upcoming": "Upcoming",
"manage": "Manage",
"groups": "Groups",
"settings": "Settings",
"language": "Language",
"sync_settings": "Sync Settings",
"notifications": "Notifications",
"upcoming_yahrtzeits": "Upcoming Yahrtzeits",
"manage_yahrzeits": "Manage Yahrtzeits",
"English Name":"English Name",
"Add Yahrtzeit":"Add Yahrtzeit",
"Hebrew Name":"Hebrew Name",
"Please enter English name":"Please enter English name",
"Please enter Hebrew name":"Please enter Hebrew name",
"Select Date":"Select Date",
"Save":"Save",
"Update":"Update",
"Edit Yahrtzeit":"Edit Yahrtzeit",
"Details":"Details",
"Groups":"Groups",
"Jewish Name":"Jewish Name",
"Full Name":"Full Name",
"days_before":"days_before",
"years":"years",
"jewish_language":"jewish_language",
"calendar_settings":"calendar_settings",
"Google Calendar":"Google Calendar",
"Device Calendar":"Device Calendar"


}

33 changes: 33 additions & 0 deletions assets/lang/he.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
{
"title": "מנהל יארצייט",
"upcoming": "קרובים",
"manage": "ניהול",
"groups": "קבוצות",
"settings": "הגדרות",
"language": "שפה",
"sync_settings": "הגדרות סנכרון",
"notifications": "התראות",
"upcoming_yahrtzeits": "יארצייט קרובים",
"manage_yahrzeits": "ניהול יארצייט",
"English Name":"שם באנגלית",
"Add Yahrtzeit":"הוסף יארצייט",
"Hebrew Name":"שם בעברית",
"Please enter English name":"נא להכניס שם באנגלית",
"Please enter Hebrew name":"נא להכניס שם בעברית",
"Select Date":"בחר תאריך",
"Save":"שמור ",
"Update":"עדכן",
"Edit Yahrtzeit":"עריכה",
"Details":"פרטים",
"Groups":"קבוצות",
"Jewish Name":"שם יהודי",
"Full Name":"שם מלא ",
"days_before":"מספר ימים לפני קבלת ההתראה",
"years":"שנים",
"jewish_language":"שפה יהודית",
"calendar_settings":"הגדרות לוח",
"Google Calendar":"לוח גוגל",
"Device Calendar":"יומן הפלאפון"

}

181 changes: 140 additions & 41 deletions lib/home_page.dart
Original file line number Diff line number Diff line change
@@ -1,15 +1,122 @@
import 'package:flutter/material.dart';
// import 'package:flutter/material.dart';
// import 'settings/settings.dart';
// import 'views/groups_page.dart';
// import 'views/manage_yahrtzeits.dart';
// import 'views/upcoming_yahrtzeits.dart';
// import '../localizations/app_localizations.dart';

// class HomePage extends StatefulWidget {
// bool syncSettings;
// bool notifications;
// String language;
// String jewishLanguage;
// String calendar;
// int years;
// int days;
// final VoidCallback toggleSyncSettings;
// final VoidCallback toggleNotifications;
// final Function(String) changeLanguage;
// final Function(String) changeJewishLanguage;
// final Function(String) changeCalendar;
// final Function(int) changeYears;
// final Function(int) changeDays;

// HomePage({
// required this.syncSettings,
// required this.notifications,
// required this.language,
// required this.jewishLanguage,
// required this.calendar,
// required this.years,
// required this.days,
// required this.toggleSyncSettings,
// required this.toggleNotifications,
// required this.changeLanguage,
// required this.changeJewishLanguage,
// required this.changeCalendar,
// required this.changeYears,
// required this.changeDays,
// });

// @override
// _HomePageState createState() => _HomePageState();
// }

// class _HomePageState extends State<HomePage> {
// int _selectedIndex = 0;

// @override
// Widget build(BuildContext context) {
// return Scaffold(
// body: IndexedStack(
// index: _selectedIndex,
// children: <Widget>[
// UpcomingYahrtzeits(),
// ManageYahrtzeits(),
// GroupsPage(),
// SettingsPage(
// syncSettings: widget.syncSettings,
// notifications: widget.notifications,
// language: widget.language,
// jewishLanguage: widget.jewishLanguage,
// calendar: widget.calendar,
// years: widget.years,
// days: widget.days,
// toggleSyncSettings: widget.toggleSyncSettings,
// toggleNotifications: widget.toggleNotifications,
// changeLanguage: widget.changeLanguage,
// changeJewishLanguage: widget.changeJewishLanguage,
// changeCalendar: widget.changeCalendar,
// changeYears: widget.changeYears,
// changeDays: widget.changeDays,
// ),
// ],
// ),
// bottomNavigationBar: BottomNavigationBar(
// items: const <BottomNavigationBarItem>[
// BottomNavigationBarItem(
// icon: Icon(Icons.calendar_today),
// label:'Upcoming',
// ),
// BottomNavigationBarItem(
// icon: Icon(Icons.manage_accounts),
// label: 'Manage',
// ),
// BottomNavigationBarItem(
// icon: Icon(Icons.group),
// label: 'Groups',
// ),
// BottomNavigationBarItem(
// icon: Icon(Icons.settings),
// label: 'Settings',
// ),
// ],
// currentIndex: _selectedIndex,
// selectedItemColor: Colors.blue,
// unselectedItemColor: Colors.grey,
// onTap: (index) {
// setState(() {
// _selectedIndex = index;
// });
// },
// ),
// );
// }
// }

import 'package:flutter/material.dart';
import 'settings/settings.dart';
import 'views/groups_page.dart';
import 'views/manage_yahrtzeits.dart';
import 'views/upcoming_yahrtzeits.dart';
import '../localizations/app_localizations.dart';

class HomePage extends StatefulWidget {
bool syncSettings = true;
bool notifications = true;
String language = 'en';
String jewishLanguage = 'he';
String calendar = 'he';
bool syncSettings;
bool notifications;
String language;
String jewishLanguage;
String calendar;
int years;
int days;
final VoidCallback toggleSyncSettings;
Expand All @@ -36,31 +143,24 @@ class HomePage extends StatefulWidget {
required this.changeYears,
required this.changeDays,
});

@override
_HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
int _selectedIndex = 0;

static List<Widget> _widgetOptions = <Widget>[
UpcomingYahrtzeits(),
ManageYahrtzeits(),
ManageYahrtzeits(),
//SettingsPage(),
];

void _onItemTapped(int index) {
setState(() {
_selectedIndex = index;
});
}

void navigateToSettingsPage() {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => SettingsPage(
@override
Widget build(BuildContext context) {
return Scaffold(
body: IndexedStack(
index: _selectedIndex,
children: <Widget>[
UpcomingYahrtzeits(),
ManageYahrtzeits(),
GroupsPage(),
SettingsPage(
syncSettings: widget.syncSettings,
notifications: widget.notifications,
language: widget.language,
Expand All @@ -76,38 +176,37 @@ class _HomePageState extends State<HomePage> {
changeYears: widget.changeYears,
changeDays: widget.changeDays,
),
));
}

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: IconButton(
icon: Icon(Icons.settings),
onPressed: navigateToSettingsPage,
),
],
),
body: _widgetOptions.elementAt(_selectedIndex),
bottomNavigationBar: BottomNavigationBar(
items: const <BottomNavigationBarItem>[
items: <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: Icon(Icons.calendar_today),
label: 'Upcoming',
label: AppLocalizations.of(context)!.translate('upcoming'),
),
BottomNavigationBarItem(
icon: Icon(Icons.manage_accounts),
label: 'Manage',
label: AppLocalizations.of(context)!.translate('manage'),
),
BottomNavigationBarItem(
icon: Icon(Icons.group),
label: AppLocalizations.of(context)!.translate('groups'),
),
BottomNavigationBarItem(
icon: Icon(Icons.settings),
label: 'Settings',
label: AppLocalizations.of(context)!.translate('settings'),
),
],
currentIndex: _selectedIndex,
selectedItemColor: Colors.blue,
onTap: _onItemTapped,
unselectedItemColor: Colors.grey,
onTap: (index) {
setState(() {
_selectedIndex = index;
});
},
),
);
}
}

68 changes: 68 additions & 0 deletions lib/localizations/app_localizations.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:shared_preferences/shared_preferences.dart';

class AppLocalizations {
final Locale locale;
late Map<String, String> _localizedStrings;

AppLocalizations(this.locale);

static AppLocalizations? of(BuildContext context) {
return Localizations.of<AppLocalizations>(context, AppLocalizations);
}

Future<void> load() async {
String jsonString = await rootBundle.loadString('assets/lang/${locale.languageCode}.json');
Map<String, dynamic> jsonMap = json.decode(jsonString);
_localizedStrings = jsonMap.map((key, value) => MapEntry(key, value.toString()));
}

String translate(String key) {
return _localizedStrings[key] ?? key;
}

static const LocalizationsDelegate<AppLocalizations> delegate = _AppLocalizationsDelegate();
}

class _AppLocalizationsDelegate extends LocalizationsDelegate<AppLocalizations> {
const _AppLocalizationsDelegate();

@override
bool isSupported(Locale locale) {
return ['en', 'he'].contains(locale.languageCode);
}

@override
Future<AppLocalizations> load(Locale locale) async {
AppLocalizations localizations = AppLocalizations(locale);
await localizations.load();
return localizations;
}

@override
bool shouldReload(_AppLocalizationsDelegate old) => false;
}

class LocaleProvider with ChangeNotifier {
Locale _locale = Locale('en');

Locale get locale => _locale;

void setLocale(Locale locale) async {
_locale = locale;
notifyListeners();
SharedPreferences prefs = await SharedPreferences.getInstance();
await prefs.setString('languageCode', locale.languageCode);
}

Future<void> loadLocale() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
String? languageCode = prefs.getString('languageCode');
if (languageCode != null) {
_locale = Locale(languageCode);
}
notifyListeners();
}
}
Loading