fix bugs and set progress and toast for my items server events

This commit is contained in:
fhkhd
2024-01-28 17:41:17 +03:30
parent fd93bf894f
commit d02cb43a7a
4 changed files with 132 additions and 63 deletions
@@ -11,11 +11,14 @@ import 'package:cssd/widgets/MyItemsScreens/Detail/cancel_transfer_button.dart';
import 'package:cssd/widgets/MyItemsScreens/Detail/transfer_data_box.dart'; import 'package:cssd/widgets/MyItemsScreens/Detail/transfer_data_box.dart';
import 'package:cssd/widgets/MyItemsScreens/Detail/transfer_destroy_button.dart'; import 'package:cssd/widgets/MyItemsScreens/Detail/transfer_destroy_button.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';
class ItemsTransferScreen extends StatefulWidget { class ItemsTransferScreen extends StatefulWidget {
final bool? isAdmin; final bool? isAdmin;
final ItemDetailObject? items; final ItemDetailObject? items;
const ItemsTransferScreen({ const ItemsTransferScreen({
super.key, super.key,
this.isAdmin, this.isAdmin,
@@ -85,7 +88,12 @@ class _ItemsTransferScreenState extends State<ItemsTransferScreen> {
child: Scaffold( child: Scaffold(
appBar: AppBar( appBar: AppBar(
titleSpacing: -10, titleSpacing: -10,
title: Text('Item Details', style: TextStyle(color: Colors.white,),), title: Text(
'Item Details',
style: TextStyle(
color: Colors.white,
),
),
backgroundColor: Colors.black, backgroundColor: Colors.black,
leading: IconButton( leading: IconButton(
icon: Icon( icon: Icon(
@@ -192,7 +200,7 @@ class _ItemsTransferScreenState extends State<ItemsTransferScreen> {
), ),
content: SizedBox( content: SizedBox(
width: _deviceBlockSize, width: _deviceBlockSize,
height: 300, height: 320,
child: Column( child: Column(
children: [ children: [
Text( Text(
@@ -228,27 +236,45 @@ class _ItemsTransferScreenState extends State<ItemsTransferScreen> {
SizedBox( SizedBox(
height: 20.0, height: 20.0,
), ),
TransferDestroyButton( Consumer<MyItemProvider>(
deviceBlockSize: _deviceBlockSize, builder:
(context, myItemProvider, _) {
return TransferDestroyButton(
deviceBlockSize:
_deviceBlockSize,
firstColor: kDarkBlue, firstColor: kDarkBlue,
secondColor: kDarkBlueSub, secondColor: kDarkBlueSub,
onTap: () { onTap: () async {
Provider.of<MyItemProvider>( myItemProvider
.setLoadingButton();
await Provider.of<
MyItemProvider>(
context, context,
listen: false, listen: false,
).transferItems( ).transferItems(
itemData!.id, itemData!.id,
Provider.of<UsersProvider>( await Provider.of<
UsersProvider>(
context, context,
listen: false) listen: false)
.saveUserId!, .saveUserId!,
); );
Navigator.of(context).pop(); Navigator.of(context).pop();
Navigator.of(context) Navigator.of(context).pop();
.popAndPushNamed(Routes Navigator.of(context).pop();
.myItemsResultScreen); myItemProvider
.resetLoadingButton();
Fluttertoast.showToast(
msg: "The item is transferred.",
toastLength: Toast.LENGTH_SHORT,
gravity: ToastGravity.BOTTOM,
);
}, },
text: 'Transfer', text: 'Transfer',
isLoadingButton: myItemProvider
.isloadingButton,
);
},
), ),
SizedBox( SizedBox(
height: 5.0, height: 5.0,
+11
View File
@@ -256,6 +256,17 @@ class MyItemProvider extends ChangeNotifier {
// } // }
// } // }
bool isloadingButton = false;
void resetLoadingButton() {
isloadingButton = false;
notifyListeners();
}
void setLoadingButton() {
isloadingButton = true;
notifyListeners();
}
Future<void> transferItems(String itemId, String userId) async { Future<void> transferItems(String itemId, String userId) async {
var response = await http.post( var response = await http.post(
Uri.parse(Url.transferItems(itemId)), Uri.parse(Url.transferItems(itemId)),
@@ -8,6 +8,7 @@ import 'package:cssd/providers/my_items.dart';
import 'package:cssd/widgets/MyItemsScreens/Detail/cancel_transfer_button.dart'; import 'package:cssd/widgets/MyItemsScreens/Detail/cancel_transfer_button.dart';
import 'package:cssd/widgets/MyItemsScreens/Detail/transfer_destroy_button.dart'; import 'package:cssd/widgets/MyItemsScreens/Detail/transfer_destroy_button.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:pinch_zoom/pinch_zoom.dart'; import 'package:pinch_zoom/pinch_zoom.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@@ -466,25 +467,39 @@ class MyItemsDetailsDataBox extends StatelessWidget {
SizedBox( SizedBox(
height: 20.0, height: 20.0,
), ),
TransferDestroyButton( Consumer<ItemProvider>(
builder: (context, itemProvider, child) {
return TransferDestroyButton(
deviceBlockSize: _deviceBlockSize, deviceBlockSize: _deviceBlockSize,
firstColor: kPink, firstColor: kPink,
secondColor: kPinkSub, secondColor: kPinkSub,
onTap: () { isLoadingButton:
Provider.of<ItemProvider>(context, itemProvider.isloadingButton,
onTap: () async {
itemProvider.setLoadingButton();
await Provider.of<ItemProvider>(context,
listen: false) listen: false)
.removeItems(datas.id) .removeItems(datas.id)
.then( .then(
(value) { (value) {
Navigator.of(context).pop();
Navigator.of(context).pop(); Navigator.of(context).pop();
Navigator.pushReplacementNamed( Navigator.pushReplacementNamed(
context, context,
Routes.myItemsResultScreen, Routes.myItemsResultScreen,
); );
itemProvider.resetLoadingButton();
Fluttertoast.showToast(
msg: "The item is destroyed.",
toastLength: Toast.LENGTH_SHORT,
gravity: ToastGravity.BOTTOM,
);
}, },
); );
}, },
text: 'Destroy', text: 'Destroy',
);
},
), ),
SizedBox( SizedBox(
height: 5.0, height: 5.0,
@@ -603,7 +618,7 @@ class MyItemsDetailsDataBox extends StatelessWidget {
), ),
content: SizedBox( content: SizedBox(
width: _deviceBlockSize, width: _deviceBlockSize,
height: 220, height: 240,
child: Column( child: Column(
children: [ children: [
Text( Text(
@@ -619,25 +634,34 @@ class MyItemsDetailsDataBox extends StatelessWidget {
SizedBox( SizedBox(
height: 20.0, height: 20.0,
), ),
TransferDestroyButton( Consumer<ItemProvider>(
builder: (context, itemProvider, child) {
return TransferDestroyButton(
deviceBlockSize: _deviceBlockSize, deviceBlockSize: _deviceBlockSize,
firstColor: Colors.black, firstColor: Colors.black,
secondColor: Colors.black87, secondColor: Colors.black87,
onTap: () { isLoadingButton: itemProvider.isloadingButton,
Provider.of<MyItemProvider>(context, onTap: () async {
itemProvider.setLoadingButton();
await Provider.of<MyItemProvider>(context,
listen: false) listen: false)
.repairItems(datas.id, 'approved') .repairItems(datas.id, 'approved')
.then( .then(
(value) { (value) {
Navigator.of(context).pop(); Navigator.of(context).pop();
Navigator.pushReplacementNamed( Navigator.of(context).pop();
context, itemProvider.resetLoadingButton();
Routes.myItemsResultScreen, Fluttertoast.showToast(
msg: "The item is repaired.",
toastLength: Toast.LENGTH_SHORT,
gravity: ToastGravity.BOTTOM,
); );
}, },
); );
}, },
text: 'Repair', text: 'Repair',
);
},
), ),
SizedBox( SizedBox(
height: 5.0, height: 5.0,
@@ -824,7 +848,7 @@ class MyItemsDetailsDataBox extends StatelessWidget {
), ),
), ),
Container( Container(
width: 30 * _deviceBlockSize, width: 40 * _deviceBlockSize,
child: Row( child: Row(
children: <Widget>[ children: <Widget>[
Text( Text(
@@ -9,6 +9,7 @@ class TransferDestroyButton extends StatelessWidget {
required this.onTap, required this.onTap,
required this.text, required this.text,
this.fontSize = 5.0, this.fontSize = 5.0,
this.isLoadingButton = false,
}) : _deviceBlockSize = deviceBlockSize, }) : _deviceBlockSize = deviceBlockSize,
super(key: key); super(key: key);
final double _deviceBlockSize; final double _deviceBlockSize;
@@ -17,6 +18,7 @@ class TransferDestroyButton extends StatelessWidget {
final String text; final String text;
final VoidCallback onTap; final VoidCallback onTap;
final double fontSize; final double fontSize;
final bool isLoadingButton;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@@ -33,7 +35,13 @@ class TransferDestroyButton extends StatelessWidget {
), ),
borderRadius: BorderRadius.circular(7), borderRadius: BorderRadius.circular(7),
), ),
child: Align( child: isLoadingButton
? Center(
child: CircularProgressIndicator(
color: Colors.white,
),
)
: Align(
alignment: Alignment.center, alignment: Alignment.center,
child: Text( child: Text(
text, text,