import 'dart:convert'; import 'dart:developer'; import 'dart:io'; import 'dart:typed_data'; import 'package:flutter/material.dart'; import 'package:image_picker/image_picker.dart'; import 'package:pharmacy_mobile/widgets/snackbar_widget.dart'; import 'package:supabase_flutter/supabase_flutter.dart'; class Storage { final SupabaseClient _supabase = Supabase.instance.client; Future createBucket(String name) async { try { final response = await _supabase.storage.createBucket(name); return response; } catch (e, stackTrace) { log('Error creating bucket: $e', stackTrace: stackTrace); rethrow; } } Future getList() async { try { final response = await _supabase.storage.listBuckets(); return response; } catch (e, stackTrace) { log('Error getting list: $e', stackTrace: stackTrace); rethrow; } } Future uploadFile(XFile image, String name) async { try { final imageString = await image.readAsString(encoding: utf8); final imageFile = File(imageString); await _supabase.storage.from('images').upload(name, imageFile); log('upload Complete'); } catch (e) { log('Error getting list: $e'); rethrow; } } Future uploadImage(BuildContext context, String storage, XFile image, String name) async { try { final imageBytes = await image.readAsBytes(); final imagePath = name; await _supabase.storage.from(storage).uploadBinary(imagePath, imageBytes); final imageUrl = _supabase.storage.from(storage).getPublicUrl(imagePath); return imageUrl; } catch (e) { // ignore: use_build_context_synchronously showNotification(context, 'Error uploading image: $e', false); rethrow; } } Future downloadImage(String storage, String name) async { final Uint8List file = await _supabase.storage.from(storage).download(name); return file; } Future getPublicURL(String storage, String name) async { final String file = _supabase.storage.from(storage).getPublicUrl(name); return file; } }