clean code + AdminPopup + add audiosNotWorking in context

This commit is contained in:
Fransolet Thomas 2023-03-30 18:54:02 +02:00
parent ca7157af62
commit 0322716c60
6 changed files with 133 additions and 8 deletions

View File

@ -0,0 +1,73 @@
import 'package:flutter/material.dart';
import 'package:mymuseum_visitapp/Helpers/DatabaseHelper.dart';
import 'package:mymuseum_visitapp/Helpers/translationHelper.dart';
import 'package:mymuseum_visitapp/Models/visitContext.dart';
import 'package:mymuseum_visitapp/app_context.dart';
import 'package:provider/provider.dart';
import '../constants.dart';
class AdminPopup extends StatefulWidget {
const AdminPopup({
Key? key,
}) : super(key: key);
@override
State<AdminPopup> createState() => _AdminPopupState();
}
class _AdminPopupState extends State<AdminPopup> {
final TextEditingController _controller = TextEditingController();
bool isPasswordOk = false;
String password = "FORT2023!";
VisitAppContext? visitAppContext;
@override
Widget build(BuildContext context) {
Size size = MediaQuery.of(context).size;
final appContext = Provider.of<AppContext>(context);
visitAppContext = appContext.getContext() as VisitAppContext;
isPasswordOk = visitAppContext!.isAdmin!;
return Container(
width: size.width*0.65,
height: isPasswordOk ? size.height*0.1 : size.height*0.25,
margin: const EdgeInsets.all(kDefaultPadding),
child: isPasswordOk ? Column(
children: [
Text("Audios qui ne fonctionnent pas :"),
Text("TODO list"),
],
) :
Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text("Mot de passe admin"),
SizedBox(
width: size.width*0.65,
height: size.height *0.2,
child: TextFormField(
controller: _controller,
onChanged: (value) {
if(value == password) {
setState(() {
isPasswordOk = true;
visitAppContext!.isAdmin = true;
appContext.setContext(visitAppContext!);
DatabaseHelper.instance.updateTableMain(DatabaseTableType.main, visitAppContext!);
});
}
},
//style: const TextStyle(color: Colors.white),
obscureText: true,
enableSuggestions: false,
autocorrect: false,
),
),
],
),
);
}
}

View File

