parse method

  1. @override
Widget parse(
  1. Map<String, dynamic> map,
  2. BuildContext buildContext,
  3. ClickListener? listener
)
override

parse the json map into a flutter widget.

Implementation

@override
Widget parse(Map<String, dynamic> map, BuildContext buildContext,
    ClickListener? listener) {
  Map<String, dynamic> on_click = map['on_click'];

  String redirect =
  on_click.containsKey("redirect") ? map['on_click']['redirect'] : "";

  var apiCall =
  on_click.containsKey('api_call') ? map['on_click']['api_call'] : "";

  var elevatedButton = ElevatedButton(
      onPressed: () async {
        var response;
        if (redirect.isNotEmpty) {
          Navigator.pushNamed(buildContext, redirect.toString());
        } else if (apiCall.isNotEmpty) {
          String method = apiCall['method'];
          if (method.compareTo('post') == 0) {
            if (apiCall['pre_actions']['validation']) {
              if (formKey.currentState!.validate()) {
                formKey.currentState!.save();
                response = await http.post(Uri.parse(apiCall['url']),
                    body: jsonEncode(model),
                    headers: {
                      'Content-Type': 'application/json; charset=UTF-8'
                    });
              }
            } else {
              formKey.currentState!.save();
              response = await http.post(Uri.parse(apiCall['url']),
                  body: jsonEncode(model),
                  headers: {
                    'Content-Type': 'application/json; charset=UTF-8'
                  });
            }
            model = {};
          } else if (method.compareTo('get') == 0) {
            // response = await http.get(Uri.parse(apiCall['url']));
            // listAddressess = response.body;
            return;
          } else if (method.compareTo('put') == 0)
            await http.put(Uri.parse(apiCall['url']));
          else
            await http.delete(Uri.parse(apiCall['url']));

          if (apiCall['post_actions']['showProgress'] == true) {
            LinearProgressIndicator(
              backgroundColor: Colors.red,
            );
          }
          if (response != null) {
            if (method.compareTo('post') == 0 || method.compareTo('put') == 0)
              formKey.currentState!.reset();
            String msg = apiCall['on_success']['toastMessage'];
            showDialog(
                context: buildContext,
                builder: (buildContext) {
                  return AlertDialog(
                    title: Text(
                      'API Call Result',
                    ),
                    content: new Column(
                      mainAxisSize: MainAxisSize.min,
                      crossAxisAlignment: CrossAxisAlignment.start,
                      children: <Widget>[
                        Text(
                          msg,
                          style: TextStyle(color: Colors.green),
                        ),
                      ],
                    ),
                  );
                });
          }
        }
      },
      child: DynamicWidgetBuilder.buildFromMap(
          map['child'], buildContext, listener));

  return elevatedButton;
}