update
This commit is contained in:
parent
b45cf8bd73
commit
941e9eaa5b
8 changed files with 91 additions and 19 deletions
|
|
@ -2,12 +2,14 @@ import 'dart:developer';
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:gap/gap.dart';
|
import 'package:gap/gap.dart';
|
||||||
|
import 'package:image_picker/image_picker.dart';
|
||||||
import 'package:internet_connection_checker/internet_connection_checker.dart';
|
import 'package:internet_connection_checker/internet_connection_checker.dart';
|
||||||
import 'package:pharmacy_mobile/tables/ref_categories.dart';
|
import 'package:pharmacy_mobile/tables/ref_categories.dart';
|
||||||
import 'package:pharmacy_mobile/tables/ref_generic_names.dart';
|
import 'package:pharmacy_mobile/tables/ref_generic_names.dart';
|
||||||
import 'package:pharmacy_mobile/tables/ref_manufactorers.dart';
|
import 'package:pharmacy_mobile/tables/ref_manufactorers.dart';
|
||||||
import 'package:pharmacy_mobile/tables/ref_medicines.dart';
|
import 'package:pharmacy_mobile/tables/ref_medicines.dart';
|
||||||
import 'package:pharmacy_mobile/tables/ref_types.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/button_widget.dart';
|
||||||
import 'package:pharmacy_mobile/widgets/dropdown_widget.dart';
|
import 'package:pharmacy_mobile/widgets/dropdown_widget.dart';
|
||||||
import 'package:pharmacy_mobile/widgets/dropdown_wrapper_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/text_widget.dart';
|
||||||
import 'package:pharmacy_mobile/widgets/title_widget.dart';
|
import 'package:pharmacy_mobile/widgets/title_widget.dart';
|
||||||
import 'package:go_router/go_router.dart';
|
import 'package:go_router/go_router.dart';
|
||||||
|
import 'package:uuid/uuid.dart';
|
||||||
|
|
||||||
class AddMedicinePage extends StatefulWidget {
|
class AddMedicinePage extends StatefulWidget {
|
||||||
const AddMedicinePage({super.key});
|
const AddMedicinePage({super.key});
|
||||||
|
|
@ -33,6 +36,7 @@ class _AddMedicinePageState extends State<AddMedicinePage> {
|
||||||
final _refTypes = RefTypes();
|
final _refTypes = RefTypes();
|
||||||
final _refManufactorer = RefManufactorers();
|
final _refManufactorer = RefManufactorers();
|
||||||
final _refMedicines = RefMedicines();
|
final _refMedicines = RefMedicines();
|
||||||
|
final _storage = Storage();
|
||||||
final _nameController = TextEditingController();
|
final _nameController = TextEditingController();
|
||||||
final FocusNode _focusNode = FocusNode();
|
final FocusNode _focusNode = FocusNode();
|
||||||
bool _isLoading = false;
|
bool _isLoading = false;
|
||||||
|
|
@ -44,6 +48,9 @@ class _AddMedicinePageState extends State<AddMedicinePage> {
|
||||||
late String _selectedType = '';
|
late String _selectedType = '';
|
||||||
late List _manufactorerList = [];
|
late List _manufactorerList = [];
|
||||||
late String _selectedManufactorer = '';
|
late String _selectedManufactorer = '';
|
||||||
|
late String uuid = '';
|
||||||
|
late bool imageUploaded = false;
|
||||||
|
late String imageUrl = '';
|
||||||
|
|
||||||
void _checkResult(List list, String name) {
|
void _checkResult(List list, String name) {
|
||||||
if (list.isEmpty) {
|
if (list.isEmpty) {
|
||||||
|
|
@ -84,8 +91,7 @@ class _AddMedicinePageState extends State<AddMedicinePage> {
|
||||||
|
|
||||||
setState(() {});
|
setState(() {});
|
||||||
|
|
||||||
final sample = await _refMedicines.getList2();
|
// final sample = await _refMedicines.getList2();
|
||||||
log(sample.toString());
|
|
||||||
} else {
|
} else {
|
||||||
if (mounted) {
|
if (mounted) {
|
||||||
showNotification(context, 'Error: No Internet Connection', false);
|
showNotification(context, 'Error: No Internet Connection', false);
|
||||||
|
|
@ -125,7 +131,7 @@ class _AddMedicinePageState extends State<AddMedicinePage> {
|
||||||
final medTypeUUID = await _refTypes.getUUID(_selectedType);
|
final medTypeUUID = await _refTypes.getUUID(_selectedType);
|
||||||
final medManufactorerUUID = await _refManufactorer.getUUID(_selectedManufactorer);
|
final medManufactorerUUID = await _refManufactorer.getUUID(_selectedManufactorer);
|
||||||
|
|
||||||
await _refMedicines.postMedicine(medName, medManufactorerUUID, medGenericUUID, medTypeUUID);
|
await _refMedicines.postMedicine(uuid, medName, medManufactorerUUID, medGenericUUID, medTypeUUID);
|
||||||
} else {
|
} else {
|
||||||
if (mounted) {
|
if (mounted) {
|
||||||
showNotification(context, 'Error: No Internet Connection', false);
|
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
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
autoRun();
|
autoRun();
|
||||||
|
|
@ -213,6 +233,17 @@ class _AddMedicinePageState extends State<AddMedicinePage> {
|
||||||
listTitle: 'manufactorer_name',
|
listTitle: 'manufactorer_name',
|
||||||
onChanged: _updateManufactorer)),
|
onChanged: _updateManufactorer)),
|
||||||
const Gap(32),
|
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)
|
if (_isLoading)
|
||||||
const Center(child: CircularProgressIndicator(color: Colors.white))
|
const Center(child: CircularProgressIndicator(color: Colors.white))
|
||||||
else
|
else
|
||||||
|
|
|
||||||
|
|
@ -69,12 +69,7 @@ class _ListStocksPageState extends State<ListStocksPage> {
|
||||||
setState(() {
|
setState(() {
|
||||||
_isLoading = true;
|
_isLoading = true;
|
||||||
});
|
});
|
||||||
// _stockList = await _stocks.getList();
|
_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());
|
|
||||||
|
|
||||||
setState(() {
|
setState(() {
|
||||||
_isLoading = false;
|
_isLoading = false;
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ import 'package:pharmacy_mobile/widgets/text_widget.dart';
|
||||||
import 'package:pharmacy_mobile/widgets/title_widget.dart';
|
import 'package:pharmacy_mobile/widgets/title_widget.dart';
|
||||||
import 'package:internet_connection_checker/internet_connection_checker.dart';
|
import 'package:internet_connection_checker/internet_connection_checker.dart';
|
||||||
import 'package:supabase_flutter/supabase_flutter.dart';
|
import 'package:supabase_flutter/supabase_flutter.dart';
|
||||||
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
|
|
||||||
class LoginPage extends StatefulWidget {
|
class LoginPage extends StatefulWidget {
|
||||||
const LoginPage({super.key});
|
const LoginPage({super.key});
|
||||||
|
|
@ -54,8 +55,12 @@ class _LoginPageState extends State<LoginPage> {
|
||||||
await _authService.signIn(email, password);
|
await _authService.signIn(email, password);
|
||||||
|
|
||||||
if (mounted) {
|
if (mounted) {
|
||||||
|
final user = _authService.getCurrentUser();
|
||||||
showNotification(context, 'Login Successful', true);
|
showNotification(context, 'Login Successful', true);
|
||||||
|
|
||||||
|
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||||
|
prefs.setString('user', user.toString());
|
||||||
|
|
||||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||||
if (mounted) {
|
if (mounted) {
|
||||||
context.push('/main');
|
context.push('/main');
|
||||||
|
|
|
||||||
|
|
@ -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/snackbar_widget.dart';
|
||||||
import 'package:pharmacy_mobile/widgets/text_widget.dart';
|
import 'package:pharmacy_mobile/widgets/text_widget.dart';
|
||||||
import 'package:pharmacy_mobile/widgets/title_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});
|
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
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final authService = AuthService();
|
final authService = AuthService();
|
||||||
|
|
||||||
void signOut() async {
|
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(
|
return PopScope(
|
||||||
|
|
|
||||||
|
|
@ -21,8 +21,8 @@ class RefMedicines {
|
||||||
return data.first['ref_medicines_uuid'];
|
return data.first['ref_medicines_uuid'];
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> postMedicine(String name, String muuid, String guuid, String tuuid) async {
|
Future<void> postMedicine(String uuid, String name, String muuid, String guuid, String tuuid) async {
|
||||||
final uuid = Uuid().v4();
|
// final uuid = Uuid().v4();
|
||||||
|
|
||||||
final medicine = {
|
final medicine = {
|
||||||
'ref_medicines_uuid': uuid,
|
'ref_medicines_uuid': uuid,
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
|
import 'dart:convert';
|
||||||
import 'dart:developer';
|
import 'dart:developer';
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
import 'package:image_picker/image_picker.dart';
|
||||||
import 'package:supabase_flutter/supabase_flutter.dart';
|
import 'package:supabase_flutter/supabase_flutter.dart';
|
||||||
|
|
||||||
class Storage {
|
class Storage {
|
||||||
|
|
@ -25,13 +27,29 @@ class Storage {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> uploadFile(File file) async {
|
Future<void> uploadFile(XFile image, String name) async {
|
||||||
try {
|
try {
|
||||||
final fileName = file.path.split('/').last;
|
final imageString = await image.readAsString(encoding: utf8);
|
||||||
await _supabase.storage.from('images').upload(fileName, file);
|
final imageFile = File(imageString);
|
||||||
|
await _supabase.storage.from('images').upload(name, imageFile);
|
||||||
|
log('upload Complete');
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
log('Error getting list: $e');
|
log('Error getting list: $e');
|
||||||
rethrow;
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -577,13 +577,13 @@ packages:
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.28.0"
|
version: "0.28.0"
|
||||||
shared_preferences:
|
shared_preferences:
|
||||||
dependency: transitive
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: shared_preferences
|
name: shared_preferences
|
||||||
sha256: a752ce92ea7540fc35a0d19722816e04d0e72828a4200e83a98cf1a1eb524c9a
|
sha256: "846849e3e9b68f3ef4b60c60cf4b3e02e9321bc7f4d8c4692cf87ffa82fc8a3a"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.3.5"
|
version: "2.5.2"
|
||||||
shared_preferences_android:
|
shared_preferences_android:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@ dependencies:
|
||||||
intl: ^0.20.2
|
intl: ^0.20.2
|
||||||
internet_connection_checker: ^3.0.1
|
internet_connection_checker: ^3.0.1
|
||||||
image_picker: ^1.1.2
|
image_picker: ^1.1.2
|
||||||
|
shared_preferences: ^2.5.2
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue