177 lines
8.6 KiB
Dart
177 lines
8.6 KiB
Dart
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/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<AppConfigurationLinkScreen> {
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
final appContext = Provider.of<AppContext>(context);
|
|
Size size = MediaQuery.of(context).size;
|
|
ManagerAppContext managerAppContext = appContext.getContext() as ManagerAppContext;
|
|
|
|
return FutureBuilder(
|
|
future: getAppConfigurationLink(appContext, widget.applicationInstanceDTO),
|
|
builder: (context, AsyncSnapshot<dynamic> snapshot) {
|
|
List<AppConfigurationLinkDTO>? appConfigurationLinks = snapshot.data;
|
|
|
|
if (snapshot.connectionState == ConnectionState.done) {
|
|
final screenWidth = MediaQuery.of(context).size.width;
|
|
final itemWidth = 175;
|
|
|
|
final crossAxisCount = (screenWidth / itemWidth).floor().clamp(1, 6);
|
|
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: crossAxisCount),
|
|
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<void> updateMainInfos(DeviceDTO deviceToUpdate, dynamic appContext) async {
|
|
ManagerAppContext managerAppContext = appContext.getContext();
|
|
await managerAppContext.clientAPI!.deviceApi!.deviceUpdateMainInfos(deviceToUpdate);
|
|
}
|
|
|
|
Future<List<AppConfigurationLinkDTO>?> getAppConfigurationLink(AppContext appContext, ApplicationInstanceDTO applicationInstanceDTO) async {
|
|
try{
|
|
List<AppConfigurationLinkDTO>? 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<AppConfigurationLinkDTO?> addConfigurationToApp(AppContext appContext, AppConfigurationLinkDTO appConfigurationLink, ApplicationInstanceDTO applicationInstanceDTO) async {
|
|
AppConfigurationLinkDTO? appConfigurationsLink = await (appContext.getContext() as ManagerAppContext).clientAPI!.applicationInstanceApi!.applicationInstanceAddConfigurationToApplicationInstance(applicationInstanceDTO.id!, appConfigurationLink);
|
|
return appConfigurationsLink;
|
|
}
|
|
|
|
Future<String?> deleteConfigurationToApp(AppContext appContext, AppConfigurationLinkDTO appConfigurationLink, ApplicationInstanceDTO applicationInstanceDTO) async {
|
|
var result = await (appContext.getContext() as ManagerAppContext).clientAPI!.applicationInstanceApi!.applicationInstanceDeleteAppConfigurationLink(applicationInstanceDTO.id!, appConfigurationLink.id!);
|
|
return result;
|
|
}
|
|
|
|
|