import 'dart:async'; import 'dart:convert'; import 'dart:io'; import 'dart:typed_data'; import 'package:yaml/yaml.dart'; import 'package:path/path.dart' as path; late Future Function() getUserPath; late Future Function() getProjectName; late Future Function() getDataPath; void initialize() { getUserPath = getUserPath_; getProjectName = getProjectName_; getDataPath = getDataPath_; } Map?> envArguments(List arguments) { var dic = ?>{}; var list = []; var length = arguments.length; for (var i = 0; i < length; ++i) { var value = arguments[i]; var key = _getKey(value); if (key != null) { var index = i + 1; list.clear(); while (index < length) { var arg = arguments[index]; if (_getKey(arg) == null) { list.add(arg); index++; } else { i = index - 1; break; } } List? arr = List.from(list); if (arr.isEmpty) arr = null; dic[key] = arr; } } return dic; } String? _getKey(String value) { String? key; if (value.indexOf('-') == 0) { key = value.substring(1, value.length); } return key; } Map? getMapFromJson(String jsonStr) { Map? map; if (jsonStr.length > 5) { JsonCodec codec = JsonCodec(); try { map = codec.decode(jsonStr); } catch (e) { print("Error: $e"); } } return map; } Map? getMapFromYaml(String yamlStr) { Map? map; if (yamlStr.length > 5) { try { map = jsonDecode(jsonEncode(loadYaml(yamlStr))); } on Exception catch (e, stacktace) { throw Exception('Yaml Pasing error.'); } } return map; } Future getIPAddress(String domain) async { var c = Completer(); late String ipAddress; var regEx = RegExp(r'(://)([a-zA-Z0-9-.]+)(/|:)'); var match = regEx.firstMatch(domain); if (match != null && match.groupCount > 2) { domain = match.group(2)!; var list = await InternetAddress.lookup(domain); for (var address in list) { ipAddress = address.address; break; } } c.complete(ipAddress); return c.future; } Future get simpleFuture { var c = Completer(); c.complete(); return c.future; } Future dataFutrue(T data) { var c = Completer(); c.complete(data); return c.future; } Future readFileByte(String filePath) async { var c = Completer(); Uri myUri = Uri.parse(filePath); File audioFile = File.fromUri(myUri); Uint8List? bytes; await audioFile.readAsBytes().then((value) { bytes = Uint8List.fromList(value); print('reading of bytes is completed'); }).catchError((onError) { print('Exception Error while reading audio from path:$onError'); }); c.complete(bytes); return c.future; } Future getUserPath_() async { String home = ''; Map envVars = Platform.environment; if (Platform.isMacOS) { home = envVars['HOME']!; } else if (Platform.isLinux) { home = envVars['HOME']!; } else if (Platform.isWindows) { home = envVars['UserProfile']!; } var c = Completer(); c.complete(home); return c.future; } Future getDataPath_() async { String path = await getUserPath(); if (Platform.isMacOS) { path = '$path/Library/Application Support/${getProjectName()}'; } else if (Platform.isLinux) { path = '$path/.config/${getProjectName()}'; } else if (Platform.isWindows) { path = '$path/AppData/Local/${getProjectName()}'; } var c = Completer(); c.complete(path); return c.future; } Future getProjectName_() async { var name = path.dirname(Platform.script.toFilePath(windows: Platform.isWindows)); print(name); if (path.basename(name) == 'bin') { name = path.dirname(name); } var c = Completer(); c.complete(path.basename(name)); return c.future; }