This commit is contained in:
Patrick Alvin Alcala 2025-02-14 11:57:34 +08:00
parent b45cf8bd73
commit 941e9eaa5b
8 changed files with 91 additions and 19 deletions

View file

@ -2,12 +2,14 @@ import 'dart:developer';
import 'package:flutter/material.dart';
import 'package:gap/gap.dart';
import 'package:image_picker/image_picker.dart';
import 'package:internet_connection_checker/internet_connection_checker.dart';
import 'package:pharmacy_mobile/tables/ref_categories.dart';
import 'package:pharmacy_mobile/tables/ref_generic_names.dart';
import 'package:pharmacy_mobile/tables/ref_manufactorers.dart';
import 'package:pharmacy_mobile/tables/ref_medicines.dart';
import 'package:pharmacy_mobile/tables/ref_types.dart';
import 'package:pharmacy_mobile/tables/storage.dart';
import 'package:pharmacy_mobile/widgets/button_widget.dart';
import 'package:pharmacy_mobile/widgets/dropdown_widget.dart';
import 'package:pharmacy_mobile/widgets/dropdown_wrapper_widget.dart';
@ -18,6 +20,7 @@ import 'package:pharmacy_mobile/widgets/snackbar_widget.dart';
import 'package:pharmacy_mobile/widgets/text_widget.dart';
import 'package:pharmacy_mobile/widgets/title_widget.dart';
import 'package:go_router/go_router.dart';
import 'package:uuid/uuid.dart';
class AddMedicinePage extends StatefulWidget {
const AddMedicinePage({super.key});
@ -33,6 +36,7 @@ class _AddMedicinePageState extends State<AddMedicinePage> {
final _refTypes = RefTypes();
final _refManufactorer = RefManufactorers();
final _refMedicines = RefMedicines();
final _storage = Storage();
final _nameController = TextEditingController();
final FocusNode _focusNode = FocusNode();
bool _isLoading = false;
@ -44,6 +48,9 @@ class _AddMedicinePageState extends State<AddMedicinePage> {
late String _selectedType = '';
late List _manufactorerList = [];
late String _selectedManufactorer = '';
late String uuid = '';
late bool imageUploaded = false;
late String imageUrl = '';
void _checkResult(List list, String name) {
if (list.isEmpty) {
@ -84,8 +91,7 @@ class _AddMedicinePageState extends State<AddMedicinePage> {
setState(() {});
final sample = await _refMedicines.getList2();
log(sample.toString());
// final sample = await _refMedicines.getList2();
} else {
if (mounted) {
showNotification(context, 'Error: No Internet Connection', false);
@ -125,7 +131,7 @@ class _AddMedicinePageState extends State<AddMedicinePage> {
final medTypeUUID = await _refTypes.getUUID(_selectedType);
final medManufactorerUUID = await _refManufactorer.getUUID(_selectedManufactorer);
await _refMedicines.postMedicine(medName, medManufactorerUUID, medGenericUUID, medTypeUUID);
await _refMedicines.postMedicine(uuid, medName, medManufactorerUUID, medGenericUUID, medTypeUUID);
} else {
if (mounted) {
showNotification(context, 'Error: No Internet Connection', false);
@ -140,6 +146,20 @@ class _AddMedicinePageState extends State<AddMedicinePage> {
}
}
void _addImage() async {
final imageName = Uuid().v4();
uuid = imageName;
final ImagePicker picker = ImagePicker();
final XFile? image = await picker.pickImage(source: ImageSource.gallery);
const storageName = 'ref_medicines_images';
if (image == null) {
return;
}
imageUrl = await _storage.uploadImage(storageName, image, '$imageName.webp');
}
@override
void initState() {
autoRun();
@ -213,6 +233,17 @@ class _AddMedicinePageState extends State<AddMedicinePage> {
listTitle: 'manufactorer_name',
onChanged: _updateManufactorer)),
const Gap(32),
// if (imageUrl.isNotEmpty)
ClipRRect(
borderRadius: BorderRadius.circular(12), // Add your desired border radius here
child: Image.network(
'https://lijihnvjlucyvxfhghqd.supabase.co/storage/v1/object/public/ref_medicines_images//ab033e88-1933-496b-8e11-47bf85d21d8f.webp',
fit: BoxFit.cover,
width: 250,
height: 250)),
// else
// ButtonWidget(text: 'Add Image', onPressed: _addImage),
const Gap(32),
if (_isLoading)
const Center(child: CircularProgressIndicator(color: Colors.white))
else

View file

@ -69,12 +69,7 @@ class _ListStocksPageState extends State<ListStocksPage> {
setState(() {
_isLoading = true;
});
// _stockList = await _stocks.getList();
// final ff = File('assets/ph_logo.webp');
// await _storage.uploadFile(ff);
final aa = await _storage.getList();
// final aa = await _storage.createBucket('aa');
log(aa.toString());
_stockList = await _stocks.getList();
setState(() {
_isLoading = false;

View file

@ -11,6 +11,7 @@ import 'package:pharmacy_mobile/widgets/text_widget.dart';
import 'package:pharmacy_mobile/widgets/title_widget.dart';
import 'package:internet_connection_checker/internet_connection_checker.dart';
import 'package:supabase_flutter/supabase_flutter.dart';
import 'package:shared_preferences/shared_preferences.dart';
class LoginPage extends StatefulWidget {
const LoginPage({super.key});
@ -54,8 +55,12 @@ class _LoginPageState extends State<LoginPage> {
await _authService.signIn(email, password);
if (mounted) {
final user = _authService.getCurrentUser();
showNotification(context, 'Login Successful', true);
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setString('user', user.toString());
WidgetsBinding.instance.addPostFrameCallback((_) {
if (mounted) {
context.push('/main');

View file

@ -9,16 +9,38 @@ import 'package:pharmacy_mobile/widgets/page_background_widget.dart';
import 'package:pharmacy_mobile/widgets/snackbar_widget.dart';
import 'package:pharmacy_mobile/widgets/text_widget.dart';
import 'package:pharmacy_mobile/widgets/title_widget.dart';
import 'package:shared_preferences/shared_preferences.dart';
class MainPage extends StatelessWidget {
class MainPage extends StatefulWidget {
const MainPage({super.key});
@override
State<MainPage> createState() => _MainPageState();
}
class _MainPageState extends State<MainPage> {
void _checkLogged() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
bool userStatus = prefs.containsKey('user');
if (!userStatus) {
// ignore: use_build_context_synchronously
context.go('/');
}
}
@override
void initState() {
_checkLogged();
super.initState();
}
@override
Widget build(BuildContext context) {
final authService = AuthService();
void signOut() async {
await authService.signOut().then((_) => {context.push('/'), showNotification(context, 'Logged Out', true)});
// ignore: use_build_context_synchronously
await authService.signOut().then((_) => {context.go('/'), showNotification(context, 'Logged Out', true)});
}
return PopScope(

View file

@ -21,8 +21,8 @@ class RefMedicines {
return data.first['ref_medicines_uuid'];
}
Future<void> postMedicine(String name, String muuid, String guuid, String tuuid) async {
final uuid = Uuid().v4();
Future<void> postMedicine(String uuid, String name, String muuid, String guuid, String tuuid) async {
// final uuid = Uuid().v4();
final medicine = {
'ref_medicines_uuid': uuid,

View file

@ -1,5 +1,7 @@
import 'dart:convert';
import 'dart:developer';
import 'dart:io';
import 'package:image_picker/image_picker.dart';
import 'package:supabase_flutter/supabase_flutter.dart';
class Storage {
@ -25,13 +27,29 @@ class Storage {
}
}
Future<void> uploadFile(File file) async {
Future<void> uploadFile(XFile image, String name) async {
try {
final fileName = file.path.split('/').last;
await _supabase.storage.from('images').upload(fileName, file);
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<String> uploadImage(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) {
log('Error uploading image: $e');
rethrow;
}
}
}

View file

@ -577,13 +577,13 @@ packages:
source: hosted
version: "0.28.0"
shared_preferences:
dependency: transitive
dependency: "direct main"
description:
name: shared_preferences
sha256: a752ce92ea7540fc35a0d19722816e04d0e72828a4200e83a98cf1a1eb524c9a
sha256: "846849e3e9b68f3ef4b60c60cf4b3e02e9321bc7f4d8c4692cf87ffa82fc8a3a"
url: "https://pub.dev"
source: hosted
version: "2.3.5"
version: "2.5.2"
shared_preferences_android:
dependency: transitive
description:

View file

@ -20,6 +20,7 @@ dependencies:
intl: ^0.20.2
internet_connection_checker: ^3.0.1
image_picker: ^1.1.2
shared_preferences: ^2.5.2
dev_dependencies:
flutter_test: