parent
5e03e3d62e
commit
e4d998cf43
|
After Width: | Height: | Size: 1.9 KiB |
@ -0,0 +1,36 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:photo_view/photo_view.dart';
|
||||
import 'package:supplier_new/common/settings.dart';
|
||||
|
||||
class ImageZoomPage extends StatefulWidget {
|
||||
var imageName;
|
||||
var imageDetails;
|
||||
ImageZoomPage({this.imageName,this.imageDetails});
|
||||
|
||||
|
||||
@override
|
||||
State<ImageZoomPage> createState() => _ImageZoomPageState();
|
||||
}
|
||||
|
||||
class _ImageZoomPageState extends State<ImageZoomPage> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
backgroundColor: Colors.white,
|
||||
appBar: AppSettings.appBarWithoutActions(widget.imageName),
|
||||
body: Container(
|
||||
//width: MediaQuery.of(context).size.width * .10,
|
||||
//height: MediaQuery.of(context).size.height * .50,
|
||||
child: PhotoView(
|
||||
imageProvider: NetworkImage(widget.imageDetails) as ImageProvider,
|
||||
maxScale: PhotoViewComputedScale.contained * 4.0,
|
||||
minScale: PhotoViewComputedScale.contained,
|
||||
initialScale: PhotoViewComputedScale.contained,
|
||||
basePosition: Alignment.center,
|
||||
|
||||
)
|
||||
),
|
||||
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,26 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
|
||||
class ConnectedCustomersModel {
|
||||
String customer_name = '';
|
||||
String customer_phone_number='';
|
||||
String customer_building_name='';
|
||||
String customer_address='';
|
||||
String customer_id='';
|
||||
Color text_color=Colors.black;
|
||||
|
||||
|
||||
ConnectedCustomersModel();
|
||||
|
||||
factory ConnectedCustomersModel.fromJson(Map<String, dynamic> json){
|
||||
ConnectedCustomersModel rtvm = new ConnectedCustomersModel();
|
||||
|
||||
rtvm.customer_name = json['username'] ?? '';
|
||||
rtvm.customer_phone_number = json['phone'] ?? '';
|
||||
rtvm.customer_building_name = json['buildingName'] ?? '';
|
||||
rtvm.customer_address = json['profile']['address1'] ?? '';
|
||||
rtvm.customer_id = json['customerId'] ?? '';
|
||||
return rtvm;
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,709 @@
|
||||
import 'dart:convert';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:supplier_new/common/settings.dart';
|
||||
import 'package:supplier_new/users/pending_suppliers_model.dart';
|
||||
|
||||
import 'connected_users_model.dart';
|
||||
|
||||
class MyUsers extends StatefulWidget {
|
||||
|
||||
var navigationFrom;
|
||||
|
||||
MyUsers({this.navigationFrom});
|
||||
|
||||
@override
|
||||
State<MyUsers> createState() => _MyUsersState();
|
||||
|
||||
}
|
||||
|
||||
class _MyUsersState extends State<MyUsers>
|
||||
with TickerProviderStateMixin {
|
||||
|
||||
late TabController _controller;
|
||||
|
||||
bool isPendingLoading=false;
|
||||
bool isConnectedLoading=false;
|
||||
bool isRejectedLoading=false;
|
||||
|
||||
List<PendingSuppliersModel> pendingCustomersList=[];
|
||||
List<ConnectedCustomersModel> connectedCustomersList=[];
|
||||
List<PendingSuppliersModel> rejectedCustomersList=[];
|
||||
|
||||
@override
|
||||
void initState(){
|
||||
|
||||
super.initState();
|
||||
|
||||
_controller=TabController(length:3,vsync:this);
|
||||
|
||||
_controller.addListener(() {
|
||||
|
||||
setState(() {});
|
||||
|
||||
});
|
||||
|
||||
getPendingCustomers();
|
||||
getConnectedCustomers();
|
||||
|
||||
}
|
||||
|
||||
Future<void> getPendingCustomers() async {
|
||||
|
||||
setState(() {
|
||||
isPendingLoading=true;
|
||||
});
|
||||
|
||||
try{
|
||||
|
||||
var response=
|
||||
await AppSettings.getPendingSuppliers();
|
||||
|
||||
setState(() {
|
||||
|
||||
pendingCustomersList=
|
||||
((jsonDecode(response)['data']) as List)
|
||||
.map((dynamic model){
|
||||
|
||||
return PendingSuppliersModel.fromJson(model);
|
||||
|
||||
}).toList();
|
||||
|
||||
isPendingLoading=false;
|
||||
|
||||
});
|
||||
|
||||
}catch(e){
|
||||
|
||||
setState(() {
|
||||
isPendingLoading=false;
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Future<void> getConnectedCustomers() async {
|
||||
|
||||
setState(() {
|
||||
|
||||
isConnectedLoading=true;
|
||||
|
||||
});
|
||||
|
||||
try{
|
||||
|
||||
var response=
|
||||
await AppSettings.getConnectedCustomers();
|
||||
|
||||
setState(() {
|
||||
|
||||
connectedCustomersList=
|
||||
((jsonDecode(response)['data']) as List)
|
||||
.map((dynamic model){
|
||||
|
||||
return ConnectedCustomersModel.fromJson(model);
|
||||
|
||||
}).toList();
|
||||
|
||||
isConnectedLoading=false;
|
||||
|
||||
});
|
||||
|
||||
}catch(e){
|
||||
|
||||
setState(() {
|
||||
isConnectedLoading=false;
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*Future<void> getRejectedCustomers() async {
|
||||
|
||||
setState(() {
|
||||
isRejectedLoading=true;
|
||||
});
|
||||
|
||||
try{
|
||||
|
||||
var response=
|
||||
await AppSettings.getRejectedCustomers();
|
||||
|
||||
setState(() {
|
||||
|
||||
rejectedCustomersList=
|
||||
((jsonDecode(response)['data']) as List)
|
||||
.map((dynamic model){
|
||||
|
||||
return PendingSuppliersModel.fromJson(model);
|
||||
|
||||
}).toList();
|
||||
|
||||
isRejectedLoading=false;
|
||||
|
||||
});
|
||||
|
||||
}catch(e){
|
||||
|
||||
setState(() {
|
||||
isRejectedLoading=false;
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
}*/
|
||||
|
||||
Widget customerCard(String name,String phone,String address){
|
||||
|
||||
return Container(
|
||||
|
||||
decoration: BoxDecoration(
|
||||
|
||||
color:Color(0XFFFFFFFF),
|
||||
|
||||
borderRadius:BorderRadius.circular(12),
|
||||
|
||||
border:Border.all(
|
||||
|
||||
color:Colors.grey.shade300,
|
||||
|
||||
width:1,
|
||||
|
||||
),
|
||||
|
||||
),
|
||||
|
||||
child:Padding(
|
||||
|
||||
padding:EdgeInsets.fromLTRB(10,10,10,10),
|
||||
|
||||
child:Row(
|
||||
|
||||
children:[
|
||||
|
||||
CircleAvatar(
|
||||
|
||||
radius:20,
|
||||
|
||||
backgroundColor:Color(0XFFE8F2FF),
|
||||
|
||||
child:Image.asset(
|
||||
|
||||
'images/profile_user.png',
|
||||
|
||||
width:50,
|
||||
|
||||
height:50,
|
||||
|
||||
),
|
||||
|
||||
),
|
||||
|
||||
SizedBox(width:10),
|
||||
|
||||
Expanded(
|
||||
|
||||
child:Column(
|
||||
|
||||
crossAxisAlignment:
|
||||
CrossAxisAlignment.start,
|
||||
|
||||
children:[
|
||||
|
||||
Text(
|
||||
|
||||
name,
|
||||
|
||||
style:fontTextStyle(
|
||||
|
||||
16,
|
||||
Color(0XFF2D2E30),
|
||||
FontWeight.w600),
|
||||
|
||||
),
|
||||
|
||||
SizedBox(height:4),
|
||||
|
||||
Text(
|
||||
|
||||
phone,
|
||||
|
||||
style:fontTextStyle(
|
||||
|
||||
12,
|
||||
Color(0XFF515253),
|
||||
FontWeight.w400),
|
||||
|
||||
),
|
||||
|
||||
SizedBox(height:4),
|
||||
|
||||
Text(
|
||||
|
||||
address,
|
||||
|
||||
style:fontTextStyle(
|
||||
|
||||
12,
|
||||
Color(0XFF515253),
|
||||
FontWeight.w400),
|
||||
|
||||
),
|
||||
|
||||
],
|
||||
|
||||
),
|
||||
|
||||
)
|
||||
|
||||
],
|
||||
|
||||
),
|
||||
|
||||
),
|
||||
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
Widget pendingTab(){
|
||||
|
||||
if(isPendingLoading){
|
||||
|
||||
return Center(
|
||||
|
||||
child:CircularProgressIndicator(
|
||||
|
||||
color:primaryColor,
|
||||
|
||||
),
|
||||
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
if(pendingCustomersList.isEmpty){
|
||||
|
||||
return Center(
|
||||
child:Text("No Pending Customers"),
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
return ListView.separated(
|
||||
|
||||
padding:EdgeInsets.all(10),
|
||||
|
||||
itemCount:pendingCustomersList.length,
|
||||
|
||||
separatorBuilder:(c,i)=>SizedBox(height:10),
|
||||
|
||||
itemBuilder:(context,index){
|
||||
|
||||
return Column(
|
||||
|
||||
children:[
|
||||
|
||||
customerCard(
|
||||
|
||||
pendingCustomersList[index].customer_name,
|
||||
|
||||
pendingCustomersList[index].customer_phone_number,
|
||||
|
||||
pendingCustomersList[index].customer_address
|
||||
|
||||
),
|
||||
|
||||
SizedBox(height:8),
|
||||
|
||||
Row(
|
||||
|
||||
children:[
|
||||
|
||||
Expanded(
|
||||
|
||||
child:GestureDetector(
|
||||
|
||||
onTap:() async {
|
||||
|
||||
var payload={};
|
||||
|
||||
payload["supplierId"]=
|
||||
AppSettings.supplierId;
|
||||
|
||||
payload["customerId"]=
|
||||
pendingCustomersList[index]
|
||||
.customer_id;
|
||||
|
||||
bool status=
|
||||
await AppSettings.acceptRequest(
|
||||
payload);
|
||||
|
||||
if(status){
|
||||
|
||||
AppSettings.longSuccessToast(
|
||||
"Accepted");
|
||||
|
||||
getPendingCustomers();
|
||||
getConnectedCustomers();
|
||||
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
child:Container(
|
||||
|
||||
decoration:BoxDecoration(
|
||||
|
||||
color:Colors.white,
|
||||
|
||||
border:Border.all(
|
||||
color:Color(0XFF098603)
|
||||
),
|
||||
|
||||
borderRadius:
|
||||
BorderRadius.circular(24),
|
||||
|
||||
),
|
||||
|
||||
padding:EdgeInsets.symmetric(
|
||||
vertical:12),
|
||||
|
||||
alignment:Alignment.center,
|
||||
|
||||
child:Text(
|
||||
|
||||
"Accept",
|
||||
|
||||
style:fontTextStyle(
|
||||
|
||||
12,
|
||||
Color(0XFF098603),
|
||||
FontWeight.w600),
|
||||
|
||||
),
|
||||
|
||||
),
|
||||
|
||||
),
|
||||
|
||||
),
|
||||
|
||||
SizedBox(width:10),
|
||||
|
||||
Expanded(
|
||||
|
||||
child:GestureDetector(
|
||||
|
||||
onTap:() async {
|
||||
|
||||
var payload={};
|
||||
|
||||
payload["supplierId"]=
|
||||
AppSettings.supplierId;
|
||||
|
||||
payload["customerId"]=
|
||||
pendingCustomersList[index]
|
||||
.customer_id;
|
||||
|
||||
bool status=
|
||||
await AppSettings.rejectRequest(
|
||||
payload);
|
||||
|
||||
if(status){
|
||||
|
||||
AppSettings.longSuccessToast(
|
||||
"Rejected");
|
||||
|
||||
getPendingCustomers();
|
||||
//getRejectedCustomers();
|
||||
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
child:Container(
|
||||
|
||||
decoration:BoxDecoration(
|
||||
|
||||
color:Colors.white,
|
||||
|
||||
border:Border.all(
|
||||
color:Colors.red
|
||||
),
|
||||
|
||||
borderRadius:
|
||||
BorderRadius.circular(24),
|
||||
|
||||
),
|
||||
|
||||
padding:EdgeInsets.symmetric(
|
||||
vertical:12),
|
||||
|
||||
alignment:Alignment.center,
|
||||
|
||||
child:Text(
|
||||
|
||||
"Reject",
|
||||
|
||||
style:fontTextStyle(
|
||||
|
||||
12,
|
||||
Colors.red,
|
||||
FontWeight.w600),
|
||||
|
||||
),
|
||||
|
||||
),
|
||||
|
||||
),
|
||||
|
||||
)
|
||||
|
||||
],
|
||||
|
||||
)
|
||||
|
||||
],
|
||||
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
Widget connectedTab(){
|
||||
|
||||
if(isConnectedLoading){
|
||||
|
||||
return Center(
|
||||
|
||||
child:CircularProgressIndicator(
|
||||
color:primaryColor),
|
||||
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
if(connectedCustomersList.isEmpty){
|
||||
|
||||
return Center(
|
||||
child:Text("No Connected Customers"),
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
return ListView.separated(
|
||||
|
||||
padding:EdgeInsets.all(10),
|
||||
|
||||
itemCount:connectedCustomersList.length,
|
||||
|
||||
separatorBuilder:(c,i)=>SizedBox(height:10),
|
||||
|
||||
itemBuilder:(context,index){
|
||||
|
||||
return customerCard(
|
||||
|
||||
connectedCustomersList[index].customer_name,
|
||||
|
||||
connectedCustomersList[index]
|
||||
.customer_phone_number,
|
||||
|
||||
connectedCustomersList[index]
|
||||
.customer_address
|
||||
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
Widget rejectedTab(){
|
||||
|
||||
if(isRejectedLoading){
|
||||
|
||||
return Center(
|
||||
|
||||
child:CircularProgressIndicator(
|
||||
color:primaryColor),
|
||||
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
if(rejectedCustomersList.isEmpty){
|
||||
|
||||
return Center(
|
||||
child:Text("No Rejected Requests"),
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
return ListView.separated(
|
||||
|
||||
padding:EdgeInsets.all(10),
|
||||
|
||||
itemCount:rejectedCustomersList.length,
|
||||
|
||||
separatorBuilder:(c,i)=>SizedBox(height:10),
|
||||
|
||||
itemBuilder:(context,index){
|
||||
|
||||
return customerCard(
|
||||
|
||||
rejectedCustomersList[index].customer_name,
|
||||
|
||||
rejectedCustomersList[index]
|
||||
.customer_phone_number,
|
||||
|
||||
rejectedCustomersList[index]
|
||||
.customer_address
|
||||
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context){
|
||||
|
||||
return Scaffold(
|
||||
|
||||
backgroundColor:Colors.white,
|
||||
|
||||
appBar:AppBar(
|
||||
|
||||
elevation:0,
|
||||
|
||||
backgroundColor:Colors.white,
|
||||
|
||||
title:Text(
|
||||
|
||||
"Customers",
|
||||
|
||||
style:fontTextStyle(
|
||||
14,
|
||||
Color(0XFF2A2A2A),
|
||||
FontWeight.w500),
|
||||
|
||||
),
|
||||
|
||||
bottom:PreferredSize(
|
||||
|
||||
preferredSize:Size.fromHeight(70),
|
||||
|
||||
child:Container(
|
||||
|
||||
margin:EdgeInsets.symmetric(
|
||||
horizontal:16,
|
||||
vertical:8),
|
||||
|
||||
padding:EdgeInsets.all(4),
|
||||
|
||||
decoration:BoxDecoration(
|
||||
|
||||
color:Color(0xFFF5F6F6),
|
||||
|
||||
borderRadius:
|
||||
BorderRadius.circular(23),
|
||||
|
||||
),
|
||||
|
||||
child:ClipRRect(
|
||||
|
||||
borderRadius:
|
||||
BorderRadius.circular(19),
|
||||
|
||||
child:TabBar(
|
||||
|
||||
controller:_controller,
|
||||
|
||||
indicator:BoxDecoration(),
|
||||
|
||||
dividerColor:Colors.transparent,
|
||||
|
||||
tabs:List.generate(3,(index){
|
||||
|
||||
final labels=[
|
||||
"Pending",
|
||||
"Connected",
|
||||
"Rejected"
|
||||
];
|
||||
|
||||
return Container(
|
||||
|
||||
decoration:BoxDecoration(
|
||||
|
||||
color:_controller.index==index
|
||||
?Color(0XFFF5CD47)
|
||||
:Color(0xFFF5F6F6),
|
||||
|
||||
borderRadius:
|
||||
BorderRadius.circular(27),
|
||||
|
||||
),
|
||||
|
||||
child:Tab(
|
||||
|
||||
child:Center(
|
||||
|
||||
child:Text(
|
||||
|
||||
labels[index],
|
||||
|
||||
style:fontTextStyle(
|
||||
|
||||
12,
|
||||
Color(0XFF3B3B3B),
|
||||
FontWeight.w600),
|
||||
|
||||
),
|
||||
|
||||
),
|
||||
|
||||
),
|
||||
|
||||
);
|
||||
|
||||
}),
|
||||
|
||||
),
|
||||
|
||||
),
|
||||
|
||||
),
|
||||
|
||||
),
|
||||
|
||||
),
|
||||
|
||||
body:TabBarView(
|
||||
|
||||
controller:_controller,
|
||||
|
||||
children:[
|
||||
|
||||
pendingTab(),
|
||||
|
||||
connectedTab(),
|
||||
|
||||
rejectedTab(),
|
||||
|
||||
],
|
||||
|
||||
),
|
||||
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,24 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
|
||||
class PendingSuppliersModel {
|
||||
String customer_name = '';
|
||||
String customer_phone_number='';
|
||||
String customer_address='';
|
||||
String customer_id='';
|
||||
Color text_color=Colors.black;
|
||||
|
||||
|
||||
PendingSuppliersModel();
|
||||
|
||||
factory PendingSuppliersModel.fromJson(Map<String, dynamic> json){
|
||||
PendingSuppliersModel rtvm = new PendingSuppliersModel();
|
||||
|
||||
rtvm.customer_name = json['username'] ?? '';
|
||||
rtvm.customer_phone_number = json['phone'] ?? '';
|
||||
rtvm.customer_address = json['profile']['address1'] ?? '';
|
||||
rtvm.customer_id = json['customerId'] ?? '';
|
||||
return rtvm;
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in new issue