routeItem function

Map<String, dynamic> routeItem(
  1. Map<String, dynamic> item,
  2. BuildContext context
)

Implementation

Map<String, dynamic> routeItem(
  Map<String, dynamic> item,
  BuildContext context,
) {
  Map<String, dynamic> result = {
    'errorMessage': '',
    'errorCode': '',
    'infoMessage': '',
  };
  if (item['type'] == 'widget' &&
      (item['callable']['widget'] != null ||
          item['callable']['function'] != null)) {
    if (item['callable']['function'] != null) {
      Navigator.pop(context); // Close the drawer
      if (item['callable']['type'] != null &&
          item['callable']['type'] == 'sync') {
        // Sync function
        item['callable']['function'](context);
      } else {
        // Async function. E.g. logOut(context)
        item['callable']['function'](context)
            .then((value) {
              // Do nothing
              return result;
            })
            .catchError((error) {
              result['errorMessage'] =
                  "Error calling function: ${error.toString()}";
              result['errorCode'] = "AD-E030";
              return result;
            });
      }
    } else {
      Navigator.push(
        context,
        MaterialPageRoute(builder: (context) => item['callable']['widget']()),
      );
    }
  } else {
    result['errorMessage'] = "${item['title']} is not implemented";
    result['errorCode'] = "AD-E020";
    Navigator.pop(context); // Close the drawer
  }
  return result;
}