Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • 21-add-onlongpress-with-popup-on-parameters
  • 23-center-vertically-buttons
  • 30-highlight-bin-when-selecting-disabled-item
  • master
  • 0.0.1
  • 0.0.2
  • 0.1.0
  • 0.1.1
  • 0.2.0
  • 0.3.0
  • 0.4.0
  • 0.5.0
  • 0.6.0
  • 0.6.1
  • 0.7.0
  • 0.8.0
  • 0.8.1
  • 0.8.2
  • 0.8.3
  • 0.8.4
  • 0.9.0
  • 0.9.1
  • 1.0.0
  • 1.0.2
  • 1.0.3
  • 1.0.4
  • 1.0.5
  • 1.0.6
  • 1.0.7
29 results

Target

Select target project
  • android/flutter-toolbox
1 result
Select Git revision
  • 21-add-onlongpress-with-popup-on-parameters
  • 23-center-vertically-buttons
  • 30-highlight-bin-when-selecting-disabled-item
  • master
  • 0.0.1
  • 0.0.2
  • 0.1.0
  • 0.1.1
  • 0.2.0
  • 0.3.0
  • 0.4.0
  • 0.5.0
  • 0.6.0
  • 0.6.1
  • 0.7.0
  • 0.8.0
  • 0.8.1
  • 0.8.2
  • 0.8.3
  • 0.8.4
  • 0.9.0
  • 0.9.1
  • 1.0.0
  • 1.0.2
  • 1.0.3
  • 1.0.4
  • 1.0.5
  • 1.0.6
  • 1.0.7
