Clean code + add language logic (not supported)

This commit is contained in:
Fransolet Thomas 2022-09-14 17:51:08 +02:00
parent 636c64297b
commit f8ef485428
7 changed files with 56 additions and 42 deletions

View File

@ -1,8 +1,8 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mymuseum_visitapp/Components/LanguageSelection.dart'; import 'package:mymuseum_visitapp/Components/LanguageSelection.dart';
import 'package:mymuseum_visitapp/Models/visitContext.dart';
import 'package:mymuseum_visitapp/Screens/Home/home.dart'; import 'package:mymuseum_visitapp/Screens/Home/home.dart';
import 'package:mymuseum_visitapp/constants.dart'; import 'package:mymuseum_visitapp/app_context.dart';
//import 'package:flutter_svg/svg.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
class CustomAppBar extends StatefulWidget implements PreferredSizeWidget { class CustomAppBar extends StatefulWidget implements PreferredSizeWidget {
@ -20,12 +20,11 @@ class CustomAppBar extends StatefulWidget implements PreferredSizeWidget {
} }
class _CustomAppBarState extends State<CustomAppBar> { class _CustomAppBarState extends State<CustomAppBar> {
final double _preferredHeight = 50;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
Size size = MediaQuery.of(context).size; final appContext = Provider.of<AppContext>(context);
//final index = Provider.of<Index>(context);
final notchInset = MediaQuery.of(context).padding; final notchInset = MediaQuery.of(context).padding;
return AppBar( return AppBar(
title: Text(widget.title), title: Text(widget.title),
@ -35,15 +34,17 @@ class _CustomAppBarState extends State<CustomAppBar> {
onPressed: () { onPressed: () {
// Set new State // Set new State
setState(() { setState(() {
VisitAppContext visitAppContext = appContext.getContext();
visitAppContext.configuration = null;
Navigator.of(context).pushReplacement(MaterialPageRoute( Navigator.of(context).pushReplacement(MaterialPageRoute(
builder: (context) => const HomePage(), builder: (context) => const HomePage(),
)); ));
}); });
} }
) : null, ) : null,
actions: [ actions: const [
Padding( Padding(
padding: const EdgeInsets.only(right: 10.0), padding: EdgeInsets.only(right: 10.0),
child: SizedBox( child: SizedBox(
width: 50, width: 50,
height: 50, height: 50,

View File

@ -4,8 +4,6 @@ import 'package:mymuseum_visitapp/Models/visitContext.dart';
import 'package:mymuseum_visitapp/app_context.dart'; import 'package:mymuseum_visitapp/app_context.dart';
import 'package:mymuseum_visitapp/constants.dart'; import 'package:mymuseum_visitapp/constants.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import '../Helpers/DatabaseHelper.dart'; import '../Helpers/DatabaseHelper.dart';
class LanguageSelection extends StatefulWidget { class LanguageSelection extends StatefulWidget {
@ -26,16 +24,15 @@ class _LanguageSelection extends State<LanguageSelection> with TickerProviderSta
Widget build(BuildContext context) { Widget build(BuildContext context) {
final appContext = Provider.of<AppContext>(context); final appContext = Provider.of<AppContext>(context);
Size size = MediaQuery.of(context).size; Size size = MediaQuery.of(context).size;
var configurationLanguages = (appContext.getContext() as VisitAppContext).configuration?.languages; VisitAppContext visitAppContext = appContext.getContext();
var configurationLanguages = visitAppContext.configuration?.languages;
//print(configurationLanguages); //print(configurationLanguages);
languagesEnable = configurationLanguages ?? languages; languagesEnable = configurationLanguages ?? languages;
selectedLanguage = (appContext.getContext() as VisitAppContext).language; selectedLanguage = visitAppContext.language;
if(!languagesEnable!.any((lg) => lg == selectedLanguage)) { if(!languagesEnable!.any((lg) => lg == selectedLanguage)) {
//print("selectedLanguage not supported");
selectedLanguage = defaultLanguage; selectedLanguage = defaultLanguage;
} }
//print(selectedLanguage);
return PopupMenuButton( return PopupMenuButton(
icon: Container( icon: Container(

View File

@ -130,9 +130,9 @@ class _ScannerDialogState extends State<ScannerDialog> {
this.controller = controller; this.controller = controller;
}); });
if (Platform.isAndroid) { if (Platform.isAndroid) {
controller!.pauseCamera(); controller.pauseCamera();
} }
controller!.resumeCamera(); controller.resumeCamera();
controller.scannedDataStream.listen((scanData) { controller.scannedDataStream.listen((scanData) {
setState(() { setState(() {
result = scanData; result = scanData;
@ -146,7 +146,7 @@ class _ScannerDialogState extends State<ScannerDialog> {
VisitAppContext visitAppContext = widget.appContext!.getContext(); VisitAppContext visitAppContext = widget.appContext!.getContext();
if(!visitAppContext!.sectionIds!.contains(code)) { if(!visitAppContext.sectionIds!.contains(code)) {
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(TranslationHelper.getFromLocale('invalidQRCode', widget.appContext!)), backgroundColor: kBlue2), SnackBar(content: Text(TranslationHelper.getFromLocale('invalidQRCode', widget.appContext!)), backgroundColor: kBlue2),
); );

View File

@ -5,6 +5,7 @@ import 'dart:io';
import 'package:auto_size_text/auto_size_text.dart'; import 'package:auto_size_text/auto_size_text.dart';
import 'package:manager_api/api.dart'; import 'package:manager_api/api.dart';
import 'package:mymuseum_visitapp/Components/ConfirmationDialog.dart';
import 'package:mymuseum_visitapp/Components/CustomAppBar.dart'; import 'package:mymuseum_visitapp/Components/CustomAppBar.dart';
import 'package:mymuseum_visitapp/Components/Loading.dart'; import 'package:mymuseum_visitapp/Components/Loading.dart';
import 'package:mymuseum_visitapp/Components/ScannerBouton.dart'; import 'package:mymuseum_visitapp/Components/ScannerBouton.dart';
@ -64,15 +65,22 @@ class _HomePageState extends State<HomePage> {
return InkWell( return InkWell(
onTap: () async { onTap: () async {
if(configurations[index].isOffline! && alreadyDownloaded.any((c) => c == configurations[index].id)) { if(configurations[index].isOffline! && alreadyDownloaded.any((c) => c == configurations[index].id)) {
// Update context
VisitAppContext visitAppContext = appContext.getContext(); VisitAppContext visitAppContext = appContext.getContext();
visitAppContext.configuration = configurations[index];
visitAppContext.sectionIds = List<SectionDTO>.from(await DatabaseHelper.instance.queryWithConfigurationId(DatabaseTableType.sections, visitAppContext.configuration!.id!)).map((e) => e.id).toList();
appContext.setContext(visitAppContext);
Navigator.of(context).pushReplacement(MaterialPageRoute( if(!configurations[index].languages!.contains(visitAppContext.language)) {
builder: (context) => VisitPage(configurationId: configurations[index].id!), ScaffoldMessenger.of(context).showSnackBar(
)); SnackBar(content: Text(TranslationHelper.getFromLocale("languageNotSupported", appContext)), backgroundColor: kBlue2),
);
} else {
// Update context
visitAppContext.configuration = configurations[index];
visitAppContext.sectionIds = List<SectionDTO>.from(await DatabaseHelper.instance.queryWithConfigurationId(DatabaseTableType.sections, visitAppContext.configuration!.id!)).map((e) => e.id).toList();
appContext.setContext(visitAppContext);
Navigator.of(context).pushReplacement(MaterialPageRoute(
builder: (context) => VisitPage(configurationId: configurations[index].id!),
));
}
} else { } else {
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(TranslationHelper.getFromLocale("visitDownloadWarning", appContext)), backgroundColor: kBlue2), SnackBar(content: Text(TranslationHelper.getFromLocale("visitDownloadWarning", appContext)), backgroundColor: kBlue2),
@ -138,9 +146,9 @@ class _HomePageState extends State<HomePage> {
} }
} }
), ),
), )
), ),
floatingActionButton: ScannerBouton(isReplacement: false, appContext: appContext!), floatingActionButton: ScannerBouton(isReplacement: false, appContext: appContext),
//floatingActionButtonLocation: FloatingActionButtonLocation.miniCenterFloat, //floatingActionButtonLocation: FloatingActionButtonLocation.miniCenterFloat,
); );
} }
@ -154,10 +162,10 @@ class _HomePageState extends State<HomePage> {
if(isOnline) { if(isOnline) {
configurations = await client.configurationApi!.configurationGet(); configurations = await client.configurationApi!.configurationGet();
return configurations ?? [];
} else {
return configurations ?? [];
} }
return configurations;
} catch (e) { } catch (e) {
print(e); print(e);
print("IN CATCH"); print("IN CATCH");
@ -242,7 +250,7 @@ class _HomePageState extends State<HomePage> {
ArticleDTO? articleDTO = ArticleDTO.fromJson(jsonDecode(section.data!)); ArticleDTO? articleDTO = ArticleDTO.fromJson(jsonDecode(section.data!));
if(articleDTO != null) { if(articleDTO != null) {
for(var image in articleDTO!.images!) { for(var image in articleDTO.images!) {
await getAndDownloadImage(appContext.clientAPI, image); await getAndDownloadImage(appContext.clientAPI, image);
} }
} }

View File

@ -128,10 +128,10 @@ class _BodyState extends State<Body> {
sectionsToDisplay = sections; sectionsToDisplay = sections;
if(searchValue != '' && searchValue != null) { if(searchValue != '' && searchValue != null) {
sectionsToDisplay = sections.where((s) => TranslationHelper.get(s!.title, appContext).toLowerCase().contains(searchValue.toString().toLowerCase())).toList(); sectionsToDisplay = sections.where((s) => TranslationHelper.get(s.title, appContext).toLowerCase().contains(searchValue.toString().toLowerCase())).toList();
} else { } else {
if(searchNumberValue != null) { if(searchNumberValue != null) {
sectionsToDisplay = sections.where((s) => s!.order!+1 == searchNumberValue).toList(); sectionsToDisplay = sections.where((s) => s.order!+1 == searchNumberValue).toList();
} else { } else {
sectionsToDisplay = sections; sectionsToDisplay = sections;
} }

View File

@ -32,7 +32,7 @@ class SectionCard extends StatelessWidget {
ResourceModel? resourceModel; ResourceModel? resourceModel;
getResource(String? imageId) async { getResource(String? imageId) async {
await DatabaseHelper.instance.queryWithColumnId(DatabaseTableType.resources, sectionDTO!.imageId!).then((value) { await DatabaseHelper.instance.queryWithColumnId(DatabaseTableType.resources, sectionDTO.imageId!).then((value) {
resourceModel = DatabaseHelper.instance.getResourceFromDB(value.first); resourceModel = DatabaseHelper.instance.getResourceFromDB(value.first);
}); });
} }
@ -124,7 +124,7 @@ class SectionCard extends StatelessWidget {
Padding( Padding(
padding: const EdgeInsets.symmetric(horizontal: kDefaultPadding), padding: const EdgeInsets.symmetric(horizontal: kDefaultPadding),
child: Text( child: Text(
sectionDTO != null ? TranslationHelper.get(sectionDTO!.title, appContext) : "", TranslationHelper.get(sectionDTO.title, appContext),
style: Theme.of(context).textTheme.button, style: Theme.of(context).textTheme.button,
), ),
), ),

View File

@ -5,48 +5,56 @@ List<Translation> translations = [
"visitTitle": "Liste des visites", "visitTitle": "Liste des visites",
"visitDownloadWarning": "Pour suivre cette visite, il faut d'abord la télécharger", "visitDownloadWarning": "Pour suivre cette visite, il faut d'abord la télécharger",
"noData": "Pas de données", "noData": "Pas de données",
"invalidQRCode": "code QR invalide" "invalidQRCode": "code QR invalide",
"languageNotSupported": "Cette visite ne prend pas en charge votre langue"
}), }),
Translation(language: "EN", data: { Translation(language: "EN", data: {
"visitTitle": "List of tours", "visitTitle": "List of tours",
"visitDownloadWarning": "To follow this tour, you must first download it", "visitDownloadWarning": "To follow this tour, you must first download it",
"noData": "No data", "noData": "No data",
"invalidQRCode": "Invalid QR code" "invalidQRCode": "Invalid QR code",
"languageNotSupported": "This tour doesn't support your language"
}), }),
Translation(language: "DE", data: { Translation(language: "DE", data: {
"visitTitle": "Liste der Touren", "visitTitle": "Liste der Touren",
"visitDownloadWarning": "Um dieser Tour zu folgen, müssen Sie sie zuerst herunterladen", "visitDownloadWarning": "Um dieser Tour zu folgen, müssen Sie sie zuerst herunterladen",
"noData": "keine Daten", "noData": "keine Daten",
"invalidQRCode": "Ungültiger QR-Code" "invalidQRCode": "Ungültiger QR-Code",
"languageNotSupported": "Diese Tour unterstützt Ihre Sprache nicht"
}), }),
Translation(language: "NL", data: { Translation(language: "NL", data: {
"visitTitle": "Lijst met rondleidingen", "visitTitle": "Lijst met rondleidingen",
"visitDownloadWarning": "Om deze tour te volgen, moet je deze eerst downloaden", "visitDownloadWarning": "Om deze tour te volgen, moet je deze eerst downloaden",
"noData": "Geen gegevens", "noData": "Geen gegevens",
"invalidQRCode": "Ongeldige QR-code" "invalidQRCode": "Ongeldige QR-code",
"languageNotSupported": "Deze tour ondersteunt je taal niet"
}), }),
Translation(language: "IT", data: { Translation(language: "IT", data: {
"visitTitle": "Elenco dei tour", "visitTitle": "Elenco dei tour",
"visitDownloadWarning": "Per seguire questo tour, devi prima scaricarlo", "visitDownloadWarning": "Per seguire questo tour, devi prima scaricarlo",
"noData": "Nessun dato", "noData": "Nessun dato",
"invalidQRCode": "Codice QR non valido" "invalidQRCode": "Codice QR non valido",
"languageNotSupported": "Questo tour non supporta la tua lingua"
}), }),
Translation(language: "ES", data: { Translation(language: "ES", data: {
"visitTitle": "Lista de recorridos", "visitTitle": "Lista de recorridos",
"visitDownloadWarning": "Para realizar este recorrido, primero debe descargarlo", "visitDownloadWarning": "Para realizar este recorrido, primero debe descargarlo",
"noData": "Sin datos", "noData": "Sin datos",
"invalidQRCode": "Código QR no válido" "invalidQRCode": "Código QR no válido",
"languageNotSupported": "Este tour no es compatible con tu idioma"
}), }),
Translation(language: "PL", data: { Translation(language: "PL", data: {
"visitTitle": "Lista wycieczek", "visitTitle": "Lista wycieczek",
"visitDownloadWarning": "Aby wziąć udział w tej wycieczce, musisz ją najpierw pobrać", "visitDownloadWarning": "Aby wziąć udział w tej wycieczce, musisz ją najpierw pobrać",
"noData": "Brak danych", "noData": "Brak danych",
"invalidQRCode": "Nieprawidłowy kod QR" "invalidQRCode": "Nieprawidłowy kod QR",
"languageNotSupported": "Ta wycieczka nie obsługuje Twojego języka"
}), }),
Translation(language: "CN", data: { Translation(language: "CN", data: {
"visitTitle": "旅游清单", "visitTitle": "旅游清单",
"visitDownloadWarning": "要参加此导览,您需要先下载它", "visitDownloadWarning": "要参加此导览,您需要先下载它",
"noData": "没有数据", "noData": "没有数据",
"invalidQRCode": "二维码无效" "invalidQRCode": "二维码无效",
"languageNotSupported": "此导览不支持您的语言"
}), }),
]; ];