[DEV] done with the Radio Selectors
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
//s2 Core Packages Imports
|
//s2 Core Packages Imports
|
||||||
|
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
|
import 'src/configuration.dart';
|
||||||
|
import 'src/radio.selector.dart';
|
||||||
|
|
||||||
class AstromicSelectors {
|
class AstromicSelectors {
|
||||||
//S1 -- Radio
|
//S1 -- Radio
|
||||||
@@ -12,17 +13,17 @@ class AstromicSelectors {
|
|||||||
//
|
//
|
||||||
double? itemSpacing = 4,
|
double? itemSpacing = 4,
|
||||||
//
|
//
|
||||||
required Widget Function(AstromicRadioSelectorItem<T> item, VoidCallback? onTap, bool isSelected) itemBuilder,
|
required Widget Function(T item, {VoidCallback? onTap, bool isSelected}) itemBuilder,
|
||||||
Widget Function(AstromicRadioSelectorItem<T> item)? disabledItemBuilder,
|
Widget Function(T item)? disabledItemBuilder,
|
||||||
required List<AstromicRadioSelectorItem<T>> items,
|
required List<(T item, bool isEnabled)> items,
|
||||||
}) =>
|
}) =>
|
||||||
astromicRadioSelector<T>(
|
AstromicRadioSelector<T>(
|
||||||
initialSelectedValue: initialSelectedValue,
|
initialSelectedValue: initialSelectedValue,
|
||||||
onChanged: onChanged,
|
onChanged: onChanged,
|
||||||
//
|
//
|
||||||
configurations: configurations,
|
configurations: configurations ?? const AstromicSelectorConfiguration(),
|
||||||
//
|
//
|
||||||
itemSpacing: itemSpacing,
|
itemSpacing: itemSpacing ?? 8.0,
|
||||||
//
|
//
|
||||||
itemBuilder: itemBuilder,
|
itemBuilder: itemBuilder,
|
||||||
disabledItemBuilder: disabledItemBuilder,
|
disabledItemBuilder: disabledItemBuilder,
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import 'package:flutter/widgets.dart';
|
|||||||
//---------------
|
//---------------
|
||||||
//s2 SERVICES
|
//s2 SERVICES
|
||||||
//s2 MODELS
|
//s2 MODELS
|
||||||
|
import '../../Spacing/spacing.astromic.dart';
|
||||||
import 'configuration.dart';
|
import 'configuration.dart';
|
||||||
//s2 MISC
|
//s2 MISC
|
||||||
//!SECTION - Imports
|
//!SECTION - Imports
|
||||||
@@ -25,14 +26,14 @@ class AstromicRadioSelector<T> extends StatefulWidget {
|
|||||||
final T? initialSelectedValue;
|
final T? initialSelectedValue;
|
||||||
final Function(T selectedItem)? onChanged;
|
final Function(T selectedItem)? onChanged;
|
||||||
//s1 -- Configuration
|
//s1 -- Configuration
|
||||||
final AstromicSelectorConfiguration? configurations;
|
final AstromicSelectorConfiguration configurations;
|
||||||
//s1 -- Style
|
//s1 -- Style
|
||||||
final double? itemSpacing;
|
final double itemSpacing;
|
||||||
//s1 -- Content
|
//s1 -- Content
|
||||||
final List<AstromicRadioSelectorItem<T>> items;
|
final List<(T item, bool isEnabled)> items;
|
||||||
//
|
//
|
||||||
final Widget Function(AstromicRadioSelectorItem<T> item, VoidCallback? onTap, bool isSelected) itemBuilder;
|
final Widget Function(T item, {VoidCallback? onTap, bool isSelected}) itemBuilder;
|
||||||
final Widget Function(AstromicRadioSelectorItem<T> item)? disabledItemBuilder;
|
final Widget Function(T item)? disabledItemBuilder;
|
||||||
//!SECTION
|
//!SECTION
|
||||||
//
|
//
|
||||||
AstromicRadioSelector({
|
AstromicRadioSelector({
|
||||||
@@ -42,22 +43,23 @@ class AstromicRadioSelector<T> extends StatefulWidget {
|
|||||||
required this.items,
|
required this.items,
|
||||||
this.onChanged,
|
this.onChanged,
|
||||||
//s1 -- Configuration
|
//s1 -- Configuration
|
||||||
this.configurations = const AstromicSelectorConfiguration(),
|
required this.configurations,
|
||||||
//s1 -- Style
|
//s1 -- Style
|
||||||
this.itemSpacing = 8,
|
required this.itemSpacing,
|
||||||
//s1 -- Content
|
//s1 -- Content
|
||||||
required this.itemBuilder,
|
required this.itemBuilder,
|
||||||
this.disabledItemBuilder,
|
this.disabledItemBuilder,
|
||||||
}) : assert(configurations!.isNullable || initialSelectedValue != null, 'You need to supply an initial value if not nullable!'),
|
}) : assert(configurations.isNullable || initialSelectedValue != null, 'You need to supply an initial value if not nullable!'),
|
||||||
assert(
|
assert(
|
||||||
configurations!.isNullable ||
|
configurations.isNullable ||
|
||||||
(items
|
(items
|
||||||
.map(
|
.map(
|
||||||
(e) => e.value,
|
(e) => e.$1,
|
||||||
)
|
)
|
||||||
.toList()
|
.toList()
|
||||||
.contains(initialSelectedValue)),
|
.contains(initialSelectedValue) &&
|
||||||
"Initial value is not present in the items!",
|
items.where((e) => e.$1 == initialSelectedValue).first.$2),
|
||||||
|
"Initial value is not present in the items or is not enabled!",
|
||||||
),
|
),
|
||||||
super(
|
super(
|
||||||
key: key,
|
key: key,
|
||||||
@@ -129,38 +131,43 @@ class _AstromicRadioSelectorState<T> extends State<AstromicRadioSelector<T>> {
|
|||||||
//
|
//
|
||||||
//s1 -Widgets
|
//s1 -Widgets
|
||||||
List<Widget> baseChildren = widget.items.map((currentItem) {
|
List<Widget> baseChildren = widget.items.map((currentItem) {
|
||||||
bool isSelected = currentItem.value == selectedItem;
|
bool isEnabled = currentItem.$2;
|
||||||
|
bool isSelected = currentItem.$1 == selectedItem;
|
||||||
//
|
//
|
||||||
return !currentItem.enabled! && widget.disabledItemBuilder != null
|
return !isEnabled && widget.disabledItemBuilder != null
|
||||||
? widget.configurations!.withExpandedSpace
|
? widget.configurations.withExpandedSpace && widget.configurations.axis == Axis.horizontal
|
||||||
? Expanded(child: widget.disabledItemBuilder!(currentItem))
|
? Expanded(child: widget.disabledItemBuilder!(currentItem.$1))
|
||||||
: widget.disabledItemBuilder!(currentItem)
|
: widget.disabledItemBuilder!(currentItem.$1)
|
||||||
: widget.configurations!.withExpandedSpace
|
: widget.configurations.withExpandedSpace && widget.configurations.axis == Axis.horizontal
|
||||||
? Expanded(child: widget.itemBuilder(currentItem, currentItem.enabled! ? () => _onTap(currentItem.value) : null, isSelected))
|
? Expanded(child: widget.itemBuilder(currentItem.$1, onTap: isEnabled ? () => _onTap(currentItem.$1) : null, isSelected: isSelected))
|
||||||
: widget.itemBuilder(currentItem, currentItem.enabled! ? () => _onTap(currentItem.value) : null, isSelected);
|
: widget.itemBuilder(currentItem.$1, onTap: isEnabled ? () => _onTap(currentItem.$1) : null, isSelected: isSelected);
|
||||||
}).toList();
|
}).toList();
|
||||||
//s1 -Widgets
|
//s1 -Widgets
|
||||||
//!SECTION
|
//!SECTION
|
||||||
|
|
||||||
//SECTION - Build Return
|
//SECTION - Build Return
|
||||||
return widget.configurations!.withExpandedSpace
|
return
|
||||||
? widget.configurations!.axis == Axis.horizontal
|
// widget.configurations.withExpandedSpace
|
||||||
|
// ?
|
||||||
|
widget.configurations.axis == Axis.horizontal
|
||||||
? separatedRow(
|
? separatedRow(
|
||||||
baseChildren,
|
baseChildren,
|
||||||
AstromicSpacing.hsb(widget.itemSpacing!),
|
AstromicSpacing.hsb(widget.itemSpacing),
|
||||||
)
|
)
|
||||||
: separatedColumn(
|
: separatedColumn(
|
||||||
baseChildren,
|
baseChildren,
|
||||||
AstromicSpacing.vsb(widget.itemSpacing!),
|
AstromicSpacing.vsb(widget.itemSpacing),
|
||||||
)
|
widget.configurations.withExpandedSpace,
|
||||||
: Wrap(
|
|
||||||
alignment: WrapAlignment.center,
|
|
||||||
runAlignment: WrapAlignment.center,
|
|
||||||
crossAxisAlignment: WrapCrossAlignment.center,
|
|
||||||
direction: widget.configurations!.axis,
|
|
||||||
spacing: widget.itemSpacing!,
|
|
||||||
children: baseChildren,
|
|
||||||
);
|
);
|
||||||
|
// : Wrap(
|
||||||
|
// direction: widget.configurations.axis,
|
||||||
|
// alignment: WrapAlignment.center,
|
||||||
|
// runAlignment: WrapAlignment.center,
|
||||||
|
// crossAxisAlignment: WrapCrossAlignment.center,
|
||||||
|
// spacing: widget.itemSpacing,
|
||||||
|
// runSpacing: widget.itemSpacing,
|
||||||
|
// children: baseChildren,
|
||||||
|
// );
|
||||||
//!SECTION
|
//!SECTION
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -189,7 +196,7 @@ Widget separatedRow(List<Widget> children, Widget separator) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget separatedColumn(List<Widget> children, Widget separator) {
|
Widget separatedColumn(List<Widget> children, Widget separator, bool withExpandedSpace) {
|
||||||
List<Widget> finalChildren = [];
|
List<Widget> finalChildren = [];
|
||||||
for (var e in children) {
|
for (var e in children) {
|
||||||
if (children.indexOf(e) != children.length - 1) {
|
if (children.indexOf(e) != children.length - 1) {
|
||||||
@@ -200,7 +207,7 @@ Widget separatedColumn(List<Widget> children, Widget separator) {
|
|||||||
}
|
}
|
||||||
return Column(
|
return Column(
|
||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
crossAxisAlignment: CrossAxisAlignment.center,
|
crossAxisAlignment: withExpandedSpace ? CrossAxisAlignment.stretch : CrossAxisAlignment.center,
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
children: finalChildren,
|
children: finalChildren,
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user