Set some save button progress bar and toast message

This commit is contained in:
fhkhd
2024-01-28 03:27:43 +03:30
parent f07050c299
commit 8cb5900977
15 changed files with 610 additions and 505 deletions
+17 -32
View File
@@ -3,6 +3,7 @@ import 'package:cssd/providers/items.dart';
import 'package:cssd/widgets/ItemScreens/Add/item_save_button.dart'; import 'package:cssd/widgets/ItemScreens/Add/item_save_button.dart';
import 'package:cssd/widgets/ItemScreens/Add/upload_image.dart'; import 'package:cssd/widgets/ItemScreens/Add/upload_image.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:random_string/random_string.dart'; import 'package:random_string/random_string.dart';
@@ -45,14 +46,15 @@ class _ItemAddScreenState extends State<ItemAddScreen> {
} }
void _saveForm(String name, String size, String specific, String udi, void _saveForm(String name, String size, String specific, String udi,
String description) { String description, ItemProvider itemProvider) async {
itemProvider.setLoadingButton();
setState(() { setState(() {
isLoading = false; isLoading = false;
}); });
if (!_form.currentState!.validate()) { if (!_form.currentState!.validate()) {
return; return;
} }
Provider.of<ItemProvider>(context, listen: false) await Provider.of<ItemProvider>(context, listen: false)
.createItemResult( .createItemResult(
name, name,
size, size,
@@ -67,37 +69,20 @@ class _ItemAddScreenState extends State<ItemAddScreen> {
isLoading = false; isLoading = false;
}); });
if (result == 'done') { if (result == 'done') {
showDialog( Navigator.of(context).popAndPushNamed(Routes.itemResultScreen);
context: context, Fluttertoast.showToast(
builder: (ctx) => AlertDialog( msg: "Item added.",
content: Text('Item added.'), toastLength: Toast.LENGTH_SHORT,
actions: <Widget>[ gravity: ToastGravity.BOTTOM,
TextButton( );
onPressed: () { } else {
Navigator.of(ctx).pop(); Fluttertoast.showToast(
}, msg: result,
child: Text('Ok'), toastLength: Toast.LENGTH_SHORT,
) gravity: ToastGravity.BOTTOM,
],
),
).then((value) =>
Navigator.of(context).popAndPushNamed(Routes.itemResultScreen));
} else if (result == 'error') {
showDialog(
context: context,
builder: (ctx) => AlertDialog(
content: Text('error.'),
actions: <Widget>[
TextButton(
onPressed: () {
Navigator.of(ctx).pop();
},
child: Text('Ok'),
)
],
),
); );
} }
itemProvider.resetLoadingButton();
}, },
); );
} }
@@ -389,7 +374,7 @@ class _ItemAddScreenState extends State<ItemAddScreen> {
specificCTRL.text, specificCTRL.text,
udiCTRL.text, udiCTRL.text,
descriptionCTRL.text, descriptionCTRL.text,
); itemProviderObject);
}, },
deviceBlockSize: _deviceBlockSize, deviceBlockSize: _deviceBlockSize,
), ),
+33 -20
View File
@@ -1,4 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:random_string/random_string.dart'; import 'package:random_string/random_string.dart';
@@ -22,6 +23,7 @@ class FormPage extends StatefulWidget {
class _FormPageState extends State<FormPage> { class _FormPageState extends State<FormPage> {
bool _isInit = true; bool _isInit = true;
bool _isLoading = false; bool _isLoading = false;
bool _isLoadingButton = false;
bool isAdding = false; bool isAdding = false;
final _form = GlobalKey<FormState>(); final _form = GlobalKey<FormState>();
Map<String, dynamic> values = {}; Map<String, dynamic> values = {};
@@ -39,29 +41,26 @@ class _FormPageState extends State<FormPage> {
}); });
} else { } else {
setState(() { setState(() {
_isLoading = true; _isLoadingButton = true;
}); });
prvObject.createTestResult(values, batchId).then( prvObject.createTestResult(values, batchId).then(
(result) { (result) {
setState(() { setState(() {
_isLoading = false; _isLoadingButton = false;
}); });
if (result == 'done') { if (result == 'done') {
showDialog( Navigator.of(context).popAndPushNamed(Routes.testResultScreen);
context: context, Fluttertoast.showToast(
builder: (ctx) => AlertDialog( msg: "Test added.",
content: Text('Test added.'), toastLength: Toast.LENGTH_SHORT,
actions: <Widget>[ gravity: ToastGravity.BOTTOM,
TextButton( );
onPressed: () { } else {
Navigator.of(ctx).pop(); Fluttertoast.showToast(
}, msg: result,
child: Text('Ok'), toastLength: Toast.LENGTH_SHORT,
) gravity: ToastGravity.BOTTOM,
], );
),
).then((value) =>
Navigator.of(context).popAndPushNamed(Routes.testResultScreen));
} }
}, },
); );
@@ -109,11 +108,25 @@ class _FormPageState extends State<FormPage> {
child: Scaffold( child: Scaffold(
appBar: AppBar( appBar: AppBar(
centerTitle: true, centerTitle: true,
title: Text('Add Test Result', style: TextStyle(color: Colors.white,),), title: Text(
'Add Test Result',
style: TextStyle(
color: Colors.white,
),
),
backgroundColor: Colors.black, backgroundColor: Colors.black,
actions: <Widget>[ actions: <Widget>[
IconButton( _isLoadingButton
icon: Icon(Icons.save, color: Colors.white,), ? Center(
child: CircularProgressIndicator(
color: Colors.white,
),
)
: IconButton(
icon: Icon(
Icons.save,
color: Colors.white,
),
onPressed: () { onPressed: () {
_saveForm(); _saveForm();
}, },
+34 -28
View File
@@ -4,6 +4,7 @@ import 'package:cssd/widgets/Global/internet_error.dart';
import 'package:cssd/widgets/LabelScreens/Detail/header.dart'; import 'package:cssd/widgets/LabelScreens/Detail/header.dart';
import 'package:cssd/widgets/MyInfo/input_box.dart'; import 'package:cssd/widgets/MyInfo/input_box.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import '../providers/auth.dart'; import '../providers/auth.dart';
@@ -23,6 +24,7 @@ class _MyInfoScreenState extends State<MyInfoScreen> {
TextEditingController emailCTRL = new TextEditingController(); TextEditingController emailCTRL = new TextEditingController();
bool isInit = true; bool isInit = true;
@override @override
void didChangeDependencies() async { void didChangeDependencies() async {
if (isInit) { if (isInit) {
@@ -48,7 +50,12 @@ class _MyInfoScreenState extends State<MyInfoScreen> {
child: Scaffold( child: Scaffold(
appBar: AppBar( appBar: AppBar(
titleSpacing: -10, titleSpacing: -10,
title: Text('Dashboard', style: TextStyle(color: Colors.white,),), title: Text(
'Dashboard',
style: TextStyle(
color: Colors.white,
),
),
backgroundColor: Colors.black, backgroundColor: Colors.black,
leading: IconButton( leading: IconButton(
icon: Icon( icon: Icon(
@@ -126,55 +133,54 @@ class _MyInfoScreenState extends State<MyInfoScreen> {
SizedBox( SizedBox(
height: 40, height: 40,
), ),
InkWell( Consumer<Auth>(builder: (context, auth, _) {
return InkWell(
child: Container( child: Container(
padding: EdgeInsets.symmetric( padding: EdgeInsets.symmetric(
horizontal: 60, vertical: 10), horizontal: 60, vertical: 10),
margin: margin: EdgeInsets.only(
EdgeInsets.only(top: 50, bottom: 20), top: 50, bottom: 20),
width: double.infinity, width: double.infinity,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.black, color: Colors.black,
borderRadius: BorderRadius.circular(5), borderRadius:
BorderRadius.circular(5),
), ),
child: Text( child: auth.isloading
? Center(
child:
CircularProgressIndicator(
color: Colors.white,
),
)
: Text(
'Save', 'Save',
style: TextStyle( style: TextStyle(
color: Colors.white, color: Colors.white,
fontSize: 5 * _deviceBlockSize, fontSize:
5 * _deviceBlockSize,
), ),
textAlign: TextAlign.center, textAlign: TextAlign.center,
), )),
),
onTap: () async { onTap: () async {
auth.setLoading();
await Provider.of<Auth>(context, await Provider.of<Auth>(context,
listen: false) listen: false)
.setUserData( .setUserData(
user!['id'], user!['id'],
usernameCTRL.text, usernameCTRL.text,
emailCTRL.text, emailCTRL.text,
)
.then(
(value) async => await showDialog(
context: context,
builder: (ctx) => AlertDialog(
content: Text(
'Info changed successfully.',
),
actions: <Widget>[
TextButton(
child: Text('Ok'),
onPressed: () {
Navigator.of(ctx).pop();
},
),
],
),
),
); );
Navigator.of(context).pop(); Navigator.of(context).pop();
auth.resetLoading();
Fluttertoast.showToast(
msg: "Info changed successfully.",
toastLength: Toast.LENGTH_SHORT,
gravity: ToastGravity.BOTTOM,
);
}, },
), );
}),
], ],
), ),
), ),
+12
View File
@@ -18,6 +18,18 @@ class Auth with ChangeNotifier {
return token != null; return token != null;
} }
bool isloading = false;
void resetLoading() {
isloading = false;
notifyListeners();
}
void setLoading() {
isloading = true;
notifyListeners();
}
String? get token { String? get token {
if (_expiaryDate != null && if (_expiaryDate != null &&
_expiaryDate!.isAfter(DateTime.now()) && _expiaryDate!.isAfter(DateTime.now()) &&
+11
View File
@@ -67,6 +67,17 @@ class CyclesProvider extends ChangeNotifier {
// notifyListeners(); // notifyListeners();
} }
bool isloadingButton = false;
void resetLoadingButton() {
isloadingButton = false;
notifyListeners();
}
void setLoadingButton() {
isloadingButton = true;
notifyListeners();
}
Future<List<Map<String, String>>> getHospitalsFilters() async { Future<List<Map<String, String>>> getHospitalsFilters() async {
var response = await http.get( var response = await http.get(
Uri.parse(Url.filterItems), Uri.parse(Url.filterItems),
+12 -1
View File
@@ -52,6 +52,17 @@ class ItemProvider extends ChangeNotifier {
// notifyListeners(); // notifyListeners();
} }
bool isloadingButton = false;
void resetLoadingButton() {
isloadingButton = false;
notifyListeners();
}
void setLoadingButton() {
isloadingButton = true;
notifyListeners();
}
Future<List<Map<String, String>>> getHospitalsFilters() async { Future<List<Map<String, String>>> getHospitalsFilters() async {
var response = await http.get( var response = await http.get(
Uri.parse(Url.filterItems), Uri.parse(Url.filterItems),
@@ -154,7 +165,7 @@ class ItemProvider extends ChangeNotifier {
catchImages = []; catchImages = [];
return 'done'; return 'done';
} else { } else {
return 'error'; return 'error ${response.statusCode}';
} }
} }
+11
View File
@@ -59,6 +59,17 @@ class LabelsProvider extends ChangeNotifier {
// notifyListeners(); // notifyListeners();
} }
bool isloadingButton = false;
void resetLoadingButton() {
isloadingButton = false;
notifyListeners();
}
void setLoadingButton() {
isloadingButton = true;
notifyListeners();
}
Future<List<Map<String, String>>> getHospitalsFilters() async { Future<List<Map<String, String>>> getHospitalsFilters() async {
var response = await http.get( var response = await http.get(
Uri.parse(Url.filterItems), Uri.parse(Url.filterItems),
+11
View File
@@ -85,6 +85,17 @@ class PackageProvider extends ChangeNotifier {
// notifyListeners(); // notifyListeners();
} }
bool isloadingButton = false;
void resetLoadingButton() {
isloadingButton = false;
notifyListeners();
}
void setLoadingButton() {
isloadingButton = true;
notifyListeners();
}
Future<List<Map<String, String>>> getHospitalsFilters() async { Future<List<Map<String, String>>> getHospitalsFilters() async {
var response = await http.get( var response = await http.get(
Uri.parse(Url.filterItems), Uri.parse(Url.filterItems),
+1 -1
View File
@@ -312,7 +312,7 @@ class TestResultsProvider with ChangeNotifier {
catchImages = []; catchImages = [];
return 'done'; return 'done';
} else { } else {
return 'error'; return 'error ${response.statusCode}';
} }
// var response = await http // var response = await http
// .post(Url.createTestResult, body: json.encode(values), headers: { // .post(Url.createTestResult, body: json.encode(values), headers: {
+23 -4
View File
@@ -1,5 +1,6 @@
import 'package:cssd/config/colors.dart'; import 'package:cssd/config/colors.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import '../../../config/routes.dart'; import '../../../config/routes.dart';
@@ -29,8 +30,10 @@ class CycleAddSaveButton extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Consumer<CyclesProvider>(builder: (context, cyclesProvider, _) {
return InkWell( return InkWell(
onTap: () { onTap: () async {
cyclesProvider.setLoadingButton();
if (!_form.currentState!.validate()) { if (!_form.currentState!.validate()) {
return; return;
} }
@@ -38,7 +41,8 @@ class CycleAddSaveButton extends StatelessWidget {
for (TextEditingController label in labelValues) { for (TextEditingController label in labelValues) {
labels.add(label.text); labels.add(label.text);
} }
Provider.of<CyclesProvider>(context, listen: false).createCycleResult( await Provider.of<CyclesProvider>(context, listen: false)
.createCycleResult(
cycleNumberCTRL.text, cycleNumberCTRL.text,
dateValue, dateValue,
labels, labels,
@@ -59,8 +63,16 @@ class CycleAddSaveButton extends StatelessWidget {
], ],
), ),
).then((_) { ).then((_) {
Navigator.of(context).pushReplacementNamed(Routes.cycleResultScreen); Navigator.of(context)
.pushReplacementNamed(Routes.cycleResultScreen);
}); });
Navigator.of(context).pushReplacementNamed(Routes.cycleResultScreen);
Fluttertoast.showToast(
msg: "Cycle added.",
toastLength: Toast.LENGTH_SHORT,
gravity: ToastGravity.BOTTOM,
);
cyclesProvider.resetLoadingButton();
}, },
child: Container( child: Container(
padding: EdgeInsets.symmetric( padding: EdgeInsets.symmetric(
@@ -75,7 +87,13 @@ class CycleAddSaveButton extends StatelessWidget {
), ),
borderRadius: BorderRadius.circular(7), borderRadius: BorderRadius.circular(7),
), ),
child: Align( child: cyclesProvider.isloadingButton
? Center(
child: CircularProgressIndicator(
color: Colors.white,
),
)
: Align(
alignment: Alignment.center, alignment: Alignment.center,
child: Text( child: Text(
'Save', 'Save',
@@ -87,5 +105,6 @@ class CycleAddSaveButton extends StatelessWidget {
), ),
), ),
); );
});
} }
} }
@@ -1,5 +1,7 @@
import 'package:cssd/config/colors.dart'; import 'package:cssd/config/colors.dart';
import 'package:cssd/providers/items.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
class ItemAddSaveButton extends StatelessWidget { class ItemAddSaveButton extends StatelessWidget {
const ItemAddSaveButton({ const ItemAddSaveButton({
@@ -11,8 +13,10 @@ class ItemAddSaveButton extends StatelessWidget {
final double _deviceBlockSize; final double _deviceBlockSize;
final VoidCallback onTap; final VoidCallback onTap;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Consumer<ItemProvider>(builder: (context, itemProvider, _) {
return InkWell( return InkWell(
onTap: onTap, onTap: onTap,
child: Container( child: Container(
@@ -26,7 +30,13 @@ class ItemAddSaveButton extends StatelessWidget {
), ),
borderRadius: BorderRadius.circular(7), borderRadius: BorderRadius.circular(7),
), ),
child: Align( child: itemProvider.isloadingButton
? Center(
child: CircularProgressIndicator(
color: Colors.white,
),
)
: Align(
alignment: Alignment.center, alignment: Alignment.center,
child: Text( child: Text(
'Save', 'Save',
@@ -38,5 +48,6 @@ class ItemAddSaveButton extends StatelessWidget {
), ),
), ),
); );
});
} }
} }
+20 -18
View File
@@ -1,5 +1,6 @@
import 'package:cssd/config/colors.dart'; import 'package:cssd/config/colors.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import '../../../config/routes.dart'; import '../../../config/routes.dart';
@@ -31,8 +32,10 @@ class LabelAddSaveButton extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Consumer<LabelsProvider>(builder: (context, labelsProvider, _) {
return InkWell( return InkWell(
onTap: () { onTap: () async {
labelsProvider.setLoadingButton();
if (!_form.currentState!.validate()) { if (!_form.currentState!.validate()) {
return; return;
} }
@@ -40,7 +43,8 @@ class LabelAddSaveButton extends StatelessWidget {
for (TextEditingController package in packageValue) { for (TextEditingController package in packageValue) {
packages.add(package.text); packages.add(package.text);
} }
Provider.of<LabelsProvider>(context, listen: false).createLabelResult( await Provider.of<LabelsProvider>(context, listen: false)
.createLabelResult(
lotNumberCTRL.text, lotNumberCTRL.text,
cycleNumberCTRL.text, cycleNumberCTRL.text,
sDateCTRL.text, sDateCTRL.text,
@@ -51,22 +55,13 @@ class LabelAddSaveButton extends StatelessWidget {
// eDateValue, // eDateValue,
striizerIdCTRL.text, striizerIdCTRL.text,
); );
showDialog(
context: context,
builder: (ctx) => AlertDialog(
content: Text('Label added.'),
actions: <Widget>[
TextButton(
onPressed: () {
Navigator.of(ctx).pop();
},
child: Text('Ok'),
)
],
),
).then((_) {
Navigator.of(context).pushReplacementNamed(Routes.labelResultScreen); Navigator.of(context).pushReplacementNamed(Routes.labelResultScreen);
}); Fluttertoast.showToast(
msg: "Label added.",
toastLength: Toast.LENGTH_SHORT,
gravity: ToastGravity.BOTTOM,
);
labelsProvider.resetLoadingButton();
}, },
child: Container( child: Container(
padding: EdgeInsets.symmetric( padding: EdgeInsets.symmetric(
@@ -81,7 +76,13 @@ class LabelAddSaveButton extends StatelessWidget {
), ),
borderRadius: BorderRadius.circular(7), borderRadius: BorderRadius.circular(7),
), ),
child: Align( child: labelsProvider.isloadingButton
? Center(
child: CircularProgressIndicator(
color: Colors.white,
),
)
: Align(
alignment: Alignment.center, alignment: Alignment.center,
child: Text( child: Text(
'Save', 'Save',
@@ -93,5 +94,6 @@ class LabelAddSaveButton extends StatelessWidget {
), ),
), ),
); );
});
} }
} }
@@ -1,6 +1,7 @@
import 'package:cssd/config/colors.dart'; import 'package:cssd/config/colors.dart';
import 'package:cssd/providers/packages.dart'; import 'package:cssd/providers/packages.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import '../../../config/routes.dart'; import '../../../config/routes.dart';
@@ -23,14 +24,18 @@ class PackageAddSaveButton extends StatelessWidget {
final List<TextEditingController> itemValues; final List<TextEditingController> itemValues;
final TextEditingController nameCTRL; final TextEditingController nameCTRL;
final TextEditingController descriptionCTRL; final TextEditingController descriptionCTRL;
// final TextEditingController udiCTRL; // final TextEditingController udiCTRL;
final String dateValue; final String dateValue;
final double _deviceBlockSize; final double _deviceBlockSize;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Consumer<PackageProvider>(
builder: (context, packageProvider, _) {
return InkWell( return InkWell(
onTap: () { onTap: () async {
packageProvider.setLoadingButton();
if (!_form.currentState!.validate()) { if (!_form.currentState!.validate()) {
return; return;
} }
@@ -38,30 +43,21 @@ class PackageAddSaveButton extends StatelessWidget {
for (TextEditingController item in itemValues) { for (TextEditingController item in itemValues) {
items.add(item.text); items.add(item.text);
} }
Provider.of<PackageProvider>(context, listen: false) await Provider.of<PackageProvider>(context, listen: false)
.createPackageResult( .createPackageResult(
nameCTRL.text, nameCTRL.text,
// udiCTRL.text, // udiCTRL.text,
items, items,
descriptionCTRL.text, descriptionCTRL.text,
); );
showDialog(
context: context,
builder: (ctx) => AlertDialog(
content: Text('Package added.'),
actions: <Widget>[
TextButton(
onPressed: () {
Navigator.of(ctx).pop();
},
child: Text('Ok'),
)
],
),
).then((_) {
Navigator.of(context) Navigator.of(context)
.pushReplacementNamed(Routes.packageResultScreen); .pushReplacementNamed(Routes.packageResultScreen);
}); Fluttertoast.showToast(
msg: "Package added.",
toastLength: Toast.LENGTH_SHORT,
gravity: ToastGravity.BOTTOM,
);
packageProvider.resetLoadingButton();
}, },
child: Container( child: Container(
padding: EdgeInsets.symmetric( padding: EdgeInsets.symmetric(
@@ -76,7 +72,13 @@ class PackageAddSaveButton extends StatelessWidget {
), ),
borderRadius: BorderRadius.circular(7), borderRadius: BorderRadius.circular(7),
), ),
child: Align( child: packageProvider.isloadingButton
? Center(
child: CircularProgressIndicator(
color: Colors.white,
),
)
: Align(
alignment: Alignment.center, alignment: Alignment.center,
child: Text( child: Text(
'Save', 'Save',
@@ -88,5 +90,7 @@ class PackageAddSaveButton extends StatelessWidget {
), ),
), ),
); );
},
);
} }
} }
+212 -204
View File
File diff suppressed because it is too large Load Diff
+1
View File
@@ -46,6 +46,7 @@ dependencies:
permission_handler: ^11.1.0 permission_handler: ^11.1.0
carousel_slider: ^4.2.1 carousel_slider: ^4.2.1
pinch_zoom: ^2.0.0 pinch_zoom: ^2.0.0
fluttertoast: ^8.2.4
# video_player: ^0.10.11+2 # video_player: ^0.10.11+2
dev_dependencies: dev_dependencies: