schema_util.dart 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import 'dart:convert';
  2. import 'package:flutter/material.dart';
  3. import 'package:from_css_color/from_css_color.dart';
  4. import '/flutter_flow/flutter_flow_util.dart';
  5. export 'package:collection/collection.dart' show ListEquality;
  6. export 'package:flutter/material.dart' show Color, Colors;
  7. export 'package:from_css_color/from_css_color.dart';
  8. typedef StructBuilder<T> = T Function(Map<String, dynamic> data);
  9. abstract class BaseStruct with DebugLoggable {
  10. Map<String, dynamic> toSerializableMap();
  11. String serialize() => json.encode(toSerializableMap());
  12. Map<String, DebugDataField> toDebugSerializableMap();
  13. }
  14. dynamic deserializeStructParam<T>(
  15. dynamic param,
  16. ParamType paramType,
  17. bool isList, {
  18. required StructBuilder<T> structBuilder,
  19. }) {
  20. if (param == null) {
  21. return null;
  22. } else if (isList) {
  23. final paramValues;
  24. try {
  25. paramValues = param is Iterable ? param : json.decode(param);
  26. } catch (e) {
  27. return null;
  28. }
  29. if (paramValues is! Iterable) {
  30. return null;
  31. }
  32. return paramValues
  33. .map<T>((e) => deserializeStructParam<T>(e, paramType, false,
  34. structBuilder: structBuilder))
  35. .toList();
  36. } else if (param is Map<String, dynamic>) {
  37. return structBuilder(param);
  38. } else {
  39. return deserializeParam<T>(
  40. param,
  41. paramType,
  42. isList,
  43. structBuilder: structBuilder,
  44. );
  45. }
  46. }
  47. List<T>? getStructList<T>(
  48. dynamic value,
  49. StructBuilder<T> structBuilder,
  50. ) =>
  51. value is! List
  52. ? null
  53. : value
  54. .where((e) => e is Map<String, dynamic>)
  55. .map((e) => structBuilder(e as Map<String, dynamic>))
  56. .toList();
  57. Color? getSchemaColor(dynamic value) => value is String
  58. ? fromCssColor(value)
  59. : value is Color
  60. ? value
  61. : null;
  62. List<Color>? getColorsList(dynamic value) =>
  63. value is! List ? null : value.map(getSchemaColor).withoutNulls;
  64. List<T>? getDataList<T>(dynamic value) =>
  65. value is! List ? null : value.map((e) => castToType<T>(e)!).toList();