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:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user