manager-app/lib/Screens/Configurations/Section/section_detail_screen.dart
2025-05-22 16:59:29 +02:00

777 lines
36 KiB
Dart

import 'dart:convert';
import 'dart:ui';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/services.dart';
import 'package:manager_app/Components/check_input_container.dart';
import 'package:manager_app/Components/confirmation_dialog.dart';
import 'package:manager_app/Components/fetch_section_icon.dart';
import 'package:manager_app/Components/resource_input_container.dart';
import 'package:manager_app/Components/common_loader.dart';
import 'package:manager_app/Components/message_notification.dart';
import 'package:manager_app/Components/multi_string_input_container.dart';
import 'package:manager_app/Components/number_input_container.dart';
import 'package:manager_app/Components/rounded_button.dart';
import 'package:manager_app/Components/string_input_container.dart';
import 'package:manager_app/Models/managerContext.dart';
import 'package:manager_app/Screens/Configurations/Section/SubSection/Video/video_config.dart';
import 'package:manager_app/Screens/Configurations/Section/SubSection/WebOrVideo/web_config.dart';
import 'package:manager_app/app_context.dart';
import 'package:manager_app/client.dart';
import 'package:manager_app/constants.dart';
import 'package:manager_api_new/api.dart';
import 'package:provider/provider.dart';
import 'package:intl/intl.dart';
import 'SubSection/Agenda/agenda_config.dart';
import 'SubSection/Article/article_config.dart';
import 'SubSection/Article/download_pdf.dart';
import 'SubSection/Map/map_config.dart';
import 'SubSection/Menu/menu_config.dart';
import 'SubSection/PDF/PDF_config.dart';
import 'SubSection/Puzzle/puzzle_config.dart';
import 'SubSection/Quizz/quizz_config.dart';
import 'SubSection/Slider/slider_config.dart';
import 'package:qr_flutter/qr_flutter.dart';
import 'package:pasteboard/pasteboard.dart';
import 'dart:html' as html;
import 'SubSection/Weather/weather_config.dart';
class SectionDetailScreen extends StatefulWidget {
final String id;
SectionDetailScreen({Key? key, required this.id}) : super(key: key);
@override
_SectionDetailScreenState createState() => _SectionDetailScreenState();
}
class _SectionDetailScreenState extends State<SectionDetailScreen> {
late SectionDTO sectionDTO;
late Object sectionDetailDTO;
@override
Widget build(BuildContext context) {
final appContext = Provider.of<AppContext>(context);
Size size = MediaQuery.of(context).size;
GlobalKey globalKey = new GlobalKey();
Object? rawSectionData;
return FutureBuilder(
future: getSection(widget.id, (appContext.getContext() as ManagerAppContext).clientAPI!),
builder: (context, AsyncSnapshot<dynamic> snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
rawSectionData = snapshot.data;
var nullableSection = SectionDTO.fromJson(rawSectionData);
if(nullableSection != null) {
sectionDTO = nullableSection;
return Stack(
children: [
bodySection(rawSectionData, size, appContext, context, globalKey),
Align(
alignment: AlignmentDirectional.bottomCenter,
child: Container(
height: 80,
child: getButtons(sectionDTO, appContext),
),
)
],
);
} else {
return Center(child: Text("Une erreur est survenue lors de la récupération de la section"));
}
} else if (snapshot.connectionState == ConnectionState.none) {
return Text("No data");
} else {
return Center(
child: Container(
height: size.height * 0.2,
child: CommonLoader()
)
);
}
}
);
}
Widget bodySection(Object? rawSectionDTO, Size size, AppContext appContext, BuildContext context, GlobalKey globalKey) {
ManagerAppContext managerAppContext = appContext.getContext();
//SectionDTO? sectionDTO = SectionDTO.fromJson(rawSectionDTO);
return SingleChildScrollView(
child: Column(
//mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
Container(
//color: Colors.orangeAccent,
height: 82,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Align(
alignment: AlignmentDirectional.bottomStart,
child: Padding(
padding: const EdgeInsets.all(3.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Padding(
padding: const EdgeInsets.all(8.0),
child: Icon(
getSectionIcon(sectionDTO.type),
color: kPrimaryColor,
size: 25,
),
),
Text(sectionDTO.label!, style: TextStyle(fontSize: 30, fontWeight: FontWeight.w400)),
if((appContext.getContext() as ManagerAppContext).selectedConfiguration!.isMobile!)
DownloadPDF(sections: [sectionDTO]),
],
),
Padding(
padding: const EdgeInsets.all(5.0),
child: Text(DateFormat('dd/MM/yyyy').format(sectionDTO.dateCreation!), style: TextStyle(fontSize: 15, fontWeight: FontWeight.w200)),
),
],
),
)
),
Padding(
padding: const EdgeInsets.all(5.0),
child: Align(
alignment: AlignmentDirectional.centerEnd,
child: InkWell(
onTap: () {
ManagerAppContext managerAppContext = appContext.getContext();
managerAppContext.selectedSection = null;
appContext.setContext(managerAppContext);
},
child: Container(
child: Icon(
Icons.arrow_back,
color: kPrimaryColor,
size: 50.0,
)
)
),
),
)
],
),
), // TITLE
Container(
//color: Colors.blue,
child: Padding(
padding: const EdgeInsets.all(5.0),
child: Container(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceAround,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
if((appContext.getContext() as ManagerAppContext).selectedConfiguration!.isMobile!)
Column(
mainAxisAlignment: MainAxisAlignment.spaceAround,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
InkWell(
onTap: () async {
var image = await _captureAndSharePng(globalKey, sectionDTO.id!);
await readAndWriteFiles(image);
showNotification(kSuccess, kWhite, 'Ce QR code a été copié dans le presse papier', context, null);
},
child: Container(
width: size.width *0.1,
height: 125,
child: RepaintBoundary(
key: globalKey,
child: QrImageView(
padding: EdgeInsets.only(left: 5.0, top: 5.0, bottom: 5.0, right: 5.0),
data: "${managerAppContext.host!.replaceFirst("api", "web")}/${managerAppContext.instanceId}/${managerAppContext.selectedConfiguration!.id}/${sectionDTO.id!}",
version: QrVersions.auto,
size: 50.0,
),
),
),
),
SelectableText(sectionDTO.id!, style: new TextStyle(fontSize: 15))
],
),
CheckInputContainer(
label: "Beacon :",
isChecked: sectionDTO.isBeacon!,
fontSize: 25,
onChanged: (value) {
setState(() {
sectionDTO.isBeacon = value;
save(false, appContext);
});
},
),
if(sectionDTO.isBeacon!)
NumberInputContainer(
label: "Identifiant Beacon :",
initialValue: sectionDTO.beaconId != null ? sectionDTO.beaconId! : 0,
isSmall: true,
onChanged: (value) {
try {
sectionDTO.beaconId = int.parse(value);
} catch (e) {
print('BeaconId not a number');
showNotification(Colors.orange, kWhite, 'Cela doit être un chiffre', context, null);
}
},
),
],
),
Column(
mainAxisAlignment: MainAxisAlignment.spaceAround,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(
height: 100,
child: StringInputContainer(
label: "Identifiant :",
initialValue: sectionDTO.label,
onChanged: (String value) {
sectionDTO.label = value;
},
),
),
MultiStringInputContainer(
label: "Titre affiché:",
modalLabel: "Titre",
color: kPrimaryColor,
initialValue: sectionDTO.title!,
onGetResult: (value) {
if (sectionDTO.title! != value) {
sectionDTO.title = value;
save(true, appContext);
}
},
maxLines: 1,
isHTML: true,
isTitle: true,
),
if(!(appContext.getContext() as ManagerAppContext).selectedConfiguration!.isMobile!)
MultiStringInputContainer(
label: "Description affichée:",
modalLabel: "Description",
color: kPrimaryColor,
isHTML: true,
initialValue: sectionDTO.description!,
isMandatory: false,
onGetResult: (value) {
if (sectionDTO.description != value) {
sectionDTO.description = value!;
save(true, appContext);
}
},
maxLines: 2,
isTitle: true,
),
],
),
Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
ResourceInputContainer(
label: "Image :",
initialValue: sectionDTO.imageId,
color: kPrimaryColor,
onChanged: (ResourceDTO resource) {
if(resource.id == null) {
sectionDTO.imageId = null;
sectionDTO.imageSource = null;
} else {
sectionDTO.imageId = resource.id;
sectionDTO.imageSource = resource.url;
}
},
),
],
)
],
),
),
],
),
),
),
),// FIELDS SECTION
Container(
//width: size.width * 0.8,
height: size.height * 0.5,
child: Padding(
padding: const EdgeInsets.all(10.0),
child: getSpecificData(rawSectionDTO, appContext),
),
decoration: BoxDecoration(
//color: Colors.lightGreen,
borderRadius: BorderRadius.circular(30),
border: Border.all(width: 1.5, color: kSecond)
),
),
],
),
);
}
getButtons(SectionDTO sectionDTO, AppContext appContext) {
return Align(
alignment: AlignmentDirectional.bottomCenter,
child: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
Padding(
padding: const EdgeInsets.all(10.0),
child: RoundedButton(
text: "Annuler",
icon: Icons.undo,
color: Colors.grey,
textColor: Colors.white,
fontSize: 15,
press: () {
cancel(appContext);
},
),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: RoundedButton(
text: "Supprimer",
icon: Icons.delete,
color: kError,
textColor: Colors.white,
fontSize: 15,
press: () {
delete(appContext);
},
),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: RoundedButton(
text: "Sauvegarder",
icon: Icons.done,
color: kSuccess,
textColor: Colors.white,
fontSize: 15,
press: () {
save(false, appContext);
},
),
),
],
),
);
}
Future<void> cancel(AppContext appContext) async {
ManagerAppContext managerAppContext = appContext.getContext();
Object? rawData = await (appContext.getContext() as ManagerAppContext).clientAPI!.sectionApi!.sectionGetDetail(sectionDTO.id!);
var nullableSection = SectionDTO.fromJson(rawData);
if(nullableSection != null)
{
managerAppContext.selectedSection = nullableSection!;
appContext.setContext(managerAppContext);
}
}
Future<void> delete(AppContext appContext) async {
showConfirmationDialog(
"Êtes-vous sûr de vouloir supprimer cette section ?",
() {},
() async {
ManagerAppContext managerAppContext = appContext.getContext();
await managerAppContext.clientAPI!.sectionApi!.sectionDelete(sectionDTO.id!);
managerAppContext.selectedSection = null;
appContext.setContext(managerAppContext);
},
context
);
}
Future<void> save(bool isTraduction, AppContext appContext) async {
updateSectionDetail();
var sectionResult = await (appContext.getContext() as ManagerAppContext).clientAPI!.sectionApi!.sectionUpdate(sectionDetailDTO);
SectionDTO? section = SectionDTO.fromJson(sectionResult);
ManagerAppContext managerAppContext = appContext.getContext();
managerAppContext.selectedSection = section;
appContext.setContext(managerAppContext);
if (isTraduction) {
showNotification(kSuccess, kWhite, 'Les traductions de la section ont été sauvegardées avec succès', context, null);
} else {
showNotification(kSuccess, kWhite, 'La section a été sauvegardée avec succès', context, null);
}
}
getSpecificData(Object? rawSectionData, AppContext appContext) {
switch(sectionDTO.type) {
case SectionType.Map:
MapDTO mapDTO = MapDTO.fromJson(rawSectionData)!;
sectionDetailDTO = mapDTO;
return MapConfig(
initialValue: mapDTO,
onChanged: (MapDTO changedMap) {
sectionDetailDTO = changedMap;
},
);
case SectionType.Slider:
SliderDTO sliderDTO = SliderDTO.fromJson(rawSectionData)!;
sectionDetailDTO = sliderDTO;
return SliderConfig(
initialValue: sliderDTO,
onChanged: (SliderDTO changedSlider) {
sectionDetailDTO = changedSlider;
},
);
case SectionType.Video:
VideoDTO videoDTO = VideoDTO.fromJson(rawSectionData)!;
sectionDetailDTO = videoDTO;
return VideoConfig(
label: "Url de la vidéo:",
initialValue: videoDTO,
onChanged: (VideoDTO updatedWebDTO) {
sectionDetailDTO = updatedWebDTO;
},
);
case SectionType.Web:
WebDTO webDTO = WebDTO.fromJson(rawSectionData)!;
sectionDetailDTO = webDTO;
return WebConfig(
label: "Url du site web:",
initialValue: webDTO,
onChanged: (WebDTO updatedWebDTO) {
sectionDetailDTO = updatedWebDTO;
},
);
case SectionType.Menu:
MenuDTO menuDTO = MenuDTO.fromJson(rawSectionData)!;
sectionDetailDTO = menuDTO;
return MenuConfig(
initialValue: menuDTO,
onChanged: (String data) {
//sectionDTO.data = data;
},
);
case SectionType.Quiz:
QuizDTO quizDTO = QuizDTO.fromJson(rawSectionData)!;
sectionDetailDTO = quizDTO;
return QuizzConfig(
initialValue: quizDTO,
onChanged: (QuizDTO updatedQuiz) {
sectionDetailDTO = updatedQuiz;
},
);
case SectionType.Article:
ArticleDTO articleDTO = ArticleDTO.fromJson(rawSectionData)!;
sectionDetailDTO = articleDTO;
return ArticleConfig(
initialValue: articleDTO,
onChanged: (ArticleDTO changedArticle)
{
sectionDetailDTO = changedArticle;
},
);
case SectionType.Pdf:
PdfDTO pdfDTO = PdfDTO.fromJson(rawSectionData)!;
sectionDetailDTO = pdfDTO;
return PDFConfig(
initialValue: pdfDTO,
onChanged: (PdfDTO changedPDF) {
sectionDetailDTO = changedPDF;
},
);
case SectionType.Puzzle:
PuzzleDTO puzzleDTO = PuzzleDTO.fromJson(rawSectionData)!;
sectionDetailDTO = puzzleDTO;
return PuzzleConfig(
initialValue: puzzleDTO,
onChanged: (PuzzleDTO updatedPuzzle) {
sectionDetailDTO = updatedPuzzle;
},
);
case SectionType.Agenda:
AgendaDTO agendaDTO = AgendaDTO.fromJson(rawSectionData)!;
sectionDetailDTO = agendaDTO;
return AgendaConfig(
initialValue: agendaDTO,
onChanged: (AgendaDTO updatedAgenda) {
sectionDetailDTO = updatedAgenda;
},
);
case SectionType.Weather:
WeatherDTO weatherDTO = WeatherDTO.fromJson(rawSectionData)!;
sectionDetailDTO = weatherDTO;
return WeatherConfig(
initialValue: weatherDTO,
onChanged: (WeatherDTO updatedWeather) {
sectionDetailDTO = updatedWeather;
},
);
}
}
updateSectionDetail() {
switch(sectionDTO.type)
{
case SectionType.Map:
(sectionDetailDTO as MapDTO).id = sectionDTO.id;
(sectionDetailDTO as MapDTO).order = sectionDTO.order;
(sectionDetailDTO as MapDTO).dateCreation = sectionDTO.dateCreation;
(sectionDetailDTO as MapDTO).type = sectionDTO.type;
(sectionDetailDTO as MapDTO).instanceId = sectionDTO.instanceId;
(sectionDetailDTO as MapDTO).configurationId = sectionDTO.configurationId;
(sectionDetailDTO as MapDTO).isSubSection = sectionDTO.isSubSection;
(sectionDetailDTO as MapDTO).parentId = sectionDTO.parentId;
(sectionDetailDTO as MapDTO).label = sectionDTO.label;
(sectionDetailDTO as MapDTO).title = sectionDTO.title;
(sectionDetailDTO as MapDTO).description = sectionDTO.description;
(sectionDetailDTO as MapDTO).imageId = sectionDTO.imageId;
(sectionDetailDTO as MapDTO).imageSource = sectionDTO.imageSource;
(sectionDetailDTO as MapDTO).isBeacon = sectionDTO.isBeacon;
(sectionDetailDTO as MapDTO).beaconId = sectionDTO.beaconId;
(sectionDetailDTO as MapDTO).latitude = sectionDTO.latitude;
(sectionDetailDTO as MapDTO).longitude = sectionDTO.longitude;
(sectionDetailDTO as MapDTO).meterZoneGPS = sectionDTO.meterZoneGPS;
break;
case SectionType.Slider:
(sectionDetailDTO as SliderDTO).id = sectionDTO.id;
(sectionDetailDTO as SliderDTO).order = sectionDTO.order;
(sectionDetailDTO as SliderDTO).dateCreation = sectionDTO.dateCreation;
(sectionDetailDTO as SliderDTO).type = sectionDTO.type;
(sectionDetailDTO as SliderDTO).instanceId = sectionDTO.instanceId;
(sectionDetailDTO as SliderDTO).configurationId = sectionDTO.configurationId;
(sectionDetailDTO as SliderDTO).isSubSection = sectionDTO.isSubSection;
(sectionDetailDTO as SliderDTO).parentId = sectionDTO.parentId;
(sectionDetailDTO as SliderDTO).label = sectionDTO.label;
(sectionDetailDTO as SliderDTO).title = sectionDTO.title;
(sectionDetailDTO as SliderDTO).description = sectionDTO.description;
(sectionDetailDTO as SliderDTO).imageId = sectionDTO.imageId;
(sectionDetailDTO as SliderDTO).imageSource = sectionDTO.imageSource;
(sectionDetailDTO as SliderDTO).isBeacon = sectionDTO.isBeacon;
(sectionDetailDTO as SliderDTO).beaconId = sectionDTO.beaconId;
(sectionDetailDTO as SliderDTO).latitude = sectionDTO.latitude;
(sectionDetailDTO as SliderDTO).longitude = sectionDTO.longitude;
(sectionDetailDTO as SliderDTO).meterZoneGPS = sectionDTO.meterZoneGPS;
break;
case SectionType.Video:
(sectionDetailDTO as VideoDTO).id = sectionDTO.id;
(sectionDetailDTO as VideoDTO).order = sectionDTO.order;
(sectionDetailDTO as VideoDTO).dateCreation = sectionDTO.dateCreation;
(sectionDetailDTO as VideoDTO).type = sectionDTO.type;
(sectionDetailDTO as VideoDTO).instanceId = sectionDTO.instanceId;
(sectionDetailDTO as VideoDTO).configurationId = sectionDTO.configurationId;
(sectionDetailDTO as VideoDTO).isSubSection = sectionDTO.isSubSection;
(sectionDetailDTO as VideoDTO).parentId = sectionDTO.parentId;
(sectionDetailDTO as VideoDTO).label = sectionDTO.label;
(sectionDetailDTO as VideoDTO).title = sectionDTO.title;
(sectionDetailDTO as VideoDTO).description = sectionDTO.description;
(sectionDetailDTO as VideoDTO).imageId = sectionDTO.imageId;
(sectionDetailDTO as VideoDTO).imageSource = sectionDTO.imageSource;
(sectionDetailDTO as VideoDTO).isBeacon = sectionDTO.isBeacon;
(sectionDetailDTO as VideoDTO).beaconId = sectionDTO.beaconId;
(sectionDetailDTO as VideoDTO).latitude = sectionDTO.latitude;
(sectionDetailDTO as VideoDTO).longitude = sectionDTO.longitude;
(sectionDetailDTO as VideoDTO).meterZoneGPS = sectionDTO.meterZoneGPS;
break;
case SectionType.Web:
(sectionDetailDTO as WebDTO).id = sectionDTO.id;
(sectionDetailDTO as WebDTO).order = sectionDTO.order;
(sectionDetailDTO as WebDTO).dateCreation = sectionDTO.dateCreation;
(sectionDetailDTO as WebDTO).type = sectionDTO.type;
(sectionDetailDTO as WebDTO).instanceId = sectionDTO.instanceId;
(sectionDetailDTO as WebDTO).configurationId = sectionDTO.configurationId;
(sectionDetailDTO as WebDTO).isSubSection = sectionDTO.isSubSection;
(sectionDetailDTO as WebDTO).parentId = sectionDTO.parentId;
(sectionDetailDTO as WebDTO).label = sectionDTO.label;
(sectionDetailDTO as WebDTO).title = sectionDTO.title;
(sectionDetailDTO as WebDTO).description = sectionDTO.description;
(sectionDetailDTO as WebDTO).imageId = sectionDTO.imageId;
(sectionDetailDTO as WebDTO).imageSource = sectionDTO.imageSource;
(sectionDetailDTO as WebDTO).isBeacon = sectionDTO.isBeacon;
(sectionDetailDTO as WebDTO).beaconId = sectionDTO.beaconId;
(sectionDetailDTO as WebDTO).latitude = sectionDTO.latitude;
(sectionDetailDTO as WebDTO).longitude = sectionDTO.longitude;
(sectionDetailDTO as WebDTO).meterZoneGPS = sectionDTO.meterZoneGPS;
break;
case SectionType.Menu:
(sectionDetailDTO as MenuDTO).id = sectionDTO.id;
(sectionDetailDTO as MenuDTO).order = sectionDTO.order;
(sectionDetailDTO as MenuDTO).dateCreation = sectionDTO.dateCreation;
(sectionDetailDTO as MenuDTO).type = sectionDTO.type;
(sectionDetailDTO as MenuDTO).instanceId = sectionDTO.instanceId;
(sectionDetailDTO as MenuDTO).configurationId = sectionDTO.configurationId;
(sectionDetailDTO as MenuDTO).isSubSection = sectionDTO.isSubSection;
(sectionDetailDTO as MenuDTO).parentId = sectionDTO.parentId;
(sectionDetailDTO as MenuDTO).label = sectionDTO.label;
(sectionDetailDTO as MenuDTO).title = sectionDTO.title;
(sectionDetailDTO as MenuDTO).description = sectionDTO.description;
(sectionDetailDTO as MenuDTO).imageId = sectionDTO.imageId;
(sectionDetailDTO as MenuDTO).imageSource = sectionDTO.imageSource;
(sectionDetailDTO as MenuDTO).isBeacon = sectionDTO.isBeacon;
(sectionDetailDTO as MenuDTO).beaconId = sectionDTO.beaconId;
(sectionDetailDTO as MenuDTO).latitude = sectionDTO.latitude;
(sectionDetailDTO as MenuDTO).longitude = sectionDTO.longitude;
(sectionDetailDTO as MenuDTO).meterZoneGPS = sectionDTO.meterZoneGPS;
break;
case SectionType.Quiz:
(sectionDetailDTO as QuizDTO).id = sectionDTO.id;
(sectionDetailDTO as QuizDTO).order = sectionDTO.order;
(sectionDetailDTO as QuizDTO).dateCreation = sectionDTO.dateCreation;
(sectionDetailDTO as QuizDTO).type = sectionDTO.type;
(sectionDetailDTO as QuizDTO).instanceId = sectionDTO.instanceId;
(sectionDetailDTO as QuizDTO).configurationId = sectionDTO.configurationId;
(sectionDetailDTO as QuizDTO).isSubSection = sectionDTO.isSubSection;
(sectionDetailDTO as QuizDTO).parentId = sectionDTO.parentId;
(sectionDetailDTO as QuizDTO).label = sectionDTO.label;
(sectionDetailDTO as QuizDTO).title = sectionDTO.title;
(sectionDetailDTO as QuizDTO).description = sectionDTO.description;
(sectionDetailDTO as QuizDTO).imageId = sectionDTO.imageId;
(sectionDetailDTO as QuizDTO).imageSource = sectionDTO.imageSource;
(sectionDetailDTO as QuizDTO).isBeacon = sectionDTO.isBeacon;
(sectionDetailDTO as QuizDTO).beaconId = sectionDTO.beaconId;
(sectionDetailDTO as QuizDTO).latitude = sectionDTO.latitude;
(sectionDetailDTO as QuizDTO).longitude = sectionDTO.longitude;
(sectionDetailDTO as QuizDTO).meterZoneGPS = sectionDTO.meterZoneGPS;
break;
case SectionType.Pdf:
(sectionDetailDTO as PdfDTO).id = sectionDTO.id;
(sectionDetailDTO as PdfDTO).order = sectionDTO.order;
(sectionDetailDTO as PdfDTO).dateCreation = sectionDTO.dateCreation;
(sectionDetailDTO as PdfDTO).type = sectionDTO.type;
(sectionDetailDTO as PdfDTO).instanceId = sectionDTO.instanceId;
(sectionDetailDTO as PdfDTO).configurationId = sectionDTO.configurationId;
(sectionDetailDTO as PdfDTO).isSubSection = sectionDTO.isSubSection;
(sectionDetailDTO as PdfDTO).parentId = sectionDTO.parentId;
(sectionDetailDTO as PdfDTO).label = sectionDTO.label;
(sectionDetailDTO as PdfDTO).title = sectionDTO.title;
(sectionDetailDTO as PdfDTO).description = sectionDTO.description;
(sectionDetailDTO as PdfDTO).imageId = sectionDTO.imageId;
(sectionDetailDTO as PdfDTO).imageSource = sectionDTO.imageSource;
(sectionDetailDTO as PdfDTO).isBeacon = sectionDTO.isBeacon;
(sectionDetailDTO as PdfDTO).beaconId = sectionDTO.beaconId;
(sectionDetailDTO as PdfDTO).latitude = sectionDTO.latitude;
(sectionDetailDTO as PdfDTO).longitude = sectionDTO.longitude;
(sectionDetailDTO as PdfDTO).meterZoneGPS = sectionDTO.meterZoneGPS;
break;
case SectionType.Puzzle:
(sectionDetailDTO as PuzzleDTO).id = sectionDTO.id;
(sectionDetailDTO as PuzzleDTO).order = sectionDTO.order;
(sectionDetailDTO as PuzzleDTO).dateCreation = sectionDTO.dateCreation;
(sectionDetailDTO as PuzzleDTO).type = sectionDTO.type;
(sectionDetailDTO as PuzzleDTO).instanceId = sectionDTO.instanceId;
(sectionDetailDTO as PuzzleDTO).configurationId = sectionDTO.configurationId;
(sectionDetailDTO as PuzzleDTO).isSubSection = sectionDTO.isSubSection;
(sectionDetailDTO as PuzzleDTO).parentId = sectionDTO.parentId;
(sectionDetailDTO as PuzzleDTO).label = sectionDTO.label;
(sectionDetailDTO as PuzzleDTO).title = sectionDTO.title;
(sectionDetailDTO as PuzzleDTO).description = sectionDTO.description;
(sectionDetailDTO as PuzzleDTO).imageId = sectionDTO.imageId;
(sectionDetailDTO as PuzzleDTO).imageSource = sectionDTO.imageSource;
(sectionDetailDTO as PuzzleDTO).isBeacon = sectionDTO.isBeacon;
(sectionDetailDTO as PuzzleDTO).beaconId = sectionDTO.beaconId;
(sectionDetailDTO as PuzzleDTO).latitude = sectionDTO.latitude;
(sectionDetailDTO as PuzzleDTO).longitude = sectionDTO.longitude;
(sectionDetailDTO as PuzzleDTO).meterZoneGPS = sectionDTO.meterZoneGPS;
break;
case SectionType.Agenda:
(sectionDetailDTO as AgendaDTO).id = sectionDTO.id;
(sectionDetailDTO as AgendaDTO).order = sectionDTO.order;
(sectionDetailDTO as AgendaDTO).dateCreation = sectionDTO.dateCreation;
(sectionDetailDTO as AgendaDTO).type = sectionDTO.type;
(sectionDetailDTO as AgendaDTO).instanceId = sectionDTO.instanceId;
(sectionDetailDTO as AgendaDTO).configurationId = sectionDTO.configurationId;
(sectionDetailDTO as AgendaDTO).isSubSection = sectionDTO.isSubSection;
(sectionDetailDTO as AgendaDTO).parentId = sectionDTO.parentId;
(sectionDetailDTO as AgendaDTO).label = sectionDTO.label;
(sectionDetailDTO as AgendaDTO).title = sectionDTO.title;
(sectionDetailDTO as AgendaDTO).description = sectionDTO.description;
(sectionDetailDTO as AgendaDTO).imageId = sectionDTO.imageId;
(sectionDetailDTO as AgendaDTO).imageSource = sectionDTO.imageSource;
(sectionDetailDTO as AgendaDTO).isBeacon = sectionDTO.isBeacon;
(sectionDetailDTO as AgendaDTO).beaconId = sectionDTO.beaconId;
(sectionDetailDTO as AgendaDTO).latitude = sectionDTO.latitude;
(sectionDetailDTO as AgendaDTO).longitude = sectionDTO.longitude;
(sectionDetailDTO as AgendaDTO).meterZoneGPS = sectionDTO.meterZoneGPS;
break;
case SectionType.Weather:
(sectionDetailDTO as WeatherDTO).id = sectionDTO.id;
(sectionDetailDTO as WeatherDTO).order = sectionDTO.order;
(sectionDetailDTO as WeatherDTO).dateCreation = sectionDTO.dateCreation;
(sectionDetailDTO as WeatherDTO).type = sectionDTO.type;
(sectionDetailDTO as WeatherDTO).instanceId = sectionDTO.instanceId;
(sectionDetailDTO as WeatherDTO).configurationId = sectionDTO.configurationId;
(sectionDetailDTO as WeatherDTO).isSubSection = sectionDTO.isSubSection;
(sectionDetailDTO as WeatherDTO).parentId = sectionDTO.parentId;
(sectionDetailDTO as WeatherDTO).label = sectionDTO.label;
(sectionDetailDTO as WeatherDTO).title = sectionDTO.title;
(sectionDetailDTO as WeatherDTO).description = sectionDTO.description;
(sectionDetailDTO as WeatherDTO).imageId = sectionDTO.imageId;
(sectionDetailDTO as WeatherDTO).imageSource = sectionDTO.imageSource;
(sectionDetailDTO as WeatherDTO).isBeacon = sectionDTO.isBeacon;
(sectionDetailDTO as WeatherDTO).beaconId = sectionDTO.beaconId;
(sectionDetailDTO as WeatherDTO).latitude = sectionDTO.latitude;
(sectionDetailDTO as WeatherDTO).longitude = sectionDTO.longitude;
(sectionDetailDTO as WeatherDTO).meterZoneGPS = sectionDTO.meterZoneGPS;
break;
}
}
}
Future<Object?> getSection(String sectionId, Client client) async {
try{
Object? section = await client.sectionApi!.sectionGetDetail(sectionId);
return section;
} catch(e) {
print(e);
return null;
}
}
Future<Uint8List?> _captureAndSharePng(GlobalKey globalKey, String sectionId) async {
try {
RenderRepaintBoundary ? boundary = globalKey.currentContext!.findRenderObject()! as RenderRepaintBoundary;
var image = await boundary.toImage();
ByteData? byteData = await image.toByteData(format: ImageByteFormat.png);
Uint8List pngBytes = byteData!.buffer.asUint8List();
final base64data = base64.encode(pngBytes);
final a = html.AnchorElement(href: 'data:image/jpeg;base64,$base64data');
a.download = '$sectionId.jpg';
a.click();
return pngBytes;
} catch(e) {
print(e.toString());
return null;
}
}
Future<void> readAndWriteFiles(Uint8List? image) async {
await Pasteboard.writeImage(image);
final files = await Pasteboard.files();
print(files);
}