showAddModal static method
dynamic
showAddModal(
- dynamic context
Implementation
static showAddModal(context) async {
List<MaterialXFormController> controller = [];
List<Widget> buildWidget = [];
List<SelectData> dataSelect = await getListRelation();
SelectData? dataForeignKey;
for (final ColumnDatabase i in globalData?.column ?? []) {
final cont = MaterialXFormController(
isRequired: i.primaryKey && i.autoIncrement ? false : !i.isNull,
);
controller.add(cont);
buildWidget.add(
Padding(
padding: const EdgeInsets.only(bottom: 12),
child: MaterialXForm(
onTap: () {
if (currentForeignKey != null) {
if (currentForeignKey!.baseColumn == i.name) {
Select.single(
title: i.name,
context: context,
data: dataSelect,
selectedId: dataForeignKey?.id,
).then((value) {
if (value != null) {
dataForeignKey = value;
cont.controller?.text = value.id ?? '';
}
});
}
}
},
title: i.name,
hintText: i.primaryKey && i.autoIncrement
? 'Auto Incement'
: i.isNull
? '(Optional)'
: '(Required)',
controller: cont,
isEnabled: !(currentForeignKey != null && currentForeignKey?.baseColumn == i.name) && !(i.primaryKey && i.autoIncrement),
isNumber: !(i.typeData == DataType.text),
),
),
);
}
showModalBottomSheet(
context: context,
backgroundColor: Colors.transparent,
isScrollControlled: true,
builder: (context) {
return bottom(
context: context,
maxHeight: 0.9,
child: StatefulBuilder(builder: (context, s) {
return Column(
children: [
Column(
children: buildWidget.toList(),
),
MaterialXButton(
onTap: () {
final error = controller.where((element) => element.controller!.text == '' && element.isRequired);
if (error.isNotEmpty) {
error.map((e) => e.status = FormStatus.error);
s(() {});
return;
} else {
final Map<String, String> map = {};
for (int i = 0; i < (globalData?.column ?? []).length; i++) {
final ColumnDatabase data = globalData!.column[i];
if (controller[i].controller?.text != '') {
map.addAll({
data.name: controller[i].controller?.text ?? '',
});
}
}
if (_dataMerge != null) {
_dataMerge!.table(globalData!.tableName).listData([map]).insert().then((value) {
getTableRow();
});
} else {
DB.table(globalData!.tableName).listData([map]).insert().then((value) {
getTableRow();
});
}
Navigator.pop(context);
}
},
title: 'Add',
)
],
);
}),
);
}).then(
(value) => Future.delayed(
const Duration(milliseconds: 800),
() {
for (var i in controller) {
i.controller?.dispose();
}
},
),
);
}