diff --git a/CHANGELOG.md b/CHANGELOG.md index ed5a8705f51f10c57fdfe821855deee62be10199..867cbdbbc9f64028d0535245e9abd0e5cd0343b2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.8.0 + +- Allow multiline parameter item + ## 0.7.0 - Allow override activity buttons color diff --git a/lib/parameters/application_config_definition.dart b/lib/parameters/application_config_definition.dart index 2abba76dece58b4a47722c7584bb8ef2ecf06eff..7b2a5bb737acc0c69760fa973915a686a6a71628 100644 --- a/lib/parameters/application_config_definition.dart +++ b/lib/parameters/application_config_definition.dart @@ -35,6 +35,7 @@ class ApplicationSettingsParameter { final String code; final bool displayedOnTop; final List<ApplicationSettingsParameterItemValue> values; + final int itemsPerLine; final Widget Function({ required BuildContext context, required double size, @@ -49,6 +50,7 @@ class ApplicationSettingsParameter { required this.code, this.displayedOnTop = true, required this.values, + this.itemsPerLine = 0, this.builder, this.customPainter, this.colorGetter, diff --git a/lib/parameters/pages/parameters.dart b/lib/parameters/pages/parameters.dart index 4d98e6191f30e57dde5d6403013edc44b639abdf..fe45ecfb966264eee8daad00860ebeb624df5d1b 100644 --- a/lib/parameters/pages/parameters.dart +++ b/lib/parameters/pages/parameters.dart @@ -21,13 +21,15 @@ class PageParameters extends StatelessWidget { // Activity settings (top) for (ApplicationSettingsParameter parameter in appConfig.activitySettings) { if (parameter.displayedOnTop) { - lines.add(Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: buildParametersLine( - parameter: parameter, - isEnabled: !canBeResumed, - ), - )); + for (var itemsLine in buildParametersLines( + parameter: parameter, + isEnabled: !canBeResumed, + )) { + lines.add(Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: itemsLine, + )); + } lines.add(SizedBox(height: separatorHeight)); } @@ -75,13 +77,15 @@ class PageParameters extends StatelessWidget { // Activity settings (bottom) for (ApplicationSettingsParameter parameter in appConfig.activitySettings) { if (!parameter.displayedOnTop) { - lines.add(Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: buildParametersLine( - parameter: parameter, - isEnabled: !canBeResumed, - ), - )); + for (var itemsLine in buildParametersLines( + parameter: parameter, + isEnabled: !canBeResumed, + )) { + lines.add(Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: itemsLine, + )); + } lines.add(SizedBox(height: separatorHeight)); } @@ -92,7 +96,7 @@ class PageParameters extends StatelessWidget { ); } - List<Widget> buildParametersLine({ + List<List<Widget>> buildParametersLines({ required ApplicationSettingsParameter parameter, required bool isEnabled, }) { @@ -103,6 +107,10 @@ class PageParameters extends StatelessWidget { return []; } + final int itemsPerLine = + parameter.itemsPerLine != 0 ? parameter.itemsPerLine : items.length; + + // Build linear list for (ApplicationSettingsParameterItemValue item in items) { final Widget parameterButton = BlocBuilder<ActivitySettingsCubit, ActivitySettingsState>( builder: (BuildContext context, ActivitySettingsState activitySettingsState) { @@ -110,7 +118,7 @@ class PageParameters extends StatelessWidget { BlocProvider.of<ActivitySettingsCubit>(context); final double displayWidth = MediaQuery.of(context).size.width; - final double itemWidth = displayWidth / items.length - 4; + final double itemWidth = displayWidth / itemsPerLine - 4; return SizedBox.square( dimension: itemWidth, @@ -132,6 +140,21 @@ class PageParameters extends StatelessWidget { parameterButtons.add(parameterButton); } - return parameterButtons; + // Split buttons in lines according to items count limit per line + final List<List<Widget>> lines = []; + + List<Widget> line = []; + for (var parameterButton in parameterButtons) { + line.add(parameterButton); + if (line.length == itemsPerLine) { + lines.add(line); + line = []; + } + } + if (line.length != itemsPerLine) { + lines.add(line); + } + + return lines; } } diff --git a/pubspec.yaml b/pubspec.yaml index e0711ce6304dd1d80e3e048290bc609d606e44c4..d98c82705f513eacc5ceacb00dcf8f1b9097f7c7 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -3,7 +3,7 @@ description: "Flutter custom toolbox for org.benoitharrault.* projects." publish_to: "none" -version: 0.7.0 +version: 0.8.0 homepage: https://git.harrault.fr/android/flutter-toolbox