valueByType<T> function

dynamic valueByType<T>(
  1. dynamic value,
  2. Type type, {
  3. String stack = "",
  4. ItemBuild<T>? itemBuild,
  5. bool nullable = false,
  6. T? dValue,
})

值转换 dValue 默认值

Implementation

valueByType<T>(
    value,
    Type type, {
      String stack: "",
      ItemBuild<T>? itemBuild,
      bool nullable = false,
      T? dValue,
    }) {
  if (value == null) {
//    debugPrint("valueByType  $stack : value is null");
    if (nullable) return null;

    if (type == String) {
      return null;
    } else if (type == int) {
      return dValue ?? 0;
    } else if (type == double) {
      return dValue ?? 0.00;
    } else if (type == bool) {
      return dValue ?? false;
    } else if (type == List) {
      return dValue ?? [].cast<T>();
    } else if (type == Map) {
      return dValue ?? {};
    }
    return null;
  } else {
    if (value.runtimeType == type) return value;

//  debugPrint("$stack : ${value.runtimeType} is not $type type");
    if (type == String) {
      return value.toString();
    } else if (type == int) {
      return int.tryParse(value.toString());
    } else if (type == double) {
      return DoubleUtil.parse(value.toString());
    } else if (type == bool) {
      return BoolUtil.parse(value.toString());
    } else if (type == List) {
      return ListUtil.parse<T>(value, itemBuild: itemBuild);
    } else if (type == Map) {
      if (value is List) {
        Map<String, dynamic> newValue = {};
        int index = 0;
        value.forEach((item) {
          newValue.update("$index", (v) => item, ifAbsent: () => item);
        });
        return newValue;
      } else {
        return value;
      }
    }
  }
}