66 lines
1.9 KiB
Dart
66 lines
1.9 KiB
Dart
import 'dart:convert';
|
|
|
|
import 'package:hub/features/backend/index.dart';
|
|
import 'package:hub/flutter_flow/flutter_flow_util.dart';
|
|
import 'package:hub/flutter_flow/nav/serialization_util.dart';
|
|
|
|
export 'package:collection/collection.dart' show ListEquality;
|
|
export 'package:flutter/material.dart' show Color, Colors;
|
|
export 'package:from_css_color/from_css_color.dart';
|
|
|
|
typedef StructBuilder<T> = T Function(Map<String, dynamic> data);
|
|
|
|
abstract class BaseStruct {
|
|
Map<String, dynamic> toSerializableMap();
|
|
String serialize() => json.encode(toSerializableMap());
|
|
}
|
|
|
|
dynamic deserializeStructParam<T>(
|
|
dynamic param,
|
|
ParamType paramType,
|
|
bool isList, {
|
|
required StructBuilder<T> structBuilder,
|
|
}) {
|
|
if (param == null) {
|
|
return null;
|
|
} else if (isList) {
|
|
final paramValues;
|
|
try {
|
|
paramValues = param is Iterable ? param : json.decode(param);
|
|
} catch (e) {
|
|
return null;
|
|
}
|
|
if (paramValues is! Iterable) {
|
|
return null;
|
|
}
|
|
return paramValues.map<T>((e) => deserializeStructParam<T>(e, paramType, false, structBuilder: structBuilder)).toList();
|
|
} else if (param is Map<String, dynamic>) {
|
|
return structBuilder(param);
|
|
} else {
|
|
return deserializeParam<T>(
|
|
param,
|
|
paramType,
|
|
isList,
|
|
structBuilder: structBuilder,
|
|
);
|
|
}
|
|
}
|
|
|
|
List<T>? getStructList<T>(
|
|
dynamic value,
|
|
StructBuilder<T> structBuilder,
|
|
) =>
|
|
value is! List ? null : value.whereType<Map<String, dynamic>>().map((e) => structBuilder(e)).toList();
|
|
|
|
List<T>? getEnumList<T>(dynamic value) => value is! List ? null : value.map((e) => deserializeEnum<T>(e)).withoutNulls;
|
|
|
|
Color? getSchemaColor(dynamic value) => value is String
|
|
? fromCssColor(value)
|
|
: value is Color
|
|
? value
|
|
: null;
|
|
|
|
List<Color>? getColorsList(dynamic value) => value is! List ? null : value.map(getSchemaColor).withoutNulls;
|
|
|
|
List<T>? getDataList<T>(dynamic value) => value is! List ? null : value.map((e) => castToType<T>(e)!).toList();
|