JSnail
A utility class for parsing values from dynamic sources such as Maps.
This package provides methods for safely extracting values from a source map or other dynamic objects. It includes methods for reading various data types like strings, integers, doubles, booleans, lists, maps, and enumerations.
import 'package:flutter/foundation.dart'; import 'jsnail.dart'; import 'jsnailparser.dart'; enum Role { admin, viewer, moderator, user, unknown } class UserModel1 { late String name; late int age; late bool isStudent; late List grades; late Role role; void parseModel(Map data) { JSnail js = const JSnail(); age = js.readInt(data, 'age'); // 30 name = js.readString(data, 'name'); // 'John' role = js.readEnum(data, 'role', Role.values, Role.unknown); // admin, isStudent = js.readBool(data, 'isStudent'); // true grades = js.readList(data, 'grades'); // [95, 88] } } class UserModel2 with JSnailParser { late String name; late int age; late bool isStudent; late List grades; late Role role; void parseModel(Map data) { age = readInt(data, 'age'); // 30 name = readString(data, 'name'); // 'John' role = readEnum(data, 'role', Role.values, Role.unknown); // admin, isStudent = readBool(data, 'isStudent'); // true grades = readList(data, 'grades'); // [95, 88] } } class JSnailTest { void runTest() { final data = { 'age': 30, 'name': 'John', 'role': 'admin', 'isStudent': true, 'grades': [95, 88, 75], }; UserModel1 userModel = UserModel1()..parseModel(data); UserModel2 userMode2 = UserModel2()..parseModel(data); debugPrint( 'age = ${userModel.age}, ' 'name = ${userModel.name},' 'role = ${userModel.role}, ' 'grades = ${userModel.grades}, ' 'isStudent = ${userModel.isStudent}', ); debugPrint( 'age = ${userMode2.age}, ' 'name = ${userMode2.name},' 'role = ${userMode2.role}, ' 'grades = ${userMode2.grades}, ' 'isStudent = ${userMode2.isStudent}', ); } }