feat: enhance SDUI widget model with dynamic visibility conditions, refactor NewPageLogic for improved form handling, and update UI components to support new visibility features

This commit is contained in:
2025-12-31 15:28:17 +03:30
parent fb0b817cf9
commit 26f94345f6
8 changed files with 711 additions and 594 deletions

View File

@@ -57,18 +57,21 @@ class NewPageLogic extends GetxController {
if (sduiData != null) {
iLog('SDUI data to parse: $sduiData');
sduiModel.value = SDUIWidgetModel.fromRawJson(sduiData);
sduiModel.value = SDUIWidgetModel.fromJson(sduiData);
// Log model info using pattern matching
final modelType =
sduiModel.value?.maybeWhen(
textFormField: (data, visible) => 'text_form_field',
textFormField: (data, visible, visibleCondition) =>
'text_form_field',
cardLabelItem:
(data, child, children, visible, visibleCondition) =>
'card_label_item',
chipSelection: (data, visible) => 'chip_selection',
dropdown: (data, visible) => 'dropdown',
imagePicker: (data, visible) => 'image_picker',
chipSelection: (data, visible, visibleCondition) =>
'chip_selection',
dropdown: (data, visible, visibleCondition) => 'dropdown',
imagePicker: (data, visible, visibleCondition) =>
'image_picker',
column:
(
children,
@@ -78,12 +81,22 @@ class NewPageLogic extends GetxController {
visible,
paddingHorizontal,
paddingVertical,
visibleCondition,
) => 'column',
row: (children, spacing, mainAxisAlignment, visible) =>
'row',
sizedBox: (width, height, visible) => 'sized_box',
stepper: (data, children, visible, index) => 'stepper',
pageView: (data, children, visible) => 'page_view',
row:
(
children,
spacing,
mainAxisAlignment,
visible,
visibleCondition,
) => 'row',
sizedBox: (width, height, visible, visibleCondition) =>
'sized_box',
stepper: (data, children, visible, visibleCondition) =>
'stepper',
pageView: (data, children, visible, visibleCondition) =>
'page_view',
orElse: () => 'unknown',
) ??
'null';
@@ -99,15 +112,23 @@ class NewPageLogic extends GetxController {
visible,
paddingHorizontal,
paddingVertical,
visibleCondition,
) => children.length,
row:
(
children,
spacing,
mainAxisAlignment,
visible,
visibleCondition,
) => children.length,
row: (children, spacing, mainAxisAlignment, visible) =>
children.length,
cardLabelItem:
(data, child, children, visible, visibleCondition) =>
(child != null ? 1 : 0) + (children?.length ?? 0),
stepper: (data, children, visible, index) =>
stepper: (data, children, visible, visibleCondition) =>
children?.length ?? 0,
pageView: (data, children, visible) => children.length,
pageView: (data, children, visible, visibleCondition) =>
children.length,
orElse: () => 0,
) ??
0;
@@ -143,7 +164,7 @@ class NewPageLogic extends GetxController {
void _extractTextFields(SDUIWidgetModel model) {
// Extract text form field using pattern matching
model.maybeWhen(
textFormField: (data, visible) {
textFormField: (data, visible, visibleCondition) {
final key = data.key;
final value = data.value;
if (key != null && !controllers.containsKey(key)) {
@@ -155,12 +176,22 @@ class NewPageLogic extends GetxController {
// Recursively extract from children using pattern matching
model.maybeWhen(
column: (children, spacing, mainAxisSize, crossAxisAlignment, visible, paddingHorizontal, paddingVertical) {
for (var child in children) {
_extractTextFields(child);
}
},
row: (children, spacing, mainAxisAlignment, visible) {
column:
(
children,
spacing,
mainAxisSize,
crossAxisAlignment,
visible,
paddingHorizontal,
paddingVertical,
visibleCondition,
) {
for (var child in children) {
_extractTextFields(child);
}
},
row: (children, spacing, mainAxisAlignment, visible, visibleCondition) {
for (var child in children) {
_extractTextFields(child);
}
@@ -175,14 +206,14 @@ class NewPageLogic extends GetxController {
}
}
},
stepper: (data, children, visible, index) {
stepper: (data, children, visible, visibleCondition) {
if (children != null) {
for (var child in children) {
_extractTextFields(child);
}
}
},
pageView: (data, children, visible) {
pageView: (data, children, visible, visibleCondition) {
for (var child in children) {
_extractTextFields(child);
}

View File

@@ -29,7 +29,9 @@ class NewPage extends GetView<NewPageLogic> {
SizedBox(height: 24.h),
RElevated(
text: 'دکمه نمونه',
onPressed: () {
onPressed: () async {
await controller.getSDUIForm();
Get.bottomSheet(
isScrollControlled: true,
enableDrag: true,