Line data Source code
1 : import 'dart:convert'; 2 : 3 : import 'package:equatable/equatable.dart'; 4 : import 'package:mini_sprite/mini_sprite.dart'; 5 : 6 : /// {@template mini_library} 7 : /// A class that holds a library of [MiniSprite]s. 8 : /// {@endtemplate} 9 : class MiniLibrary extends Equatable { 10 : /// {@macro mini_library} 11 1 : const MiniLibrary(this.sprites); 12 : 13 : /// {@macro mini_library} 14 2 : MiniLibrary.empty() : sprites = {}; 15 : 16 : /// {@macro mini_library} 17 : /// 18 : /// Returns a [MiniLibrary] from the serialized data. 19 1 : factory MiniLibrary.fromDataString(String value) { 20 : const lineSplitter = LineSplitter(); 21 1 : final lines = lineSplitter.convert(value); 22 : 23 3 : final sprites = lines.fold<Map<String, MiniSprite>>({}, (map, line) { 24 1 : final blocks = line.split('|'); 25 1 : final name = blocks.first; 26 1 : final data = blocks.last; 27 : 28 1 : return { 29 1 : ...map, 30 2 : name: MiniSprite.fromDataString(data), 31 : }; 32 : }); 33 : 34 1 : return MiniLibrary(sprites); 35 : } 36 : 37 : /// Returns this as a data string. 38 1 : String toDataString() { 39 4 : return sprites.entries.map((entry) { 40 4 : return '${entry.key}|${entry.value.toDataString()}'; 41 1 : }).join('\n'); 42 : } 43 : 44 : /// The library of sprites. 45 : final Map<String, MiniSprite> sprites; 46 : 47 1 : @override 48 2 : List<Object?> get props => [sprites]; 49 : }