import 'package:auto_size_text/auto_size_text.dart'; import 'package:flutter/material.dart'; import 'package:manager_app/Components/common_loader.dart'; import 'package:manager_app/Components/confirmation_dialog.dart'; import 'package:manager_app/Components/message_notification.dart'; import 'package:manager_app/Models/managerContext.dart'; import 'package:manager_app/Screens/Applications/add_configuration_link_popup.dart'; import 'package:manager_app/Screens/Applications/phone_mockup.dart'; import 'package:manager_app/Screens/Devices/device_element.dart'; import 'package:manager_app/app_context.dart'; import 'package:manager_app/constants.dart'; import 'package:manager_api_new/api.dart'; import 'package:provider/provider.dart'; class AppConfigurationLinkScreen extends StatefulWidget { final ApplicationInstanceDTO applicationInstanceDTO; AppConfigurationLinkScreen({Key? key, required this.applicationInstanceDTO}) : super(key: key); @override _AppConfigurationLinkScreenState createState() => _AppConfigurationLinkScreenState(); } class _AppConfigurationLinkScreenState extends State { @override Widget build(BuildContext context) { final appContext = Provider.of(context); Size size = MediaQuery.of(context).size; ManagerAppContext managerAppContext = appContext.getContext() as ManagerAppContext; return FutureBuilder( future: getAppConfigurationLink(appContext, widget.applicationInstanceDTO), builder: (context, AsyncSnapshot snapshot) { var test = snapshot.data; List? appConfigurationLinks = snapshot.data; if (snapshot.connectionState == ConnectionState.done) { return Container( child: Align( alignment: AlignmentDirectional.topCenter, child: appConfigurationLinks != null ? SingleChildScrollView( child: Column( children: [ InkWell( onTap: () async { // Show configuration selector to link with ! var result = await showAddConfigurationLink(context, appContext, managerAppContext.instanceDTO!, appConfigurationLinks.map((acl) => acl.configurationId!).toList() ?? []); if(result != null) { for(var configurationId in result) { AppConfigurationLinkDTO appConfigurationLinkDTO = AppConfigurationLinkDTO(applicationInstanceId: widget.applicationInstanceDTO.id, configurationId: configurationId, isActive: true); await addConfigurationToApp(appContext, appConfigurationLinkDTO, widget.applicationInstanceDTO); } setState(() { // Refresh ui }); } }, child: Container( height: 50, width: 50, color: kPrimaryColor, child: Text("ADD CONFIG TO APP") ), ), PhoneMockup( child: Center( child: GridView.builder( shrinkWrap: true, gridDelegate: new SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 6), itemCount: appConfigurationLinks.length, itemBuilder: (BuildContext context, int index) { AppConfigurationLinkDTO appConfigurationLink = appConfigurationLinks[index]; return Container( decoration: BoxDecoration( color: Colors.green, ), padding: const EdgeInsets.all(15), margin: EdgeInsets.symmetric(vertical: 15, horizontal: 15), child: Stack( children: [ Align( alignment: Alignment.center, child: Text(appConfigurationLink.configuration!.label!), ), Positioned( right: 0, bottom: 0, child: InkWell( onTap: () async { showConfirmationDialog( "Êtes-vous sûr de vouloir retirer cette configuration de l'application ?", () {}, () async { try { var result = await deleteConfigurationToApp(appContext, appConfigurationLink, widget.applicationInstanceDTO); showNotification(kSuccess, kWhite, "La configuration a été retirée de l'application avec succès", context, null); setState(() { // for refresh ui }); } catch(e) { showNotification(kError, kWhite, 'Une erreur est survenue lors du retrait de la configuration', context, null); } }, context ); }, child: Icon(Icons.delete, color: kError, size: 25), ) ) ], ), ); } ), ), ), ], ), ): Center(child: Text("No data")), ), ); } else if (snapshot.connectionState == ConnectionState.none) { return Text("No data"); } else { return Center( child: Container( height: size.height * 0.2, child: CommonLoader() ) ); } } ); } } Future updateMainInfos(DeviceDTO deviceToUpdate, dynamic appContext) async { ManagerAppContext managerAppContext = appContext.getContext(); await managerAppContext.clientAPI!.deviceApi!.deviceUpdateMainInfos(deviceToUpdate); } Future?> getAppConfigurationLink(AppContext appContext, ApplicationInstanceDTO applicationInstanceDTO) async { try{ List? appConfigurationsLinks = await (appContext.getContext() as ManagerAppContext).clientAPI!.applicationInstanceApi!.applicationInstanceGetAllApplicationLinkFromApplicationInstance(applicationInstanceDTO.id!); if(appConfigurationsLinks != null) { appConfigurationsLinks.forEach((element) { print(element); }); } return appConfigurationsLinks; } catch(e) { return null; } } Future addConfigurationToApp(AppContext appContext, AppConfigurationLinkDTO appConfigurationLink, ApplicationInstanceDTO applicationInstanceDTO) async { AppConfigurationLinkDTO? appConfigurationsLink = await (appContext.getContext() as ManagerAppContext).clientAPI!.applicationInstanceApi!.applicationInstanceAddConfigurationToApplicationInstance(applicationInstanceDTO.id!, appConfigurationLink); return appConfigurationsLink; } Future deleteConfigurationToApp(AppContext appContext, AppConfigurationLinkDTO appConfigurationLink, ApplicationInstanceDTO applicationInstanceDTO) async { var result = await (appContext.getContext() as ManagerAppContext).clientAPI!.applicationInstanceApi!.applicationInstanceDeleteAppConfigurationLink(applicationInstanceDTO.id!, appConfigurationLink.id!); return result; }