import 'dart:io'; import 'package:flutter/material.dart'; import 'package:shared_preferences/shared_preferences.dart'; import '../config/constants/app_constant.dart'; import '../models/users.dart'; import 'package:http/http.dart' as http; class Utils extends ChangeNotifier { // Singleton instance static final Utils _instance = Utils._internal(); factory Utils() { return _instance; } users? _user; bool isValidToken = false; SharedPreferences? prefs; String? _token = "InvalidToken"; bool? svgError; int? currentrideid; bool initialized = false; String? _deviceBrand; double _heightMultiplier = 0; double _widthMultiplier = 0; double _textMultiplier = 0; Utils._internal(); // Getters for size multipliers String? get token => _token; String? get deviceBrand => _deviceBrand; double get heightMultiplier => _heightMultiplier; double get widthMultiplier => _widthMultiplier; double get textMultiplier => _textMultiplier; Future getToken() async { final prefs = await SharedPreferences.getInstance(); if (prefs.getString('token') == null || prefs.getString('token') == '') { prefs.setString('token', 'InvalidToken'); } if (prefs.getString('token') != null) { _token = prefs.getString('token')!; } return _token.toString(); } // Lazy initialization of SharedPreferences Future initializePreferences() async { prefs ??= await SharedPreferences.getInstance(); } setInitialized(bool init) { initialized = init; notifyListeners(); } setApiLevel(int value,String brand) { _deviceBrand = brand; notifyListeners(); } // User getter and setter with notifyListeners users? get user => _user; void updateCurrentUser(users newUser) { _user = newUser; notifyListeners(); } void updatetoken(String token) { _token = token; notifyListeners(); } Future logout() async { final prefs = await SharedPreferences.getInstance(); await prefs.remove('token'); _token = "InvalidToken"; notifyListeners(); } bool get isUserLoggedIn => prefs == null ? false : prefs!.getBool("isLoggedIn") ?? false; // Initialize size multipliers from SizeConfig void clearProviderData() { _user = null; _token = "InvalidToken"; isValidToken = false; svgError = null; currentrideid = null; initialized = false; prefs?.setBool("isLoggedIn", false); prefs?.remove("token"); notifyListeners(); } } Future uploadProfileImage( File file, String filename, String token) async { final uri = Uri.https(baseUrl, '/api/v1/user/update_user_profile_image'); var request = http.MultipartRequest('PATCH', uri); request.headers['Authorization'] = 'Bearer $token'; request.files.add( await http.MultipartFile.fromPath( 'file', file.path, filename: filename, ), ); final response = await request.send(); if (response.statusCode == 200) { print("Upload success"); return true; } else { final respStr = await response.stream.bytesToString(); print("Upload failed: ${response.statusCode}"); print("Response: $respStr"); return false; } } final utils = Utils();