From c43e03def123134e464712e4b5e03d929d3db84e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maty=C3=A1=C5=A1=20Caras?= Date: Tue, 28 Nov 2023 20:09:17 +0100 Subject: [PATCH] feat: add allergies, fix stuff after flutter update --- CHANGELOG.md | 6 +++++ android/app/build.gradle | 2 +- android/app/src/main/AndroidManifest.xml | 1 + lib/l10n/app_cs.arb | 3 ++- lib/l10n/app_en.arb | 3 ++- lib/main.dart | 5 +++-- lib/okna/burza.dart | 2 +- lib/okna/jidelnicek.dart | 8 ++++--- lib/okna/login.dart | 10 +-------- lib/okna/nastaveni.dart | 28 ++++++++++++++++++++++-- lib/okna/offline_jidelnicek.dart | 2 +- lib/okna/welcome.dart | 2 +- lib/pw/platformfield.dart | 4 ++-- lib/util.dart | 1 + pubspec.yaml | 2 +- 15 files changed, 54 insertions(+), 25 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 954abf6..d586a18 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +# 1.10.0 +- Aktualizovat závislosti +- Změnit minSdk na 21 +- Přidat možnost zobrazit alergeny +- Změnit fungování oznámení s aktualizací knihovny +- Žádost o oprávnění k posílání oznámení by se mělo posílat už jen v případě, že uživatel bude chtít používat funkci oznámení # 1.9.1 - Opravit chybu s propisováním HTML do názvu obědů # 1.9.0 diff --git a/android/app/build.gradle b/android/app/build.gradle index 718fead..a9686a7 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -51,7 +51,7 @@ android { defaultConfig { applicationId "cz.hernikplays.opencanteen" - minSdkVersion 19 + minSdkVersion 21 targetSdkVersion 33 versionCode flutterVersionCode.toInteger() versionName flutterVersionName diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index ae6036b..52aa6ac 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,6 +1,7 @@ + createState() => _BurzaViewState(); diff --git a/lib/okna/jidelnicek.dart b/lib/okna/jidelnicek.dart index 60ebf83..6837597 100644 --- a/lib/okna/jidelnicek.dart +++ b/lib/okna/jidelnicek.dart @@ -18,7 +18,7 @@ import 'package:url_launcher/url_launcher.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; class MealView extends StatefulWidget { - const MealView({Key? key, required this.canteen}) : super(key: key); + const MealView({super.key, required this.canteen}); final Canteen canteen; @override State createState() => _MealViewState(); @@ -90,7 +90,7 @@ class _MealViewState extends State { try { uzivatel = await widget.canteen.ziskejUzivatele(); } catch (e) { - if (!widget.canteen.prihlasen) { + if (!widget.canteen.prihlasen && mounted) { Navigator.pushReplacement( context, platformRouter((c) => const LoginPage())); } @@ -122,7 +122,9 @@ class _MealViewState extends State { const SizedBox(width: 10), Flexible( child: Text( - j.nazev, + (settings.allergens && j.alergeny.isNotEmpty) + ? "${j.nazev} (${j.alergeny.map((e) => (e.kod != null) ? e.kod.toString() : e.nazev).join(', ')})" + : j.nazev, ), ), Text((j.naBurze) diff --git a/lib/okna/login.dart b/lib/okna/login.dart index d7d8640..d5f2d82 100644 --- a/lib/okna/login.dart +++ b/lib/okna/login.dart @@ -1,7 +1,6 @@ import 'package:canteenlib/canteenlib.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:opencanteen/okna/welcome.dart'; import 'package:opencanteen/pw/platformbutton.dart'; @@ -9,14 +8,13 @@ import 'package:opencanteen/pw/platformfield.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import '../../loginmanager.dart'; -import '../../main.dart'; import '../../util.dart'; import '../pw/platformswitch.dart'; import 'jidelnicek.dart'; import 'offline_jidelnicek.dart'; class LoginPage extends StatefulWidget { - const LoginPage({Key? key}) : super(key: key); + const LoginPage({super.key}); @override State createState() => _LoginPageState(); } @@ -33,12 +31,6 @@ class _LoginPageState extends State { void initState() { super.initState(); LoginManager.getDetails().then((r) async { - // request android notification access - flutterLocalNotificationsPlugin - .resolvePlatformSpecificImplementation< - AndroidFlutterLocalNotificationsPlugin>() - ?.requestPermission(); - if (r != null) { // Autologin showDialog( diff --git a/lib/okna/nastaveni.dart b/lib/okna/nastaveni.dart index ada6201..38bc6f7 100644 --- a/lib/okna/nastaveni.dart +++ b/lib/okna/nastaveni.dart @@ -19,7 +19,7 @@ import '../../main.dart'; import '../../util.dart'; class AndroidNastaveni extends StatefulWidget { - const AndroidNastaveni({Key? key}) : super(key: key); + const AndroidNastaveni({super.key}); @override State createState() => _AndroidNastaveniState(); @@ -31,6 +31,7 @@ class _AndroidNastaveniState extends State { bool _checkWeek = false; bool _notifyMeal = false; bool _remember = false; + bool _allergens = false; TimeOfDay _notifTime = TimeOfDay.now(); final TextEditingController _countController = TextEditingController(text: "1"); @@ -81,6 +82,16 @@ class _AndroidNastaveniState extends State { sections: [ SettingsSection( tiles: [ + SettingsTile.switchTile( + initialValue: _allergens, + onToggle: (value) { + _allergens = value; + settings.allergens = value; + changeSetting("allergens", _allergens); + setState(() {}); + }, + title: Text(AppLocalizations.of(context)!.showAllergens), + ), SettingsTile.switchTile( initialValue: _saveOffline, onToggle: (value) { @@ -281,6 +292,19 @@ class _AndroidNastaveniState extends State { ticker: 'today meal'); var l = tz.getLocation(await FlutterNativeTimezone.getLocalTimezone()); + var notifGranted = await flutterLocalNotificationsPlugin + .resolvePlatformSpecificImplementation< + AndroidFlutterLocalNotificationsPlugin>() + ?.requestNotificationsPermission() ?? + true; // request android notification access + + var granted = await flutterLocalNotificationsPlugin + .resolvePlatformSpecificImplementation< + AndroidFlutterLocalNotificationsPlugin>() + ?.requestExactAlarmsPermission() ?? + true; // request android exact alarm permission + + if (!granted || !notifGranted) return; if (!mounted) return; await flutterLocalNotificationsPlugin.zonedSchedule( // schedules a notification @@ -289,7 +313,7 @@ class _AndroidNastaveniState extends State { "${jidlo.varianta} - ${jidlo.nazev}", tz.TZDateTime.from(den, l), const NotificationDetails(android: androidSpec), - androidAllowWhileIdle: true, + androidScheduleMode: AndroidScheduleMode.exactAllowWhileIdle, uiLocalNotificationDateInterpretation: UILocalNotificationDateInterpretation.absoluteTime); } on StateError catch (_) { diff --git a/lib/okna/offline_jidelnicek.dart b/lib/okna/offline_jidelnicek.dart index d70eb39..818cf4c 100644 --- a/lib/okna/offline_jidelnicek.dart +++ b/lib/okna/offline_jidelnicek.dart @@ -14,7 +14,7 @@ import 'package:url_launcher/url_launcher.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; class OfflineMealView extends StatefulWidget { - const OfflineMealView({Key? key}) : super(key: key); + const OfflineMealView({super.key}); @override State createState() => _OfflineMealViewState(); } diff --git a/lib/okna/welcome.dart b/lib/okna/welcome.dart index 5c1b9c5..ab736d7 100644 --- a/lib/okna/welcome.dart +++ b/lib/okna/welcome.dart @@ -7,7 +7,7 @@ import 'package:opencanteen/okna/jidelnicek.dart'; import 'package:opencanteen/util.dart'; class WelcomePage extends StatefulWidget { - const WelcomePage({Key? key, required this.canteen}) : super(key: key); + const WelcomePage({super.key, required this.canteen}); final Canteen canteen; diff --git a/lib/pw/platformfield.dart b/lib/pw/platformfield.dart index 17c8b51..8f23c80 100644 --- a/lib/pw/platformfield.dart +++ b/lib/pw/platformfield.dart @@ -5,7 +5,7 @@ import 'package:opencanteen/pw/platformwidget.dart'; class PlatformField extends PlatformWidget { final TextEditingController? controller; - final bool? enabled; + final bool enabled; final bool obscureText; final String? labelText; final bool autocorrect; @@ -16,13 +16,13 @@ class PlatformField extends PlatformWidget { const PlatformField({ super.key, this.controller, - this.enabled, this.labelText, this.obscureText = false, this.autocorrect = false, this.keyboardType, this.inputFormatters = const [], this.onChanged, + this.enabled = true, this.autofillHints, }); diff --git a/lib/util.dart b/lib/util.dart index 98d893f..64b5fc1 100644 --- a/lib/util.dart +++ b/lib/util.dart @@ -128,4 +128,5 @@ class SettingsManager { bool skipWeekend = false; bool checkOrdered = false; bool saveOffline = false; + bool allergens = false; } diff --git a/pubspec.yaml b/pubspec.yaml index acd3554..25cf801 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' # The following defines the version and build number for your application. # A version number is three numbers separated by dots, like 1.2.43 # followed by an optional build number separated by a +. -version: 1.9.1+31 +version: 1.10.0+32 environment: sdk: ">=2.18.2 <3.0.0"