showAddModal static method

dynamic showAddModal(
  1. 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();
        }
      },
    ),
  );
}