manager-app/lib/Screens/Kiosk_devices/change_device_info_modal.dart

257 lines
12 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:manager_app/Components/check_input_container.dart';
import 'package:manager_app/Components/color_picker_input_container.dart';
import 'package:manager_app/Components/message_notification.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/app_context.dart';
import 'package:manager_app/constants.dart';
import 'package:manager_app/l10n/app_localizations.dart';
import 'package:manager_api_new/api.dart';
import '../../Components/resource_input_container.dart';
import 'dropDown_configuration.dart';
showChangeInfo(String text, DeviceDTO inputDevice, AppConfigurationLinkDTO appConfiguration, Function onGetResult, int maxLines, BuildContext mainContext, dynamic appContext) async {
var result = await showDialog(
useRootNavigator: false,
builder: (BuildContext context) => Dialog(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(20.0))
),
child: SizedBox(
width: 580,
child: Padding(
padding: const EdgeInsets.fromLTRB(24, 20, 24, 24),
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Center(child: Text(text, style: const TextStyle(fontSize: 20, fontWeight: FontWeight.w500))),
const SizedBox(height: 16),
Flexible(
child: SingleChildScrollView(
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
// Nom + Configuration
Wrap(
spacing: 16,
runSpacing: 12,
children: [
SizedBox(
width: 220,
height: 90,
child: StringInputContainer(
label: "Nom:",
initialValue: inputDevice.name,
onChanged: (value) => inputDevice.name = value,
maxLength: 20,
),
),
Row(
mainAxisSize: MainAxisSize.min,
children: [
Text("Configuration:", style: const TextStyle(fontSize: 16, fontWeight: FontWeight.w400)),
const SizedBox(width: 8),
FutureBuilder(
future: getConfigurations(appContext),
builder: (context, AsyncSnapshot<dynamic> snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
if (snapshot.data != null && snapshot.data.length > 0) {
return DropDownConfig(
configurations: snapshot.data,
selectedConfigurationId: inputDevice.configurationId!,
onChange: (ConfigurationDTO configurationOut) {
inputDevice.configuration = configurationOut.label;
inputDevice.configurationId = configurationOut.id;
},
);
} else {
return Text(AppLocalizations.of(context)!.noConfigFound);
}
} else if (snapshot.connectionState == ConnectionState.none) {
return const Text("No data");
} else {
return const SizedBox(width: 24, height: 24, child: CircularProgressIndicator(strokeWidth: 2));
}
}
),
],
),
],
),
const SizedBox(height: 12),
// Couleurs + Loader
Wrap(
spacing: 16,
runSpacing: 12,
children: [
ColorPickerInputContainer(
label: "Couleur principale :",
fontSize: 16,
color: appConfiguration.primaryColor,
onChanged: (value) => appConfiguration.primaryColor = value,
),
ColorPickerInputContainer(
label: AppLocalizations.of(context)!.backgroundColorLabel,
fontSize: 16,
color: appConfiguration.secondaryColor,
onChanged: (value) => appConfiguration.secondaryColor = value,
),
ResourceInputContainer(
label: "Loader :",
initialValue: appConfiguration.loaderImageId,
color: kPrimaryColor,
imageFit: BoxFit.fitHeight,
onChanged: (ResourceDTO resource) async {
if (resource.id == null) {
appConfiguration.loaderImageId = null;
appConfiguration.loaderImageUrl = null;
} else {
appConfiguration.loaderImageId = resource.id;
appConfiguration.loaderImageUrl = resource.url;
}
},
),
],
),
const SizedBox(height: 12),
// Pourcentages
Wrap(
spacing: 16,
runSpacing: 12,
children: [
SizedBox(
height: 90,
child: NumberInputContainer(
label: "Place des sections (%) :",
initialValue: appConfiguration.screenPercentageSectionsMainPage ?? 0,
isSmall: true,
maxLength: 3,
onChanged: (value) {
try {
appConfiguration.screenPercentageSectionsMainPage = int.parse(value);
} catch (e) {
showNotification(Colors.orange, kWhite, 'Cela doit être un chiffre', context, null);
}
},
),
),
SizedBox(
height: 90,
child: NumberInputContainer(
label: "Pourcentage des arrondis (0-50) :",
initialValue: appConfiguration.roundedValue ?? 0,
isSmall: true,
maxLength: 2,
onChanged: (value) {
try {
appConfiguration.roundedValue = int.parse(value);
} catch (e) {
showNotification(Colors.orange, kWhite, 'Cela doit être un chiffre', context, null);
}
},
),
),
],
),
const SizedBox(height: 12),
// Toggles
Wrap(
spacing: 16,
runSpacing: 8,
children: [
CheckInputContainer(
icon: Icons.image,
label: "Fond pour les images des sections :",
fontSize: 16,
isChecked: appConfiguration.isSectionImageBackground,
onChanged: (value) => appConfiguration.isSectionImageBackground = value,
),
CheckInputContainer(
icon: Icons.watch_later_outlined,
label: "Heure :",
fontSize: 16,
isChecked: appConfiguration.isHour,
onChanged: (value) => appConfiguration.isHour = value,
),
CheckInputContainer(
icon: Icons.date_range,
label: "Date :",
fontSize: 16,
isChecked: appConfiguration.isDate,
onChanged: (value) => appConfiguration.isDate = value,
),
],
),
],
),
),
),
const SizedBox(height: 16),
Wrap(
spacing: 8,
runSpacing: 8,
alignment: WrapAlignment.end,
children: [
RoundedButton(
text: "Annuler",
icon: Icons.undo,
color: kSecond,
press: () => Navigator.of(context).pop(),
fontSize: 16,
),
RoundedButton(
text: "Changer",
icon: Icons.check,
color: kPrimaryColor,
textColor: kWhite,
press: () {
onGetResult(inputDevice, appConfiguration);
Navigator.of(context).pop();
},
fontSize: 16,
),
],
),
],
),
),
),
), context: mainContext
);
}
getConfigurationsElement(DeviceDTO inputDevice, data, Function onGetResult) {
List<Widget> widgets = <Widget>[];
for (var configuration in data as List<ConfigurationDTO>) {
var widget = new InkWell(
onTap: () {
inputDevice.configuration = configuration.label;
inputDevice.configurationId = configuration.id;
},
child: Ink(
color: inputDevice.configurationId == configuration.id ? kPrimaryColor : null,
child: ListTile(
leading: Icon(Icons.account_tree_rounded),
title: Text(configuration.label!),
),
),
);
widgets.add(widget);
}
return widgets;
}
Future<List<ConfigurationDTO>?> getConfigurations(AppContext appContext) async {
return (appContext.getContext() as ManagerAppContext)
.clientAPI!
.configurationApi!
.configurationGet(instanceId: (appContext.getContext() as ManagerAppContext).instanceId);
}