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:flutter/material.dart';
|
||||||
|
import 'package:mymuseum_visitapp/Components/AdminPopup.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/Models/visitContext.dart';
|
||||||
import 'package:mymuseum_visitapp/Screens/Home/home.dart';
|
import 'package:mymuseum_visitapp/Screens/Home/home.dart';
|
||||||
@ -26,9 +27,23 @@ class _CustomAppBarState extends State<CustomAppBar> {
|
|||||||
final appContext = Provider.of<AppContext>(context);
|
final appContext = Provider.of<AppContext>(context);
|
||||||
VisitAppContext visitAppContext = appContext.getContext();
|
VisitAppContext visitAppContext = appContext.getContext();
|
||||||
|
|
||||||
final notchInset = MediaQuery.of(context).padding;
|
//final notchInset = MediaQuery.of(context).padding;
|
||||||
return AppBar(
|
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,
|
centerTitle: true,
|
||||||
leading: widget.isHomeButton ? IconButton(
|
leading: widget.isHomeButton ? IconButton(
|
||||||
icon: const Icon(Icons.home),
|
icon: const Icon(Icons.home),
|
||||||
|
|||||||
@ -62,6 +62,9 @@ class DatabaseHelper {
|
|||||||
static const columnSectionId = 'sectionId';
|
static const columnSectionId = 'sectionId';
|
||||||
static const columnSectionType = 'sectionType';
|
static const columnSectionType = 'sectionType';
|
||||||
|
|
||||||
|
static const columnIsAdmin = 'isAdmin';
|
||||||
|
|
||||||
|
|
||||||
DatabaseHelper._privateConstructor();
|
DatabaseHelper._privateConstructor();
|
||||||
static final DatabaseHelper instance = DatabaseHelper._privateConstructor();
|
static final DatabaseHelper instance = DatabaseHelper._privateConstructor();
|
||||||
|
|
||||||
@ -151,7 +154,8 @@ class DatabaseHelper {
|
|||||||
CREATE TABLE $mainTable (
|
CREATE TABLE $mainTable (
|
||||||
$columnId TEXT NOT NULL PRIMARY KEY,
|
$columnId TEXT NOT NULL PRIMARY KEY,
|
||||||
$columnLanguage TEXT NOT NULL,
|
$columnLanguage TEXT NOT NULL,
|
||||||
$columnInstanceId TEXT NOT NULL
|
$columnInstanceId TEXT NOT NULL,
|
||||||
|
$columnIsAdmin BOOLEAN NOT NULL CHECK ($columnIsAdmin IN (0,1))
|
||||||
)
|
)
|
||||||
''');
|
''');
|
||||||
break;
|
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 {
|
Future<bool> isExist(DatabaseTableType type) async {
|
||||||
Database db = await instance.database;
|
Database db = await instance.database;
|
||||||
var nameOfTable = _getTableName(type);
|
var nameOfTable = _getTableName(type);
|
||||||
@ -283,7 +308,8 @@ class DatabaseHelper {
|
|||||||
dataToReturn = VisitAppContext(
|
dataToReturn = VisitAppContext(
|
||||||
id: element["id"],
|
id: element["id"],
|
||||||
instanceId: element["instanceId"],
|
instanceId: element["instanceId"],
|
||||||
language: element["language"]
|
language: element["language"],
|
||||||
|
isAdmin: element["isAdmin"] == 1 ? true : false,
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
case DatabaseTableType.configurations:
|
case DatabaseTableType.configurations:
|
||||||
|
|||||||
@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:manager_api/api.dart';
|
import 'package:manager_api/api.dart';
|
||||||
import 'package:mymuseum_visitapp/Models/articleRead.dart';
|
import 'package:mymuseum_visitapp/Models/articleRead.dart';
|
||||||
import 'package:mymuseum_visitapp/Models/beaconSection.dart';
|
import 'package:mymuseum_visitapp/Models/beaconSection.dart';
|
||||||
|
import 'package:mymuseum_visitapp/Models/resourceModel.dart';
|
||||||
|
|
||||||
class VisitAppContext with ChangeNotifier{
|
class VisitAppContext with ChangeNotifier{
|
||||||
String? id = "";
|
String? id = "";
|
||||||
@ -18,13 +19,18 @@ class VisitAppContext with ChangeNotifier{
|
|||||||
bool isScanBeaconAlreadyAllowed = false;
|
bool isScanBeaconAlreadyAllowed = false;
|
||||||
bool isMaximizeTextSize = 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() {
|
Map<String, dynamic> toMap() {
|
||||||
return {
|
return {
|
||||||
'id': id,
|
'id': id,
|
||||||
'instanceId': instanceId,
|
'instanceId': instanceId,
|
||||||
'language': language,
|
'language': language,
|
||||||
|
'isAdmin': isAdmin
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -39,6 +45,6 @@ class VisitAppContext with ChangeNotifier{
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
String toString() {
|
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 timeBetweenBeaconPopUp = 20000; // 20 sec
|
||||||
int meterToBeacon = 100; // 15 meters
|
int meterToBeacon = 100; // 15 meters
|
||||||
bool modeDebugBeacon = true;
|
bool modeDebugBeacon = false;
|
||||||
|
|
||||||
// Beacon specific
|
// Beacon specific
|
||||||
final controller = Get.find<RequirementStateController>();
|
final controller = Get.find<RequirementStateController>();
|
||||||
|
|||||||
@ -12,7 +12,6 @@ class DownloadConfiguration {
|
|||||||
static Future<bool> download(AppContext appContext, ConfigurationDTO configuration) async {
|
static Future<bool> download(AppContext appContext, ConfigurationDTO configuration) async {
|
||||||
|
|
||||||
print("COUCOUCOU IIIIINNNN");
|
print("COUCOUCOU IIIIINNNN");
|
||||||
// TODO ADD POPUP LANGUAGE SELECTION
|
|
||||||
ExportConfigurationDTO? exportConfigurationDTO = await ApiService.exportConfiguration(appContext.clientAPI, configuration.id!, (appContext.getContext() as VisitAppContext).language!);
|
ExportConfigurationDTO? exportConfigurationDTO = await ApiService.exportConfiguration(appContext.clientAPI, configuration.id!, (appContext.getContext() as VisitAppContext).language!);
|
||||||
|
|
||||||
if(exportConfigurationDTO != null) {
|
if(exportConfigurationDTO != null) {
|
||||||
@ -97,6 +96,12 @@ class DownloadConfiguration {
|
|||||||
await DatabaseHelper.instance.insert(DatabaseTableType.resources, resourceModel.toMap());
|
await DatabaseHelper.instance.insert(DatabaseTableType.resources, resourceModel.toMap());
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
print("We got an issue inserting audio data ${audioData.first.id}");
|
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