- Created CMakeLists.txt for Flutter and runner components. - Implemented resource script (Runner.rc) for application metadata. - Developed main entry point (main.cpp) for the Windows application. - Added FlutterWindow class to manage the Flutter view within a Win32 window. - Implemented utility functions for console management and command line argument parsing. - Established Win32Window class for high DPI-aware window handling. - Included application icon and manifest for proper Windows integration. - Set up build configurations and dependencies for the Flutter application on Windows.
		
			
				
	
	
		
			222 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			222 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
| import 'dart:convert';
 | |
| import 'package:google_maps_flutter/google_maps_flutter.dart';
 | |
| 
 | |
| 
 | |
| class JSONDecoder {
 | |
|   late final Map<String, dynamic> jsonObject;
 | |
|   late final List<dynamic> jsonList;
 | |
| 
 | |
|   JSONDecoder(dynamic json) {
 | |
|     if (json is Map<String, dynamic>) {
 | |
|       jsonObject = json;
 | |
|     } else if (json is String) {
 | |
|       dynamic object = jsonDecode(json);
 | |
|       if (object is Map<String, dynamic>) {
 | |
|         jsonObject = object;
 | |
|       } else if (object is List<Map<String, dynamic>>) {
 | |
|         jsonList = object;
 | |
|       } else if (object is List<dynamic>) {
 | |
|         jsonList = object;
 | |
|       }
 | |
|     } else if (json is List<Map<String, dynamic>>) {
 | |
|       jsonList = json;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   int get getId => getInt('id');
 | |
| 
 | |
|   int getInt(String key, [int defaultValue = 0]) {
 | |
|     return getIntOrNull(key) ?? defaultValue;
 | |
|   }
 | |
| 
 | |
|   bool has(String key) {
 | |
|     return jsonObject.containsKey(key);
 | |
|   }
 | |
| 
 | |
|   int? getIntOrNull(String key) {
 | |
|     if (has(key)) {
 | |
|       return int.tryParse(jsonObject[key].toString());
 | |
|     }
 | |
|     return null;
 | |
|   }
 | |
| 
 | |
|   double getDouble(String key, [double defaultValue = 0]) {
 | |
|     if (jsonObject.containsKey(key)) {
 | |
|       return double.tryParse(jsonObject[key].toString()) ?? defaultValue;
 | |
|     }
 | |
|     return defaultValue;
 | |
|   }
 | |
| 
 | |
|   double? getDoubleOrNull(
 | |
|       String key,
 | |
|       ) {
 | |
|     if (jsonObject.containsKey(key)) {
 | |
|       return double.tryParse(jsonObject[key].toString());
 | |
|     }
 | |
|     return null;
 | |
|   }
 | |
| 
 | |
|   String getString(String key, {String defaultValue = "", bool utf8 = false}) {
 | |
|     String? value;
 | |
|     if (jsonObject.containsKey(key)) {
 | |
|       value = validateString(jsonObject[key]) ?? defaultValue;
 | |
|       if (utf8) {
 | |
|         return _utf8Decode(value);
 | |
|       }
 | |
|     }
 | |
|     return value ?? defaultValue;
 | |
|   }
 | |
| 
 | |
|   String _utf8Decode(String string) {
 | |
|     try {
 | |
|       return utf8.decode(string.codeUnits);
 | |
|     } catch (e) {
 | |
|       return string;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   bool getBool(String key, [bool defaultValue = false]) {
 | |
|     if (jsonObject.containsKey(key)) {
 | |
|       String? value = validateString(jsonObject[key]);
 | |
|       if (value == null) return defaultValue;
 | |
|       return value.toLowerCase().compareTo('true') == 0;
 | |
|     }
 | |
|     return defaultValue;
 | |
|   }
 | |
| 
 | |
|   String? getStringOrNull(String key) {
 | |
|     if (jsonObject.containsKey(key)) {
 | |
|       return validateString(jsonObject[key]);
 | |
|     }
 | |
|     return null;
 | |
|   }
 | |
| 
 | |
|   T getEnum<T extends Enum>(String key, List<T> options, T defaultValue) {
 | |
|     return getEnumOrNull(key, options) ?? defaultValue;
 | |
|   }
 | |
| 
 | |
|   T? getEnumOrNull<T extends Enum>(
 | |
|       String key,
 | |
|       List<T> options,
 | |
|       ) {
 | |
|     String? value = getStringOrNull(key);
 | |
|     if (value == null) return null;
 | |
|     for (T t in options) {
 | |
|       if (t.name == value) {
 | |
|         return t;
 | |
|       }
 | |
|     }
 | |
|     return null;
 | |
|   }
 | |
| 
 | |
|   DateTime getDateTime(String key,
 | |
|       {DateTime? defaultValue, bool local = true}) {
 | |
|     defaultValue ??= DateTime.now();
 | |
|     if (jsonObject.containsKey(key)) {
 | |
|       defaultValue = DateTime.tryParse(jsonObject[key]);
 | |
|     }
 | |
|     return local ? defaultValue!.toLocal() : defaultValue!;
 | |
|   }
 | |
| 
 | |
|   LatLng getLatLng(
 | |
|       {String latitudeKey = 'latitude', String longitudeKey = 'longitude'}) {
 | |
|     double latitude = getDouble(latitudeKey);
 | |
|     double longitude = getDouble(longitudeKey);
 | |
|     return LatLng(latitude, longitude);
 | |
|   }
 | |
| 
 | |
|   LatLng? getLatLngOrNull(
 | |
|       {String latitudeKey = 'latitude', String longitudeKey = 'longitude'}) {
 | |
|     double? latitude = getDoubleOrNull(latitudeKey);
 | |
|     double? longitude = getDoubleOrNull(longitudeKey);
 | |
|     if (latitude != null && longitude != null) {
 | |
|       return LatLng(latitude, longitude);
 | |
|     }
 | |
|     return null;
 | |
|   }
 | |
| 
 | |
|   DateTime? getDateTimeOrNull(String key, {bool local = true}) {
 | |
|     if (jsonObject.containsKey(key)) {
 | |
|       String? validatedDate = validateString(jsonObject[key]);
 | |
|       if (validatedDate != null) {
 | |
|         return local
 | |
|             ? DateTime.tryParse(validatedDate)?.toLocal()
 | |
|             : DateTime.tryParse(validatedDate);
 | |
|       }
 | |
|     }
 | |
|     return null;
 | |
|   }
 | |
| 
 | |
|   String? validateString(Object? value) {
 | |
|     if (value != null &&
 | |
|         value.toString().toLowerCase().compareTo('null') != 0) {
 | |
|       return value.toString();
 | |
|     }
 | |
|     return null;
 | |
|   }
 | |
| 
 | |
|   List<T> getObjectList<T>(String key, [List<T> defaultValue = const []]) {
 | |
|     if (jsonObject.containsKey(key)) {
 | |
|       if (jsonObject[key] is List<dynamic>) {
 | |
|         return List<T>.from(jsonObject[key]);
 | |
|       }
 | |
|     }
 | |
|     return defaultValue;
 | |
|   }
 | |
| 
 | |
|   List<T>? getObjectListOrNull<T>(String key) {
 | |
|     if (has(key)) {
 | |
|       if (jsonObject[key] is List<dynamic>) {
 | |
|         return List<T>.from(jsonObject[key]);
 | |
|       } else if (jsonObject[key] is String) {
 | |
|         try {
 | |
|           return List<T>.from(jsonDecode(jsonObject[key]));
 | |
|         } catch (e) {}
 | |
|       }
 | |
|     }
 | |
|     return null;
 | |
|   }
 | |
| 
 | |
|   List<Map<String, dynamic>>? getMapListOrNull(String? key) {
 | |
|     if (jsonObject.containsKey(key) && jsonObject[key] is List<dynamic>) {
 | |
|       return List<Map<String, dynamic>>.from(jsonObject[key]);
 | |
|     }
 | |
|     return null;
 | |
|   }
 | |
| 
 | |
|   Map<String, dynamic>? getMapOrNull(String? key) {
 | |
|     if (jsonObject.containsKey(key) &&
 | |
|         jsonObject[key] is Map<String, dynamic>) {
 | |
|       return jsonObject[key];
 | |
|     }
 | |
|     return null;
 | |
|   }
 | |
| 
 | |
|   // List<T> getModelFromList<T extends Serializable>(T object){
 | |
|   //
 | |
|   // }
 | |
| 
 | |
|   Map<String, dynamic>? getMapObjectOrNull(String key) {
 | |
|     if (jsonObject.containsKey(key) && jsonObject[key] != null) {
 | |
|       if (jsonObject[key] is Map<String, dynamic>) {
 | |
|         return jsonObject[key];
 | |
|       } else {
 | |
|         dynamic data = json.decode(jsonObject[key]);
 | |
|         if (data != null && data is Map<String, dynamic>) {
 | |
|           return data;
 | |
|         }
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     return null;
 | |
|   }
 | |
| 
 | |
|   static String objectToString(Map<String, dynamic> object) {
 | |
|     return json.encode(object);
 | |
|   }
 | |
| 
 | |
|   dynamic getDynamic(String key) {
 | |
|     return jsonObject[key];
 | |
|   }
 | |
| }
 |