import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:stadtbote/tools/constants.dart'; import 'package:uuid/uuid.dart'; import '../Tools/colored_safe_area.dart'; class Util { static Future preferencesContainsKey(String key) async { var prefs = await SharedPreferences.getInstance(); return prefs.containsKey(key); } static void preferencesSaveString(String key, String value) async { var prefs = await SharedPreferences.getInstance(); await prefs.setString(key, value); } static Future preferencesGetString(String key, String? defaultValue) async { if (await preferencesContainsKey(key)) { var prefs = await SharedPreferences.getInstance(); return prefs.getString(key); } return defaultValue; } static void preferencesSaveInt(String key, int value) async { var prefs = await SharedPreferences.getInstance(); await prefs.setInt(key, value); } static Future preferencesGetInt(String key, int? defaultValue) async { if (await preferencesContainsKey(key)) { var prefs = await SharedPreferences.getInstance(); return prefs.getInt(key); } return defaultValue; } static void preferencesSaveBool(String key, bool value) async { var prefs = await SharedPreferences.getInstance(); await prefs.setBool(key, value); } static Future preferencesGetBool(String key, bool defaultValue) async { if (await preferencesContainsKey(key)) { var prefs = await SharedPreferences.getInstance(); return prefs.getBool(key) as bool; } return defaultValue; } static Future getAppUuid() async { var currentUuid = await preferencesGetString('uuid', null); if (currentUuid == null) { currentUuid ??= const Uuid().v4(); preferencesSaveString("uuid", currentUuid); } return currentUuid; } static logInfo(String message) { if (kDebugMode) { print('Message: $message'); } } static logException(String message) { if (kDebugMode) { print('Exception: $message'); } } static int fastHash(String string) { var hash = 0xcbf29ce484222325; var i = 0; while (i < string.length) { final codeUnit = string.codeUnitAt(i++); hash ^= codeUnit >> 8; hash *= 0x100000001b3; hash ^= codeUnit & 0xFF; hash *= 0x100000001b3; } return hash; } static Widget getWaitWidget(context) { return ColoredSafeArea( key: const Key('value'), child: Container( width: 10, height: 10, color: Colors.white, ), ); } static Future fetchFutureIcon(icon) { return Future.delayed(const Duration(seconds: 0), () async { return icon; }); } static TextField getDefaultTextField(String hint, {TextEditingController? controller, FocusNode? focusNode, IconButton? iconButton, int? maxLines = 1, TextInputType? type, List? formatter, Function()? onTap, bool? autofocus}) { iconButton ??= IconButton( icon: const Icon(Icons.clear), onPressed: () { if (controller != null) { controller.text = ""; } }, ); return TextField( controller: controller, focusNode: focusNode, maxLines: maxLines, onTap: onTap, keyboardType: type, inputFormatters: formatter, autofocus: (autofocus != null) ? autofocus : false, decoration: InputDecoration( hintText: hint, contentPadding: const EdgeInsets.all(10), border: Util.getDefaultBorder(), errorBorder: Util.getDefaultBorder(), disabledBorder: Util.getDefaultBorder(), focusedBorder: Util.getDefaultFocusedBorder(), focusedErrorBorder: Util.getDefaultBorder(), suffixIcon: iconButton, labelText: hint), ); } static OutlineInputBorder getDefaultBorder() { return const OutlineInputBorder(borderRadius: BorderRadius.all(Radius.circular(20.0))); } static OutlineInputBorder getDefaultFocusedBorder() { return const OutlineInputBorder( borderSide: BorderSide(color: Constants.colorPrimary), borderRadius: BorderRadius.all(Radius.circular(20.0)), ); } } Widget getDefaultButton(String text, Function() onPressed, {Image? image, double? buttonHeight}) { return SizedBox( height: buttonHeight ?? 60, child: Stack( children: [ Row( children: [ Expanded( child: Padding( padding: const EdgeInsets.all(8.0), child: SizedBox( height: 60, child: ElevatedButton( style: ButtonStyle( shape: MaterialStateProperty.all( RoundedRectangleBorder( borderRadius: BorderRadius.circular(8.0), side: const BorderSide(color: Colors.grey), ), ), backgroundColor: MaterialStateProperty.all(const Color.fromARGB(255, 220, 220, 220)), foregroundColor: MaterialStateProperty.all(Colors.black), ), onPressed: () { onPressed(); }, child: Text(text)), ), ), ), ], ), Positioned(left: 20, top: 15, child: Center(child: image)) ], ), ); } String mapTourMode(String mode) { var text = ""; switch (mode) { case "pu": text += "/ Abholung"; break; case "del": text += "/ Auslieferung"; break; case "pudel": text += "/ Abholung/Auslieferung"; break; } return text; }