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:
firstColor: kDarkBlue, (context, myItemProvider, _) {
secondColor: kDarkBlueSub, return TransferDestroyButton(
onTap: () { deviceBlockSize:
Provider.of<MyItemProvider>( _deviceBlockSize,
context, firstColor: kDarkBlue,
listen: false, secondColor: kDarkBlueSub,
).transferItems( onTap: () async {
itemData!.id, myItemProvider
Provider.of<UsersProvider>( .setLoadingButton();
context, await Provider.of<
listen: false) MyItemProvider>(
.saveUserId!, context,
listen: false,
).transferItems(
itemData!.id,
await Provider.of<
UsersProvider>(
context,
listen: false)
.saveUserId!,
);
Navigator.of(context).pop();
Navigator.of(context).pop();
Navigator.of(context).pop();
myItemProvider
.resetLoadingButton();
Fluttertoast.showToast(
msg: "The item is transferred.",
toastLength: Toast.LENGTH_SHORT,
gravity: ToastGravity.BOTTOM,
);
},
text: 'Transfer',
isLoadingButton: myItemProvider
.isloadingButton,
); );
Navigator.of(context).pop();
Navigator.of(context)
.popAndPushNamed(Routes
.myItemsResultScreen);
}, },
text: 'Transfer',
), ),
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>(
deviceBlockSize: _deviceBlockSize, builder: (context, itemProvider, child) {
firstColor: kPink, return TransferDestroyButton(
secondColor: kPinkSub, deviceBlockSize: _deviceBlockSize,
onTap: () { firstColor: kPink,
Provider.of<ItemProvider>(context, secondColor: kPinkSub,
listen: false) isLoadingButton:
.removeItems(datas.id) itemProvider.isloadingButton,
.then( onTap: () async {
(value) { itemProvider.setLoadingButton();
Navigator.of(context).pop(); await Provider.of<ItemProvider>(context,
Navigator.pushReplacementNamed( listen: false)
context, .removeItems(datas.id)
Routes.myItemsResultScreen, .then(
(value) {
Navigator.of(context).pop();
Navigator.of(context).pop();
Navigator.pushReplacementNamed(
context,
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>(
deviceBlockSize: _deviceBlockSize, builder: (context, itemProvider, child) {
firstColor: Colors.black, return TransferDestroyButton(
secondColor: Colors.black87, deviceBlockSize: _deviceBlockSize,
onTap: () { firstColor: Colors.black,
Provider.of<MyItemProvider>(context, secondColor: Colors.black87,
listen: false) isLoadingButton: itemProvider.isloadingButton,
.repairItems(datas.id, 'approved') onTap: () async {
.then( itemProvider.setLoadingButton();
(value) { await Provider.of<MyItemProvider>(context,
Navigator.of(context).pop(); listen: false)
Navigator.pushReplacementNamed( .repairItems(datas.id, 'approved')
context, .then(
Routes.myItemsResultScreen, (value) {
Navigator.of(context).pop();
Navigator.of(context).pop();
itemProvider.resetLoadingButton();
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,16 +35,22 @@ class TransferDestroyButton extends StatelessWidget {
), ),
borderRadius: BorderRadius.circular(7), borderRadius: BorderRadius.circular(7),
), ),
child: Align( child: isLoadingButton
alignment: Alignment.center, ? Center(
child: Text( child: CircularProgressIndicator(
text, color: Colors.white,
style: TextStyle( ),
color: Colors.white, )
fontSize: fontSize * _deviceBlockSize, : Align(
), alignment: Alignment.center,
), child: Text(
), text,
style: TextStyle(
color: Colors.white,
fontSize: fontSize * _deviceBlockSize,
),
),
),
), ),
); );
} }