typedef Future InitMethod();

typedef Future StringParamsMethod(data);

class Application {
  // 初始化方法
  static List<InitMethod> _initMethods = List();

  ///有标签的方法用于没有页面的第三模块调用
  static Map<String, InitMethod> _initStringMethods = Map();

  static Map<String, StringParamsMethod> _initStringParamsMethods = Map();

  static Future init() async {
    for (InitMethod method in _initMethods) {
      await method();
    }

    return Future.delayed(Duration.zero);
  }

  static addMethod(InitMethod method) {
    _initMethods.add(method);
  }

  static addStringMethod({String type, InitMethod method}) {
    if (type == null || method == null) {
      return;
    }
    _initStringMethods[type] = method;
  }

  static bool hasStringMethod(String type) {
    return _initStringMethods.containsKey(type);
  }

  static doStringMethod(String type) {
    if (_initStringMethods.containsKey(type)) {
      print("存在方法" + type);
      _initStringMethods[type]();
    } else {
      print("不存在方法" + type);
    }
  }

  static addStringParamsMethod({String type , StringParamsMethod method}) {
    if (type == null || method == null) {
      return;
    }
    _initStringParamsMethods[type] = method;
  }

  static doStringParamsMethod(String type, {Map<String, dynamic> data}) {
    if (_initStringParamsMethods.containsKey(type)) {
      print("存在方法" + type);
      _initStringParamsMethods[type](data);
    } else {
      print("不存在方法" + type);
    }
  }
}