@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
import 'package:mymuseum_visitapp/Components/AdminPopup.dart';
import 'package:mymuseum_visitapp/Components/LanguageSelection.dart';
import 'package:mymuseum_visitapp/Models/visitContext.dart';
import 'package:mymuseum_visitapp/Screens/Home/home.dart';
@ -26,9 +27,23 @@ class _CustomAppBarState extends State<CustomAppBar> {
final appContext = Provider.of<AppContext>(context);
VisitAppContext visitAppContext = appContext.getContext();
final notchInset = MediaQuery.of(context).padding;
//final notchInset = MediaQuery.of(context).padding;
return AppBar(
title: Text(widget.title),
title:
InkWell(
onLongPress: () {
showDialog(
builder: (BuildContext context) => const AlertDialog(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(10.0))
),
content: AdminPopup(),
contentPadding: EdgeInsets.zero,
), context: context
);
},
child: Text(widget.title),
),
centerTitle: true,
leading: widget.isHomeButton ? IconButton(
icon: const Icon(Icons.home),

View File

@ -62,6 +62,9 @@ class DatabaseHelper {
static const columnSectionId = 'sectionId';
static const columnSectionType = 'sectionType';
static const columnIsAdmin = 'isAdmin';
DatabaseHelper._privateConstructor();
static final DatabaseHelper instance = DatabaseHelper._privateConstructor();
@ -151,7 +154,8 @@ class DatabaseHelper {
CREATE TABLE $mainTable (
$columnId TEXT NOT NULL PRIMARY KEY,
$columnLanguage TEXT NOT NULL,
$columnInstanceId TEXT NOT NULL
$columnInstanceId TEXT NOT NULL,
$columnIsAdmin BOOLEAN NOT NULL CHECK ($columnIsAdmin IN (0,1))
)
''');
break;
@ -227,6 +231,27 @@ class DatabaseHelper {
}
}
void updateTableMain(DatabaseTableType type, VisitAppContext visitAppContext) async {
try {
Database db = await instance.database;
var nameOfTable = _getTableName(type);
// CHECK IF EXIST
String checkQuery = "PRAGMA table_info($nameOfTable)";
var test = await db.rawQuery(checkQuery);
if(test.where((e) => e.toString().contains(columnIsAdmin)).isEmpty) {
await db.rawQuery("ALTER TABLE $nameOfTable Add $columnIsAdmin BOOLEAN CHECK ($columnIsAdmin IN (0,1))");
} else {
print("IN");
}
DatabaseHelper.instance.insert(DatabaseTableType.main, visitAppContext.toMap());
} catch (e) {
print("ERROR IN updateTableMain");
print(e);
}
}
Future<bool> isExist(DatabaseTableType type) async {
Database db = await instance.database;
var nameOfTable = _getTableName(type);
@ -283,7 +308,8 @@ class DatabaseHelper {
dataToReturn = VisitAppContext(
id: element["id"],
instanceId: element["instanceId"],
language: element["language"]
language: element["language"],
isAdmin: element["isAdmin"] == 1 ? true : false,
);
break;
case DatabaseTableType.configurations:

View File

@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:manager_api/api.dart';
import 'package:mymuseum_visitapp/Models/articleRead.dart';
import 'package:mymuseum_visitapp/Models/beaconSection.dart';
import 'package:mymuseum_visitapp/Models/resourceModel.dart';
class VisitAppContext with ChangeNotifier{
String? id = "";
@ -18,13 +19,18 @@ class VisitAppContext with ChangeNotifier{
bool isScanBeaconAlreadyAllowed = false;
bool isMaximizeTextSize = false;
VisitAppContext({this.language, this.id, this.configuration, this.instanceId});
List<ResourceModel> audiosNotWorking = [];
bool? isAdmin = false;
VisitAppContext({this.language, this.id, this.configuration, this.isAdmin, this.instanceId});
Map<String, dynamic> toMap() {
return {
'id': id,
'instanceId': instanceId,
'language': language,
'isAdmin': isAdmin
};
}
@ -39,6 +45,6 @@ class VisitAppContext with ChangeNotifier{
@override
String toString() {
return 'VisitAppContext{id: $id, instanceId: $instanceId, language: $language, configuration: $configuration, beaconSections: $beaconSections}';
return 'VisitAppContext{id: $id, instanceId: $instanceId, language: $language, configuration: $configuration, beaconSections: $beaconSections, isAdmin: $isAdmin}';
}
}

View File

@ -37,7 +37,7 @@ class _VisitPageState extends State<VisitPage> with WidgetsBindingObserver {
int timeBetweenBeaconPopUp = 20000; // 20 sec
int meterToBeacon = 100; // 15 meters
bool modeDebugBeacon = true;
bool modeDebugBeacon = false;
// Beacon specific
final controller = Get.find<RequirementStateController>();

View File

@ -12,7 +12,6 @@ class DownloadConfiguration {
static Future<bool> download(AppContext appContext, ConfigurationDTO configuration) async {
print("COUCOUCOU IIIIINNNN");
// TODO ADD POPUP LANGUAGE SELECTION
ExportConfigurationDTO? exportConfigurationDTO = await ApiService.exportConfiguration(appContext.clientAPI, configuration.id!, (appContext.getContext() as VisitAppContext).language!);
if(exportConfigurationDTO != null) {
@ -97,6 +96,12 @@ class DownloadConfiguration {
await DatabaseHelper.instance.insert(DatabaseTableType.resources, resourceModel.toMap());
} catch (e) {
print("We got an issue inserting audio data ${audioData.first.id}");
// Update context with not working audios
VisitAppContext visitAppContext = appContext.getContext() as VisitAppContext;
visitAppContext.audiosNotWorking.add(resourceModel);
visitAppContext.audiosNotWorking = visitAppContext.audiosNotWorking.toSet().toList(); // Remove duplicates
appContext.setContext(visitAppContext);
}
}
}