29 results
Show changes
Commits on Source (2)
## 1.0.7
- Allow "array" parameter type
## 1.0.6 ## 1.0.6
- Allow additional content in about page - Allow additional content in about page
......
...@@ -37,6 +37,7 @@ class ApplicationSettingsParameter { ...@@ -37,6 +37,7 @@ class ApplicationSettingsParameter {
final String code; final String code;
final bool displayedOnTop; final bool displayedOnTop;
final List<ApplicationSettingsParameterItemValue> values; final List<ApplicationSettingsParameterItemValue> values;
final bool allowMultipleValues;
final int itemsPerLine; final int itemsPerLine;
final Widget Function({ final Widget Function({
required BuildContext context, required BuildContext context,
...@@ -52,6 +53,7 @@ class ApplicationSettingsParameter { ...@@ -52,6 +53,7 @@ class ApplicationSettingsParameter {
required this.code, required this.code,
this.displayedOnTop = true, this.displayedOnTop = true,
required this.values, required this.values,
this.allowMultipleValues = false,
this.itemsPerLine = 0, this.itemsPerLine = 0,
this.builder, this.builder,
this.customPainter, this.customPainter,
...@@ -63,7 +65,15 @@ class ApplicationSettingsParameter { ...@@ -63,7 +65,15 @@ class ApplicationSettingsParameter {
return values.map((ApplicationSettingsParameterItemValue item) => item.value).toList(); return values.map((ApplicationSettingsParameterItemValue item) => item.value).toList();
} }
String get defaultValue => values.firstWhere((element) => element.isDefault).value; String get defaultValue => allowMultipleValues
? values
.where((itemValue) => itemValue.isDefault)
.toList()
.map((itemDefaultValue) => itemDefaultValue.value)
.join(',')
: values.firstWhere((itemValue) => itemValue.isDefault).value;
List<String> get defaultValues => defaultValue.split(',');
factory ApplicationSettingsParameter.empty() { factory ApplicationSettingsParameter.empty() {
return ApplicationSettingsParameter( return ApplicationSettingsParameter(
...@@ -82,8 +92,8 @@ class ApplicationSettingsParameter { ...@@ -82,8 +92,8 @@ class ApplicationSettingsParameter {
required double size, required double size,
required VoidCallback? onPressed, required VoidCallback? onPressed,
}) { }) {
final Color buttonColorActive = (onPressed != null) ? Colors.blue : Colors.grey; final Color colorAvailable = Theme.of(context).colorScheme.surface;
final Color buttonColorInactive = Theme.of(context).colorScheme.surface; final Color colorSelected = (onPressed != null) ? Colors.blue : Colors.grey;
const double buttonBorderWidth = 4.0; const double buttonBorderWidth = 4.0;
const double buttonBorderRadius = 12.0; const double buttonBorderRadius = 12.0;
...@@ -91,9 +101,9 @@ class ApplicationSettingsParameter { ...@@ -91,9 +101,9 @@ class ApplicationSettingsParameter {
BlocProvider.of<ActivitySettingsCubit>(context); BlocProvider.of<ActivitySettingsCubit>(context);
final String currentValue = activitySettingsCubit.get(code); final String currentValue = activitySettingsCubit.get(code);
final bool isSelected = (currentValue == itemValue.value); final bool isSelected = (currentValue.split(',').contains(itemValue.value));
final Color buttonColor = isSelected ? buttonColorActive : buttonColorInactive; final Color color = isSelected ? colorSelected : colorAvailable;
Widget content = SizedBox.shrink(); Widget content = SizedBox.shrink();
...@@ -127,10 +137,10 @@ class ApplicationSettingsParameter { ...@@ -127,10 +137,10 @@ class ApplicationSettingsParameter {
return Container( return Container(
decoration: BoxDecoration( decoration: BoxDecoration(
color: buttonColor, color: color,
borderRadius: BorderRadius.circular(buttonBorderRadius), borderRadius: BorderRadius.circular(buttonBorderRadius),
border: Border.all( border: Border.all(
color: buttonColor, color: color,
width: buttonBorderWidth, width: buttonBorderWidth,
), ),
), ),
......
...@@ -26,6 +26,10 @@ class ActivitySettings { ...@@ -26,6 +26,10 @@ class ActivitySettings {
String get(String code) { String get(String code) {
if (values.keys.contains(code)) { if (values.keys.contains(code)) {
if (appConfig.getFromCode(code).allowMultipleValues) {
return getAsArray(code).join(',');
}
if (appConfig.getFromCode(code).allowedValues.contains(values[code])) { if (appConfig.getFromCode(code).allowedValues.contains(values[code])) {
return values[code] ?? appConfig.getFromCode(code).defaultValue; return values[code] ?? appConfig.getFromCode(code).defaultValue;
} }
...@@ -54,6 +58,19 @@ class ActivitySettings { ...@@ -54,6 +58,19 @@ class ActivitySettings {
} }
} }
List<String> getAsArray(String code) {
final List<String> legitValues = [];
if (values[code] != null) {
values[code]?.split(',').forEach((candidateValue) {
if (appConfig.getFromCode(code).allowedValues.contains(candidateValue)) {
legitValues.add(candidateValue);
}
});
}
return legitValues;
}
void dump() { void dump() {
printlog('$ActivitySettings:'); printlog('$ActivitySettings:');
values.forEach((code, value) { values.forEach((code, value) {
......
...@@ -153,8 +153,12 @@ class PageParameters extends StatelessWidget { ...@@ -153,8 +153,12 @@ class PageParameters extends StatelessWidget {
size: itemWidth, size: itemWidth,
onPressed: isEnabled onPressed: isEnabled
? () { ? () {
if (parameter.allowMultipleValues) {
activitySettingsCubit.toggle(parameter.code, item.value);
} else {
activitySettingsCubit.set(parameter.code, item.value); activitySettingsCubit.set(parameter.code, item.value);
} }
}
: null, : null,
), ),
); );
......
...@@ -35,7 +35,7 @@ class ActivitySettingsCubit extends HydratedCubit<ActivitySettingsState> { ...@@ -35,7 +35,7 @@ class ActivitySettingsCubit extends HydratedCubit<ActivitySettingsState> {
} }
void set(String code, String value) { void set(String code, String value) {
Map<String, String> values = state.settings.values; final Map<String, String> values = state.settings.values;
values[code] = value; values[code] = value;
...@@ -44,6 +44,17 @@ class ActivitySettingsCubit extends HydratedCubit<ActivitySettingsState> { ...@@ -44,6 +44,17 @@ class ActivitySettingsCubit extends HydratedCubit<ActivitySettingsState> {
); );
} }
void toggle(String code, String value) {
final List<String> currentValues = state.settings.values[code]?.split(',') ?? [];
if (currentValues.contains(value) == true) {
currentValues.removeWhere((candidate) => value == candidate);
} else {
currentValues.add(value);
}
set(code, currentValues.join(','));
}
@override @override
ActivitySettingsState? fromJson(Map<String, dynamic> json) { ActivitySettingsState? fromJson(Map<String, dynamic> json) {
Map<String, String> values = {}; Map<String, String> values = {};
......
...@@ -3,7 +3,7 @@ description: "Flutter custom toolbox for org.benoitharrault.* projects." ...@@ -3,7 +3,7 @@ description: "Flutter custom toolbox for org.benoitharrault.* projects."
publish_to: https://pub.harrault.fr/ publish_to: https://pub.harrault.fr/
version: 1.0.6 version: 1.0.7
homepage: https://git.harrault.fr/android/flutter-toolbox homepage: https://git.harrault.fr/android/flutter-toolbox
......