import 'dart:convert'; import 'package:drift/drift.dart'; import 'package:flutter/widgets.dart'; import 'package:json_annotation/json_annotation.dart'; class IconDataJsonConverter implements JsonConverter> { const IconDataJsonConverter(); @override IconData fromJson(Map json) { return IconData( json['codePoint'] as int, fontFamily: json['fontFamily'] as String, fontPackage: json['fontPackage'] as String, ); } @override Map toJson(IconData iconData) { return { 'codePoint': iconData.codePoint, 'fontFamily': iconData.fontFamily, 'fontPackage': iconData.fontPackage, }; } } class IconDataTypeConverter implements TypeConverter { const IconDataTypeConverter(); @override IconData fromSql(String fromDb) { final json = jsonDecode(fromDb) as Map; return const IconDataJsonConverter().fromJson(json); } @override String toSql(IconData value) { assert( value.fontFamily != null, 'Font family must be provided to identify icon', ); return jsonEncode(const IconDataJsonConverter().toJson(value)); } }