clean code + AdminPopup + add audiosNotWorking in context
This commit is contained in:
parent
ca7157af62
commit
0322716c60
73
lib/Components/AdminPopup.dart
Normal file
73
lib/Components/AdminPopup.dart
Normal 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,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -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),
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -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}';
|
||||
}
|
||||
}
|
||||
@ -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>();
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user