feat: refactor SDUI widget model to use sealed classes for type-safe handling, enhance form widget with stepper support, and improve error handling in SDUIFormWidget
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:rasadyar_chicken/features/vet_farm/presentation/pages/root/logic.dart';
|
import 'package:rasadyar_chicken/features/vet_farm/presentation/pages/root/logic.dart';
|
||||||
import 'package:rasadyar_chicken/presentation/widget/sdui/model/sdui_widget_model.dart';
|
import 'package:rasadyar_chicken/presentation/widget/sdui/model/sdui_widget.dart';
|
||||||
|
|
||||||
import 'package:rasadyar_core/core.dart';
|
import 'package:rasadyar_core/core.dart';
|
||||||
|
|
||||||
class NewPageLogic extends GetxController {
|
class NewPageLogic extends GetxController {
|
||||||
@@ -14,19 +15,11 @@ class NewPageLogic extends GetxController {
|
|||||||
@override
|
@override
|
||||||
void onInit() {
|
void onInit() {
|
||||||
super.onInit();
|
super.onInit();
|
||||||
|
|
||||||
getSDUIForm();
|
getSDUIForm();
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
|
||||||
void onReady() {
|
|
||||||
super.onReady();
|
|
||||||
// Ready logic here
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onClose() {
|
void onClose() {
|
||||||
// Dispose all controllers
|
|
||||||
for (var controller in controllers.values) {
|
for (var controller in controllers.values) {
|
||||||
controller.dispose();
|
controller.dispose();
|
||||||
}
|
}
|
||||||
@@ -40,10 +33,6 @@ class NewPageLogic extends GetxController {
|
|||||||
onSuccess: (result) {
|
onSuccess: (result) {
|
||||||
if (result.data != null) {
|
if (result.data != null) {
|
||||||
try {
|
try {
|
||||||
iLog('SDUI JSON received: ${result.data}');
|
|
||||||
|
|
||||||
// Extract SDUI data from info structure
|
|
||||||
// JSON structure: { "info": { "type": "column", "visible": true, "data": {...}, "children": [...] } }
|
|
||||||
Map<String, dynamic>? sduiData;
|
Map<String, dynamic>? sduiData;
|
||||||
if (result.data!['info'] != null && result.data!['info'] is Map) {
|
if (result.data!['info'] != null && result.data!['info'] is Map) {
|
||||||
final infoMap = result.data!['info'] as Map<String, dynamic>;
|
final infoMap = result.data!['info'] as Map<String, dynamic>;
|
||||||
@@ -68,9 +57,63 @@ class NewPageLogic extends GetxController {
|
|||||||
|
|
||||||
if (sduiData != null) {
|
if (sduiData != null) {
|
||||||
iLog('SDUI data to parse: $sduiData');
|
iLog('SDUI data to parse: $sduiData');
|
||||||
sduiModel.value = SDUIWidgetModel.fromJson(sduiData);
|
sduiModel.value = SDUIWidgetModel.fromRawJson(sduiData);
|
||||||
|
|
||||||
|
// Log model info using pattern matching
|
||||||
|
final modelType =
|
||||||
|
sduiModel.value?.maybeWhen(
|
||||||
|
textFormField: (data, visible) => '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',
|
||||||
|
column:
|
||||||
|
(
|
||||||
|
children,
|
||||||
|
spacing,
|
||||||
|
mainAxisSize,
|
||||||
|
crossAxisAlignment,
|
||||||
|
visible,
|
||||||
|
paddingHorizontal,
|
||||||
|
paddingVertical,
|
||||||
|
) => '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',
|
||||||
|
orElse: () => 'unknown',
|
||||||
|
) ??
|
||||||
|
'null';
|
||||||
|
|
||||||
|
final childrenCount =
|
||||||
|
sduiModel.value?.maybeWhen(
|
||||||
|
column:
|
||||||
|
(
|
||||||
|
children,
|
||||||
|
spacing,
|
||||||
|
mainAxisSize,
|
||||||
|
crossAxisAlignment,
|
||||||
|
visible,
|
||||||
|
paddingHorizontal,
|
||||||
|
paddingVertical,
|
||||||
|
) => 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) =>
|
||||||
|
children?.length ?? 0,
|
||||||
|
pageView: (data, children, visible) => children.length,
|
||||||
|
orElse: () => 0,
|
||||||
|
) ??
|
||||||
|
0;
|
||||||
|
|
||||||
iLog(
|
iLog(
|
||||||
'SDUI Model parsed successfully. Type: ${sduiModel.value?.type}, Visible: ${sduiModel.value?.visible}, Children count: ${sduiModel.value?.children?.length ?? 0}',
|
'SDUI Model parsed successfully. Type: $modelType, Visible: ${sduiModel.value?.visible}, Children count: $childrenCount',
|
||||||
);
|
);
|
||||||
_initializeControllers(sduiModel.value!);
|
_initializeControllers(sduiModel.value!);
|
||||||
} else {
|
} else {
|
||||||
@@ -98,23 +141,54 @@ class NewPageLogic extends GetxController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _extractTextFields(SDUIWidgetModel model) {
|
void _extractTextFields(SDUIWidgetModel model) {
|
||||||
if (model.type == 'text_form_field' && model.data != null) {
|
// Extract text form field using pattern matching
|
||||||
final key = model.data!['key'] as String?;
|
model.maybeWhen(
|
||||||
final value = model.data!['value'] as String?;
|
textFormField: (data, visible) {
|
||||||
if (key != null && !controllers.containsKey(key)) {
|
final key = data.key;
|
||||||
controllers[key] = TextEditingController(text: value ?? '');
|
final value = data.value;
|
||||||
}
|
if (key != null && !controllers.containsKey(key)) {
|
||||||
}
|
controllers[key] = TextEditingController(text: value ?? '');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
orElse: () {},
|
||||||
|
);
|
||||||
|
|
||||||
if (model.child != null) {
|
// Recursively extract from children using pattern matching
|
||||||
_extractTextFields(SDUIWidgetModel.fromJson(model.child!));
|
model.maybeWhen(
|
||||||
}
|
column: (children, spacing, mainAxisSize, crossAxisAlignment, visible, paddingHorizontal, paddingVertical) {
|
||||||
|
for (var child in children) {
|
||||||
if (model.children != null) {
|
_extractTextFields(child);
|
||||||
for (var child in model.children!) {
|
}
|
||||||
_extractTextFields(SDUIWidgetModel.fromJson(child));
|
},
|
||||||
}
|
row: (children, spacing, mainAxisAlignment, visible) {
|
||||||
}
|
for (var child in children) {
|
||||||
|
_extractTextFields(child);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
cardLabelItem: (data, child, children, visible, visibleCondition) {
|
||||||
|
if (child != null) {
|
||||||
|
_extractTextFields(child);
|
||||||
|
}
|
||||||
|
if (children != null) {
|
||||||
|
for (var child in children) {
|
||||||
|
_extractTextFields(child);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
stepper: (data, children, visible, index) {
|
||||||
|
if (children != null) {
|
||||||
|
for (var child in children) {
|
||||||
|
_extractTextFields(child);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
pageView: (data, children, visible) {
|
||||||
|
for (var child in children) {
|
||||||
|
_extractTextFields(child);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
orElse: () {},
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void onButtonPressed() {
|
void onButtonPressed() {
|
||||||
|
|||||||
@@ -34,10 +34,9 @@ class NewPage extends GetView<NewPageLogic> {
|
|||||||
isScrollControlled: true,
|
isScrollControlled: true,
|
||||||
enableDrag: true,
|
enableDrag: true,
|
||||||
|
|
||||||
|
|
||||||
BaseBottomSheet(
|
BaseBottomSheet(
|
||||||
height: Get.height * 0.8,
|
height: Get.height * 0.8,
|
||||||
child: ObxValue((data) {
|
rootChild: ObxValue((data) {
|
||||||
if (data.value == null) {
|
if (data.value == null) {
|
||||||
return Center(child: CircularProgressIndicator());
|
return Center(child: CircularProgressIndicator());
|
||||||
}
|
}
|
||||||
@@ -61,6 +60,27 @@ class NewPage extends GetView<NewPageLogic> {
|
|||||||
},
|
},
|
||||||
),
|
),
|
||||||
SizedBox(height: 24.h),
|
SizedBox(height: 24.h),
|
||||||
|
|
||||||
|
RElevated(
|
||||||
|
text: '222222222222دکمه نمونه',
|
||||||
|
onPressed: () {
|
||||||
|
Get.bottomSheet(
|
||||||
|
isScrollControlled: true,
|
||||||
|
enableDrag: true,
|
||||||
|
|
||||||
|
BaseBottomSheet(
|
||||||
|
height: Get.height * 0.8,
|
||||||
|
rootChild: Column(
|
||||||
|
children: [
|
||||||
|
Container(height: 100, width: 100, color: Colors.red),
|
||||||
|
Expanded(child: Container(color: Colors.blue)),
|
||||||
|
Container(height: 100, width: 100, color: Colors.green),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,38 @@
|
|||||||
|
import 'package:rasadyar_core/core.dart';
|
||||||
|
|
||||||
|
class SDUIFormWidgetController extends GetxController {
|
||||||
|
RxInt currentStep = 0.obs;
|
||||||
|
int totalSteps = 0;
|
||||||
|
String? stepperKey;
|
||||||
|
|
||||||
|
void initializeStepper(int totalSteps, String? key) {
|
||||||
|
this.totalSteps = totalSteps;
|
||||||
|
this.stepperKey = key;
|
||||||
|
currentStep.value = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void nextStep(RxMap<String, dynamic>? state) {
|
||||||
|
if (currentStep.value < totalSteps - 1) {
|
||||||
|
currentStep.value++;
|
||||||
|
if (state != null && stepperKey != null) {
|
||||||
|
state[stepperKey!] = currentStep.value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void previousStep(RxMap<String, dynamic>? state) {
|
||||||
|
if (currentStep.value > 0) {
|
||||||
|
currentStep.value--;
|
||||||
|
if (state != null && stepperKey != null) {
|
||||||
|
state[stepperKey!] = currentStep.value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool get canGoNext => currentStep.value < totalSteps - 1;
|
||||||
|
bool get canGoPrevious => currentStep.value > 0;
|
||||||
|
bool get isLastStep => currentStep.value == totalSteps - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
1099
packages/chicken/lib/presentation/widget/sdui/form/ts1 copy.json
Normal file
1099
packages/chicken/lib/presentation/widget/sdui/form/ts1 copy.json
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,150 @@
|
|||||||
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
import 'package:rasadyar_chicken/presentation/widget/sdui/widgets/text_form_filed/model/text_form_field_sdui_model.dart';
|
||||||
|
import 'package:rasadyar_chicken/presentation/widget/sdui/widgets/card_label_item/model/card_label_item_sdui_model.dart';
|
||||||
|
import 'package:rasadyar_chicken/presentation/widget/sdui/widgets/chip_selection/model/chip_selection_sdui_model.dart';
|
||||||
|
import 'package:rasadyar_chicken/presentation/widget/sdui/widgets/dropdown/model/dropdown_sdui_model.dart';
|
||||||
|
import 'package:rasadyar_chicken/presentation/widget/sdui/widgets/image_picker/model/image_picker_sdui_model.dart';
|
||||||
|
import 'package:rasadyar_chicken/presentation/widget/sdui/widgets/stepper/model/stepper_sdui_model.dart';
|
||||||
|
import 'package:rasadyar_chicken/presentation/widget/sdui/widgets/page_view/model/page_view_sdui_model.dart';
|
||||||
|
|
||||||
|
part 'sdui_widget.freezed.dart';
|
||||||
|
part 'sdui_widget.g.dart';
|
||||||
|
|
||||||
|
@Freezed(unionKey: 'type', unionValueCase: FreezedUnionCase.snake)
|
||||||
|
sealed class SDUIWidgetModel with _$SDUIWidgetModel {
|
||||||
|
const factory SDUIWidgetModel.textFormField({
|
||||||
|
required TextFormFieldSDUIModel data,
|
||||||
|
@Default(true) bool visible,
|
||||||
|
}) = _TextFormField;
|
||||||
|
|
||||||
|
const factory SDUIWidgetModel.cardLabelItem({
|
||||||
|
required CardLabelItemData data,
|
||||||
|
SDUIWidgetModel? child,
|
||||||
|
List<SDUIWidgetModel>? children,
|
||||||
|
@Default(true) bool visible,
|
||||||
|
String? visibleCondition,
|
||||||
|
}) = _CardLabelItem;
|
||||||
|
|
||||||
|
const factory SDUIWidgetModel.chipSelection({
|
||||||
|
required ChipSelectionSDUIModel data,
|
||||||
|
@Default(true) bool visible,
|
||||||
|
}) = _ChipSelection;
|
||||||
|
|
||||||
|
const factory SDUIWidgetModel.dropdown({
|
||||||
|
required DropdownSDUIModel data,
|
||||||
|
@Default(true) bool visible,
|
||||||
|
}) = _Dropdown;
|
||||||
|
|
||||||
|
const factory SDUIWidgetModel.imagePicker({
|
||||||
|
required ImagePickerSDUIModel data,
|
||||||
|
@Default(true) bool visible,
|
||||||
|
}) = _ImagePicker;
|
||||||
|
|
||||||
|
const factory SDUIWidgetModel.column({
|
||||||
|
required List<SDUIWidgetModel> children,
|
||||||
|
@Default(0.0) double spacing,
|
||||||
|
@Default('max') String mainAxisSize,
|
||||||
|
@Default(0.0) double paddingHorizontal,
|
||||||
|
@Default(0.0) double paddingVertical,
|
||||||
|
@Default('center') String crossAxisAlignment,
|
||||||
|
@Default(true) bool visible,
|
||||||
|
}) = _Column;
|
||||||
|
|
||||||
|
const factory SDUIWidgetModel.row({
|
||||||
|
required List<SDUIWidgetModel> children,
|
||||||
|
@Default(0.0) double spacing,
|
||||||
|
@Default('start') String mainAxisAlignment,
|
||||||
|
@Default(true) bool visible,
|
||||||
|
}) = _Row;
|
||||||
|
|
||||||
|
const factory SDUIWidgetModel.sizedBox({
|
||||||
|
double? width,
|
||||||
|
double? height,
|
||||||
|
@Default(true) bool visible,
|
||||||
|
}) = _SizedBox;
|
||||||
|
|
||||||
|
const factory SDUIWidgetModel.stepper({
|
||||||
|
required StepperSDUIModel data,
|
||||||
|
List<SDUIWidgetModel>? children,
|
||||||
|
@Default(true) bool visible,
|
||||||
|
int? index,
|
||||||
|
}) = _Stepper;
|
||||||
|
|
||||||
|
const factory SDUIWidgetModel.pageView({
|
||||||
|
required PageViewSDUIModel data,
|
||||||
|
required List<SDUIWidgetModel> children,
|
||||||
|
@Default(true) bool visible,
|
||||||
|
}) = _PageView;
|
||||||
|
|
||||||
|
factory SDUIWidgetModel.fromJson(Map<String, dynamic> json) =>
|
||||||
|
_$SDUIWidgetModelFromJson(json);
|
||||||
|
|
||||||
|
factory SDUIWidgetModel.fromRawJson(Map<String, dynamic> json) {
|
||||||
|
final type = json['type'] as String?;
|
||||||
|
if (type == null) return const SDUIWidgetModel.sizedBox(visible: false);
|
||||||
|
|
||||||
|
final preparedJson = Map<String, dynamic>.from(json);
|
||||||
|
|
||||||
|
_prepareData(type, preparedJson);
|
||||||
|
|
||||||
|
return SDUIWidgetModel.fromJson(preparedJson);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void _prepareData(String type, Map<String, dynamic> json) {
|
||||||
|
final rawData = json['data'];
|
||||||
|
|
||||||
|
// Handle stepper with List data (children)
|
||||||
|
if (type == 'stepper' && rawData is List) {
|
||||||
|
// Convert List data to children
|
||||||
|
json['children'] = rawData;
|
||||||
|
// Create default stepper data
|
||||||
|
json['data'] = {'key': 'stepper_key', 'activeStep': 0};
|
||||||
|
// Recursively prepare children
|
||||||
|
for (var i = 0; i < rawData.length; i++) {
|
||||||
|
if (rawData[i] is Map<String, dynamic>) {
|
||||||
|
final childJson = rawData[i] as Map<String, dynamic>;
|
||||||
|
final childType = childJson['type'] as String?;
|
||||||
|
if (childType != null) {
|
||||||
|
_prepareData(childType, childJson);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle column, row, sized_box with Map data
|
||||||
|
if (['column', 'row', 'sized_box'].contains(type) && rawData is Map) {
|
||||||
|
json.addAll(Map<String, dynamic>.from(rawData));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle visible_condition for card_label_item
|
||||||
|
if (type == 'card_label_item' && rawData is Map) {
|
||||||
|
final dataMap = Map<String, dynamic>.from(rawData);
|
||||||
|
if (dataMap.containsKey('visible_condition')) {
|
||||||
|
json['visible_condition'] = dataMap['visible_condition'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Recursively prepare children for all widget types
|
||||||
|
if (json['children'] is List) {
|
||||||
|
final children = json['children'] as List;
|
||||||
|
for (var i = 0; i < children.length; i++) {
|
||||||
|
if (children[i] is Map<String, dynamic>) {
|
||||||
|
final childJson = children[i] as Map<String, dynamic>;
|
||||||
|
final childType = childJson['type'] as String?;
|
||||||
|
if (childType != null) {
|
||||||
|
_prepareData(childType, childJson);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Recursively prepare child (singular) for card_label_item
|
||||||
|
if (json['child'] is Map<String, dynamic>) {
|
||||||
|
final childJson = json['child'] as Map<String, dynamic>;
|
||||||
|
final childType = childJson['type'] as String?;
|
||||||
|
if (childType != null) {
|
||||||
|
_prepareData(childType, childJson);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,178 @@
|
|||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
|
||||||
|
part of 'sdui_widget.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// JsonSerializableGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
_TextFormField _$TextFormFieldFromJson(Map<String, dynamic> json) =>
|
||||||
|
_TextFormField(
|
||||||
|
data: TextFormFieldSDUIModel.fromJson(
|
||||||
|
json['data'] as Map<String, dynamic>,
|
||||||
|
),
|
||||||
|
visible: json['visible'] as bool? ?? true,
|
||||||
|
$type: json['type'] as String?,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$TextFormFieldToJson(_TextFormField instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'data': instance.data,
|
||||||
|
'visible': instance.visible,
|
||||||
|
'type': instance.$type,
|
||||||
|
};
|
||||||
|
|
||||||
|
_CardLabelItem _$CardLabelItemFromJson(Map<String, dynamic> json) =>
|
||||||
|
_CardLabelItem(
|
||||||
|
data: CardLabelItemData.fromJson(json['data'] as Map<String, dynamic>),
|
||||||
|
child: json['child'] == null
|
||||||
|
? null
|
||||||
|
: SDUIWidgetModel.fromJson(json['child'] as Map<String, dynamic>),
|
||||||
|
children: (json['children'] as List<dynamic>?)
|
||||||
|
?.map((e) => SDUIWidgetModel.fromJson(e as Map<String, dynamic>))
|
||||||
|
.toList(),
|
||||||
|
visible: json['visible'] as bool? ?? true,
|
||||||
|
visibleCondition: json['visible_condition'] as String?,
|
||||||
|
$type: json['type'] as String?,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$CardLabelItemToJson(_CardLabelItem instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'data': instance.data,
|
||||||
|
'child': instance.child,
|
||||||
|
'children': instance.children,
|
||||||
|
'visible': instance.visible,
|
||||||
|
'visible_condition': instance.visibleCondition,
|
||||||
|
'type': instance.$type,
|
||||||
|
};
|
||||||
|
|
||||||
|
_ChipSelection _$ChipSelectionFromJson(Map<String, dynamic> json) =>
|
||||||
|
_ChipSelection(
|
||||||
|
data: ChipSelectionSDUIModel.fromJson(
|
||||||
|
json['data'] as Map<String, dynamic>,
|
||||||
|
),
|
||||||
|
visible: json['visible'] as bool? ?? true,
|
||||||
|
$type: json['type'] as String?,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$ChipSelectionToJson(_ChipSelection instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'data': instance.data,
|
||||||
|
'visible': instance.visible,
|
||||||
|
'type': instance.$type,
|
||||||
|
};
|
||||||
|
|
||||||
|
_Dropdown _$DropdownFromJson(Map<String, dynamic> json) => _Dropdown(
|
||||||
|
data: DropdownSDUIModel.fromJson(json['data'] as Map<String, dynamic>),
|
||||||
|
visible: json['visible'] as bool? ?? true,
|
||||||
|
$type: json['type'] as String?,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$DropdownToJson(_Dropdown instance) => <String, dynamic>{
|
||||||
|
'data': instance.data,
|
||||||
|
'visible': instance.visible,
|
||||||
|
'type': instance.$type,
|
||||||
|
};
|
||||||
|
|
||||||
|
_ImagePicker _$ImagePickerFromJson(Map<String, dynamic> json) => _ImagePicker(
|
||||||
|
data: ImagePickerSDUIModel.fromJson(json['data'] as Map<String, dynamic>),
|
||||||
|
visible: json['visible'] as bool? ?? true,
|
||||||
|
$type: json['type'] as String?,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$ImagePickerToJson(_ImagePicker instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'data': instance.data,
|
||||||
|
'visible': instance.visible,
|
||||||
|
'type': instance.$type,
|
||||||
|
};
|
||||||
|
|
||||||
|
_Column _$ColumnFromJson(Map<String, dynamic> json) => _Column(
|
||||||
|
children: (json['children'] as List<dynamic>)
|
||||||
|
.map((e) => SDUIWidgetModel.fromJson(e as Map<String, dynamic>))
|
||||||
|
.toList(),
|
||||||
|
spacing: (json['spacing'] as num?)?.toDouble() ?? 0.0,
|
||||||
|
mainAxisSize: json['main_axis_size'] as String? ?? 'max',
|
||||||
|
paddingHorizontal: (json['padding_horizontal'] as num?)?.toDouble() ?? 0.0,
|
||||||
|
paddingVertical: (json['padding_vertical'] as num?)?.toDouble() ?? 0.0,
|
||||||
|
crossAxisAlignment: json['cross_axis_alignment'] as String? ?? 'center',
|
||||||
|
visible: json['visible'] as bool? ?? true,
|
||||||
|
$type: json['type'] as String?,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$ColumnToJson(_Column instance) => <String, dynamic>{
|
||||||
|
'children': instance.children,
|
||||||
|
'spacing': instance.spacing,
|
||||||
|
'main_axis_size': instance.mainAxisSize,
|
||||||
|
'padding_horizontal': instance.paddingHorizontal,
|
||||||
|
'padding_vertical': instance.paddingVertical,
|
||||||
|
'cross_axis_alignment': instance.crossAxisAlignment,
|
||||||
|
'visible': instance.visible,
|
||||||
|
'type': instance.$type,
|
||||||
|
};
|
||||||
|
|
||||||
|
_Row _$RowFromJson(Map<String, dynamic> json) => _Row(
|
||||||
|
children: (json['children'] as List<dynamic>)
|
||||||
|
.map((e) => SDUIWidgetModel.fromJson(e as Map<String, dynamic>))
|
||||||
|
.toList(),
|
||||||
|
spacing: (json['spacing'] as num?)?.toDouble() ?? 0.0,
|
||||||
|
mainAxisAlignment: json['main_axis_alignment'] as String? ?? 'start',
|
||||||
|
visible: json['visible'] as bool? ?? true,
|
||||||
|
$type: json['type'] as String?,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$RowToJson(_Row instance) => <String, dynamic>{
|
||||||
|
'children': instance.children,
|
||||||
|
'spacing': instance.spacing,
|
||||||
|
'main_axis_alignment': instance.mainAxisAlignment,
|
||||||
|
'visible': instance.visible,
|
||||||
|
'type': instance.$type,
|
||||||
|
};
|
||||||
|
|
||||||
|
_SizedBox _$SizedBoxFromJson(Map<String, dynamic> json) => _SizedBox(
|
||||||
|
width: (json['width'] as num?)?.toDouble(),
|
||||||
|
height: (json['height'] as num?)?.toDouble(),
|
||||||
|
visible: json['visible'] as bool? ?? true,
|
||||||
|
$type: json['type'] as String?,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$SizedBoxToJson(_SizedBox instance) => <String, dynamic>{
|
||||||
|
'width': instance.width,
|
||||||
|
'height': instance.height,
|
||||||
|
'visible': instance.visible,
|
||||||
|
'type': instance.$type,
|
||||||
|
};
|
||||||
|
|
||||||
|
_Stepper _$StepperFromJson(Map<String, dynamic> json) => _Stepper(
|
||||||
|
data: StepperSDUIModel.fromJson(json['data'] as Map<String, dynamic>),
|
||||||
|
children: (json['children'] as List<dynamic>?)
|
||||||
|
?.map((e) => SDUIWidgetModel.fromJson(e as Map<String, dynamic>))
|
||||||
|
.toList(),
|
||||||
|
visible: json['visible'] as bool? ?? true,
|
||||||
|
index: (json['index'] as num?)?.toInt(),
|
||||||
|
$type: json['type'] as String?,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$StepperToJson(_Stepper instance) => <String, dynamic>{
|
||||||
|
'data': instance.data,
|
||||||
|
'children': instance.children,
|
||||||
|
'visible': instance.visible,
|
||||||
|
'index': instance.index,
|
||||||
|
'type': instance.$type,
|
||||||
|
};
|
||||||
|
|
||||||
|
_PageView _$PageViewFromJson(Map<String, dynamic> json) => _PageView(
|
||||||
|
data: PageViewSDUIModel.fromJson(json['data'] as Map<String, dynamic>),
|
||||||
|
children: (json['children'] as List<dynamic>)
|
||||||
|
.map((e) => SDUIWidgetModel.fromJson(e as Map<String, dynamic>))
|
||||||
|
.toList(),
|
||||||
|
visible: json['visible'] as bool? ?? true,
|
||||||
|
$type: json['type'] as String?,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$PageViewToJson(_PageView instance) => <String, dynamic>{
|
||||||
|
'data': instance.data,
|
||||||
|
'children': instance.children,
|
||||||
|
'visible': instance.visible,
|
||||||
|
'type': instance.$type,
|
||||||
|
};
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
|
||||||
|
|
||||||
part 'sdui_widget_model.freezed.dart';
|
|
||||||
part 'sdui_widget_model.g.dart';
|
|
||||||
|
|
||||||
@freezed
|
|
||||||
abstract class SDUIWidgetModel with _$SDUIWidgetModel {
|
|
||||||
const factory SDUIWidgetModel({
|
|
||||||
String? type,
|
|
||||||
bool? visible,
|
|
||||||
Map<String, dynamic>? data,
|
|
||||||
Map<String, dynamic>? child,
|
|
||||||
List<Map<String, dynamic>>? children,
|
|
||||||
}) = _SDUIWidgetModel;
|
|
||||||
|
|
||||||
factory SDUIWidgetModel.fromJson(Map<String, dynamic> json) =>
|
|
||||||
_$SDUIWidgetModelFromJson(json);
|
|
||||||
}
|
|
||||||
@@ -1,313 +0,0 @@
|
|||||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
|
||||||
// coverage:ignore-file
|
|
||||||
// ignore_for_file: type=lint
|
|
||||||
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
|
|
||||||
|
|
||||||
part of 'sdui_widget_model.dart';
|
|
||||||
|
|
||||||
// **************************************************************************
|
|
||||||
// FreezedGenerator
|
|
||||||
// **************************************************************************
|
|
||||||
|
|
||||||
// dart format off
|
|
||||||
T _$identity<T>(T value) => value;
|
|
||||||
|
|
||||||
/// @nodoc
|
|
||||||
mixin _$SDUIWidgetModel {
|
|
||||||
|
|
||||||
String? get type; bool? get visible; Map<String, dynamic>? get data; Map<String, dynamic>? get child; List<Map<String, dynamic>>? get children;
|
|
||||||
/// Create a copy of SDUIWidgetModel
|
|
||||||
/// with the given fields replaced by the non-null parameter values.
|
|
||||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
|
||||||
@pragma('vm:prefer-inline')
|
|
||||||
$SDUIWidgetModelCopyWith<SDUIWidgetModel> get copyWith => _$SDUIWidgetModelCopyWithImpl<SDUIWidgetModel>(this as SDUIWidgetModel, _$identity);
|
|
||||||
|
|
||||||
/// Serializes this SDUIWidgetModel to a JSON map.
|
|
||||||
Map<String, dynamic> toJson();
|
|
||||||
|
|
||||||
|
|
||||||
@override
|
|
||||||
bool operator ==(Object other) {
|
|
||||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is SDUIWidgetModel&&(identical(other.type, type) || other.type == type)&&(identical(other.visible, visible) || other.visible == visible)&&const DeepCollectionEquality().equals(other.data, data)&&const DeepCollectionEquality().equals(other.child, child)&&const DeepCollectionEquality().equals(other.children, children));
|
|
||||||
}
|
|
||||||
|
|
||||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
|
||||||
@override
|
|
||||||
int get hashCode => Object.hash(runtimeType,type,visible,const DeepCollectionEquality().hash(data),const DeepCollectionEquality().hash(child),const DeepCollectionEquality().hash(children));
|
|
||||||
|
|
||||||
@override
|
|
||||||
String toString() {
|
|
||||||
return 'SDUIWidgetModel(type: $type, visible: $visible, data: $data, child: $child, children: $children)';
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/// @nodoc
|
|
||||||
abstract mixin class $SDUIWidgetModelCopyWith<$Res> {
|
|
||||||
factory $SDUIWidgetModelCopyWith(SDUIWidgetModel value, $Res Function(SDUIWidgetModel) _then) = _$SDUIWidgetModelCopyWithImpl;
|
|
||||||
@useResult
|
|
||||||
$Res call({
|
|
||||||
String? type, bool? visible, Map<String, dynamic>? data, Map<String, dynamic>? child, List<Map<String, dynamic>>? children
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
/// @nodoc
|
|
||||||
class _$SDUIWidgetModelCopyWithImpl<$Res>
|
|
||||||
implements $SDUIWidgetModelCopyWith<$Res> {
|
|
||||||
_$SDUIWidgetModelCopyWithImpl(this._self, this._then);
|
|
||||||
|
|
||||||
final SDUIWidgetModel _self;
|
|
||||||
final $Res Function(SDUIWidgetModel) _then;
|
|
||||||
|
|
||||||
/// Create a copy of SDUIWidgetModel
|
|
||||||
/// with the given fields replaced by the non-null parameter values.
|
|
||||||
@pragma('vm:prefer-inline') @override $Res call({Object? type = freezed,Object? visible = freezed,Object? data = freezed,Object? child = freezed,Object? children = freezed,}) {
|
|
||||||
return _then(_self.copyWith(
|
|
||||||
type: freezed == type ? _self.type : type // ignore: cast_nullable_to_non_nullable
|
|
||||||
as String?,visible: freezed == visible ? _self.visible : visible // ignore: cast_nullable_to_non_nullable
|
|
||||||
as bool?,data: freezed == data ? _self.data : data // ignore: cast_nullable_to_non_nullable
|
|
||||||
as Map<String, dynamic>?,child: freezed == child ? _self.child : child // ignore: cast_nullable_to_non_nullable
|
|
||||||
as Map<String, dynamic>?,children: freezed == children ? _self.children : children // ignore: cast_nullable_to_non_nullable
|
|
||||||
as List<Map<String, dynamic>>?,
|
|
||||||
));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// Adds pattern-matching-related methods to [SDUIWidgetModel].
|
|
||||||
extension SDUIWidgetModelPatterns on SDUIWidgetModel {
|
|
||||||
/// A variant of `map` that fallback to returning `orElse`.
|
|
||||||
///
|
|
||||||
/// It is equivalent to doing:
|
|
||||||
/// ```dart
|
|
||||||
/// switch (sealedClass) {
|
|
||||||
/// case final Subclass value:
|
|
||||||
/// return ...;
|
|
||||||
/// case _:
|
|
||||||
/// return orElse();
|
|
||||||
/// }
|
|
||||||
/// ```
|
|
||||||
|
|
||||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _SDUIWidgetModel value)? $default,{required TResult orElse(),}){
|
|
||||||
final _that = this;
|
|
||||||
switch (_that) {
|
|
||||||
case _SDUIWidgetModel() when $default != null:
|
|
||||||
return $default(_that);case _:
|
|
||||||
return orElse();
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/// A `switch`-like method, using callbacks.
|
|
||||||
///
|
|
||||||
/// Callbacks receives the raw object, upcasted.
|
|
||||||
/// It is equivalent to doing:
|
|
||||||
/// ```dart
|
|
||||||
/// switch (sealedClass) {
|
|
||||||
/// case final Subclass value:
|
|
||||||
/// return ...;
|
|
||||||
/// case final Subclass2 value:
|
|
||||||
/// return ...;
|
|
||||||
/// }
|
|
||||||
/// ```
|
|
||||||
|
|
||||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _SDUIWidgetModel value) $default,){
|
|
||||||
final _that = this;
|
|
||||||
switch (_that) {
|
|
||||||
case _SDUIWidgetModel():
|
|
||||||
return $default(_that);case _:
|
|
||||||
throw StateError('Unexpected subclass');
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/// A variant of `map` that fallback to returning `null`.
|
|
||||||
///
|
|
||||||
/// It is equivalent to doing:
|
|
||||||
/// ```dart
|
|
||||||
/// switch (sealedClass) {
|
|
||||||
/// case final Subclass value:
|
|
||||||
/// return ...;
|
|
||||||
/// case _:
|
|
||||||
/// return null;
|
|
||||||
/// }
|
|
||||||
/// ```
|
|
||||||
|
|
||||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _SDUIWidgetModel value)? $default,){
|
|
||||||
final _that = this;
|
|
||||||
switch (_that) {
|
|
||||||
case _SDUIWidgetModel() when $default != null:
|
|
||||||
return $default(_that);case _:
|
|
||||||
return null;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/// A variant of `when` that fallback to an `orElse` callback.
|
|
||||||
///
|
|
||||||
/// It is equivalent to doing:
|
|
||||||
/// ```dart
|
|
||||||
/// switch (sealedClass) {
|
|
||||||
/// case Subclass(:final field):
|
|
||||||
/// return ...;
|
|
||||||
/// case _:
|
|
||||||
/// return orElse();
|
|
||||||
/// }
|
|
||||||
/// ```
|
|
||||||
|
|
||||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String? type, bool? visible, Map<String, dynamic>? data, Map<String, dynamic>? child, List<Map<String, dynamic>>? children)? $default,{required TResult orElse(),}) {final _that = this;
|
|
||||||
switch (_that) {
|
|
||||||
case _SDUIWidgetModel() when $default != null:
|
|
||||||
return $default(_that.type,_that.visible,_that.data,_that.child,_that.children);case _:
|
|
||||||
return orElse();
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/// A `switch`-like method, using callbacks.
|
|
||||||
///
|
|
||||||
/// As opposed to `map`, this offers destructuring.
|
|
||||||
/// It is equivalent to doing:
|
|
||||||
/// ```dart
|
|
||||||
/// switch (sealedClass) {
|
|
||||||
/// case Subclass(:final field):
|
|
||||||
/// return ...;
|
|
||||||
/// case Subclass2(:final field2):
|
|
||||||
/// return ...;
|
|
||||||
/// }
|
|
||||||
/// ```
|
|
||||||
|
|
||||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String? type, bool? visible, Map<String, dynamic>? data, Map<String, dynamic>? child, List<Map<String, dynamic>>? children) $default,) {final _that = this;
|
|
||||||
switch (_that) {
|
|
||||||
case _SDUIWidgetModel():
|
|
||||||
return $default(_that.type,_that.visible,_that.data,_that.child,_that.children);case _:
|
|
||||||
throw StateError('Unexpected subclass');
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/// A variant of `when` that fallback to returning `null`
|
|
||||||
///
|
|
||||||
/// It is equivalent to doing:
|
|
||||||
/// ```dart
|
|
||||||
/// switch (sealedClass) {
|
|
||||||
/// case Subclass(:final field):
|
|
||||||
/// return ...;
|
|
||||||
/// case _:
|
|
||||||
/// return null;
|
|
||||||
/// }
|
|
||||||
/// ```
|
|
||||||
|
|
||||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String? type, bool? visible, Map<String, dynamic>? data, Map<String, dynamic>? child, List<Map<String, dynamic>>? children)? $default,) {final _that = this;
|
|
||||||
switch (_that) {
|
|
||||||
case _SDUIWidgetModel() when $default != null:
|
|
||||||
return $default(_that.type,_that.visible,_that.data,_that.child,_that.children);case _:
|
|
||||||
return null;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/// @nodoc
|
|
||||||
@JsonSerializable()
|
|
||||||
|
|
||||||
class _SDUIWidgetModel implements SDUIWidgetModel {
|
|
||||||
const _SDUIWidgetModel({this.type, this.visible, final Map<String, dynamic>? data, final Map<String, dynamic>? child, final List<Map<String, dynamic>>? children}): _data = data,_child = child,_children = children;
|
|
||||||
factory _SDUIWidgetModel.fromJson(Map<String, dynamic> json) => _$SDUIWidgetModelFromJson(json);
|
|
||||||
|
|
||||||
@override final String? type;
|
|
||||||
@override final bool? visible;
|
|
||||||
final Map<String, dynamic>? _data;
|
|
||||||
@override Map<String, dynamic>? get data {
|
|
||||||
final value = _data;
|
|
||||||
if (value == null) return null;
|
|
||||||
if (_data is EqualUnmodifiableMapView) return _data;
|
|
||||||
// ignore: implicit_dynamic_type
|
|
||||||
return EqualUnmodifiableMapView(value);
|
|
||||||
}
|
|
||||||
|
|
||||||
final Map<String, dynamic>? _child;
|
|
||||||
@override Map<String, dynamic>? get child {
|
|
||||||
final value = _child;
|
|
||||||
if (value == null) return null;
|
|
||||||
if (_child is EqualUnmodifiableMapView) return _child;
|
|
||||||
// ignore: implicit_dynamic_type
|
|
||||||
return EqualUnmodifiableMapView(value);
|
|
||||||
}
|
|
||||||
|
|
||||||
final List<Map<String, dynamic>>? _children;
|
|
||||||
@override List<Map<String, dynamic>>? get children {
|
|
||||||
final value = _children;
|
|
||||||
if (value == null) return null;
|
|
||||||
if (_children is EqualUnmodifiableListView) return _children;
|
|
||||||
// ignore: implicit_dynamic_type
|
|
||||||
return EqualUnmodifiableListView(value);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// Create a copy of SDUIWidgetModel
|
|
||||||
/// with the given fields replaced by the non-null parameter values.
|
|
||||||
@override @JsonKey(includeFromJson: false, includeToJson: false)
|
|
||||||
@pragma('vm:prefer-inline')
|
|
||||||
_$SDUIWidgetModelCopyWith<_SDUIWidgetModel> get copyWith => __$SDUIWidgetModelCopyWithImpl<_SDUIWidgetModel>(this, _$identity);
|
|
||||||
|
|
||||||
@override
|
|
||||||
Map<String, dynamic> toJson() {
|
|
||||||
return _$SDUIWidgetModelToJson(this, );
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
bool operator ==(Object other) {
|
|
||||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _SDUIWidgetModel&&(identical(other.type, type) || other.type == type)&&(identical(other.visible, visible) || other.visible == visible)&&const DeepCollectionEquality().equals(other._data, _data)&&const DeepCollectionEquality().equals(other._child, _child)&&const DeepCollectionEquality().equals(other._children, _children));
|
|
||||||
}
|
|
||||||
|
|
||||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
|
||||||
@override
|
|
||||||
int get hashCode => Object.hash(runtimeType,type,visible,const DeepCollectionEquality().hash(_data),const DeepCollectionEquality().hash(_child),const DeepCollectionEquality().hash(_children));
|
|
||||||
|
|
||||||
@override
|
|
||||||
String toString() {
|
|
||||||
return 'SDUIWidgetModel(type: $type, visible: $visible, data: $data, child: $child, children: $children)';
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/// @nodoc
|
|
||||||
abstract mixin class _$SDUIWidgetModelCopyWith<$Res> implements $SDUIWidgetModelCopyWith<$Res> {
|
|
||||||
factory _$SDUIWidgetModelCopyWith(_SDUIWidgetModel value, $Res Function(_SDUIWidgetModel) _then) = __$SDUIWidgetModelCopyWithImpl;
|
|
||||||
@override @useResult
|
|
||||||
$Res call({
|
|
||||||
String? type, bool? visible, Map<String, dynamic>? data, Map<String, dynamic>? child, List<Map<String, dynamic>>? children
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
/// @nodoc
|
|
||||||
class __$SDUIWidgetModelCopyWithImpl<$Res>
|
|
||||||
implements _$SDUIWidgetModelCopyWith<$Res> {
|
|
||||||
__$SDUIWidgetModelCopyWithImpl(this._self, this._then);
|
|
||||||
|
|
||||||
final _SDUIWidgetModel _self;
|
|
||||||
final $Res Function(_SDUIWidgetModel) _then;
|
|
||||||
|
|
||||||
/// Create a copy of SDUIWidgetModel
|
|
||||||
/// with the given fields replaced by the non-null parameter values.
|
|
||||||
@override @pragma('vm:prefer-inline') $Res call({Object? type = freezed,Object? visible = freezed,Object? data = freezed,Object? child = freezed,Object? children = freezed,}) {
|
|
||||||
return _then(_SDUIWidgetModel(
|
|
||||||
type: freezed == type ? _self.type : type // ignore: cast_nullable_to_non_nullable
|
|
||||||
as String?,visible: freezed == visible ? _self.visible : visible // ignore: cast_nullable_to_non_nullable
|
|
||||||
as bool?,data: freezed == data ? _self._data : data // ignore: cast_nullable_to_non_nullable
|
|
||||||
as Map<String, dynamic>?,child: freezed == child ? _self._child : child // ignore: cast_nullable_to_non_nullable
|
|
||||||
as Map<String, dynamic>?,children: freezed == children ? _self._children : children // ignore: cast_nullable_to_non_nullable
|
|
||||||
as List<Map<String, dynamic>>?,
|
|
||||||
));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// dart format on
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
|
||||||
|
|
||||||
part of 'sdui_widget_model.dart';
|
|
||||||
|
|
||||||
// **************************************************************************
|
|
||||||
// JsonSerializableGenerator
|
|
||||||
// **************************************************************************
|
|
||||||
|
|
||||||
_SDUIWidgetModel _$SDUIWidgetModelFromJson(Map<String, dynamic> json) =>
|
|
||||||
_SDUIWidgetModel(
|
|
||||||
type: json['type'] as String?,
|
|
||||||
visible: json['visible'] as bool?,
|
|
||||||
data: json['data'] as Map<String, dynamic>?,
|
|
||||||
child: json['child'] as Map<String, dynamic>?,
|
|
||||||
children: (json['children'] as List<dynamic>?)
|
|
||||||
?.map((e) => e as Map<String, dynamic>)
|
|
||||||
.toList(),
|
|
||||||
);
|
|
||||||
|
|
||||||
Map<String, dynamic> _$SDUIWidgetModelToJson(_SDUIWidgetModel instance) =>
|
|
||||||
<String, dynamic>{
|
|
||||||
'type': instance.type,
|
|
||||||
'visible': instance.visible,
|
|
||||||
'data': instance.data,
|
|
||||||
'child': instance.child,
|
|
||||||
'children': instance.children,
|
|
||||||
};
|
|
||||||
@@ -1,8 +1,7 @@
|
|||||||
// SDUI Export file
|
// SDUI Export file
|
||||||
export 'form/sdui_form_widget.dart';
|
export 'form/sdui_form_widget.dart';
|
||||||
export 'model/sdui_widget_model.dart';
|
export 'model/sdui_widget.dart'; // Sealed class برای type-safe widget handling
|
||||||
export 'widgets/card_label_item/card_label_item_sdui.dart';
|
export 'widgets/card_label_item/card_label_item_sdui.dart';
|
||||||
export 'widgets/card_label_item/model/card_label_item_sdui_model.dart';
|
export 'widgets/card_label_item/model/card_label_item_sdui_model.dart';
|
||||||
export 'widgets/text_form_filed/text_form_filed_sdui.dart';
|
export 'widgets/text_form_filed/text_form_filed_sdui.dart';
|
||||||
export 'widgets/text_form_filed/model/text_form_field_sdui_model.dart';
|
export 'widgets/text_form_filed/model/text_form_field_sdui_model.dart';
|
||||||
|
|
||||||
|
|||||||
@@ -15,14 +15,14 @@ class StepperSDUI extends StatelessWidget {
|
|||||||
return Obx(() {
|
return Obx(() {
|
||||||
final activeStep = state?[model.key] as int? ?? model.activeStep ?? 0;
|
final activeStep = state?[model.key] as int? ?? model.activeStep ?? 0;
|
||||||
|
|
||||||
return Directionality(
|
return SingleChildScrollView(
|
||||||
textDirection: TextDirection.ltr,
|
scrollDirection: Axis.horizontal,
|
||||||
child: SizedBox(
|
child: Directionality(
|
||||||
height: 24,
|
textDirection: TextDirection.ltr,
|
||||||
width: Get.width,
|
child: SizedBox(
|
||||||
child: Row(
|
height: 30.h,
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
width: Get.width,
|
||||||
children: _buildSteps(totalSteps, activeStep),
|
child: Row(children: _buildSteps(totalSteps, activeStep)),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
@@ -58,7 +58,8 @@ class StepperSDUI extends StatelessWidget {
|
|||||||
// Add divider between steps (except after last step)
|
// Add divider between steps (except after last step)
|
||||||
if (i < totalSteps - 1) {
|
if (i < totalSteps - 1) {
|
||||||
widgets.add(
|
widgets.add(
|
||||||
Expanded(
|
SizedBox(
|
||||||
|
width: 40.w,
|
||||||
child: Divider(
|
child: Divider(
|
||||||
color: activeStep >= i + 1
|
color: activeStep >= i + 1
|
||||||
? AppColor.greenNormalHover
|
? AppColor.greenNormalHover
|
||||||
|
|||||||
Reference in New Issue
Block a user