Untitled
unknown
plain_text
a year ago
9.1 kB
8
Indexable
import 'package:flutter/material.dart';
import 'package:flutter_mobx/flutter_mobx.dart';
import 'package:intl/intl.dart';
import '../main.dart';
import '../utils/Extensions/StringExtensions.dart';
import '../model/ComplaintCommentModel.dart';
import '../network/RestApis.dart';
import '../utils/Colors.dart';
import '../utils/Common.dart';
import '../utils/Constants.dart';
import '../utils/Extensions/app_common.dart';
class ComplaintListScreen extends StatefulWidget {
final int complaint;
ComplaintListScreen({required this.complaint});
@override
ComplaintListScreenState createState() => ComplaintListScreenState();
}
class ComplaintListScreenState extends State<ComplaintListScreen> {
TextEditingController messageCont = TextEditingController();
ScrollController scrollController = ScrollController();
var messageFocus = FocusNode();
bool isMe = false;
int currentPage = 1;
int totalPage = 1;
List<ComplaintList> complaintListData = [];
@override
void initState() {
super.initState();
init();
scrollController.addListener(() {
if (scrollController.position.pixels == scrollController.position.maxScrollExtent) {
if (currentPage < totalPage) {
appStore.setLoading(true);
currentPage++;
setState(() {});
init();
}
}
});
afterBuildCreated(() => appStore.setLoading(true));
}
void init() async {
await complaintList(complaintId: widget.complaint,currentPage: currentPage).then((value) {
appStore.setLoading(false);
currentPage = value.pagination!.currentPage!;
totalPage = value.pagination!.totalPages!;
if (currentPage == 1) {
complaintListData.clear();
}
complaintListData.addAll(value.data!);
setState(() {});
}).catchError((error) {
appStore.setLoading(false);
log(error.toString());
});
}
Future<void> save() async {
appStore.setLoading(true);
Map req = {
"complaint_id": widget.complaint,
"comment": messageCont.text.trim(),
};
await complaintComment(request: req).then((value) {
messageCont.clear();
appStore.setLoading(false);
init();
}).catchError((error) {
appStore.setLoading(false);
log(error.toString());
});
}
printTime(String data){
String time = "";
DateTime date = DateTime.parse(data).toLocal();
if (date.day == DateTime.now().day) {
time = DateFormat('hh:mm a').format(date);
} else {
time = DateFormat('dd-MM-yyyy hh:mm a').format(date);
}
return time;
}
@override
void setState(fn) {
if (mounted) super.setState(fn);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(language.complainList, style: boldTextStyle(color: Colors.white)),
),
body: Observer(builder: (context) {
return Stack(
children: [
Container(
padding: EdgeInsets.only(bottom: 76),
height: MediaQuery.of(context).size.height,
width: MediaQuery.of(context).size.width,
child: ListView.builder(
reverse: true,
controller: scrollController,
itemCount: complaintListData.length,
itemBuilder: (_, index) {
ComplaintList mData = complaintListData[index];
return Container(
margin: complaintListData[index].addedBy != ADMIN
? EdgeInsets.only(top: 6, bottom: 6, left: isRTL ? 0 : MediaQuery.of(context).size.width * 0.25, right: 8)
: EdgeInsets.only(top: 6, bottom: 6, left: 8, right: isRTL ? 0 : MediaQuery.of(context).size.width * 0.25),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
if (complaintListData[index].addedBy == ADMIN)
Container(
height: 35,
width: 35,
decoration: BoxDecoration(shape: BoxShape.circle, image: DecorationImage(image: NetworkImage(mData.userProfileImage.validate())),border: Border.all(color:Colors.black12)),
),
if (complaintListData[index].addedBy == ADMIN) SizedBox(width: 8),
Expanded(
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: complaintListData[index].addedBy != ADMIN ? CrossAxisAlignment.end : CrossAxisAlignment.start,
mainAxisAlignment: complaintListData[index].addedBy != ADMIN ? MainAxisAlignment.end : MainAxisAlignment.start,
children: [
Container(
padding: EdgeInsets.symmetric(horizontal: 12, vertical: 8),
decoration: BoxDecoration(boxShadow: [
BoxShadow(color: Colors.grey, blurRadius: 0.1, spreadRadius: 0.2), //BoxShadow
], color: complaintListData[index].addedBy != ADMIN ? primaryColor : Theme.of(context).cardColor, borderRadius: BorderRadius.circular(16)),
child: Text(
mData.comment.validate(),
style: primaryTextStyle(color: complaintListData[index].addedBy != ADMIN ? Colors.white : textPrimaryColorGlobal),
maxLines: null,
),
),
SizedBox(height: 4),
Text(printTime(mData.createdAt.validate()), style: secondaryTextStyle(size: 12)),
],
),
),
if (complaintListData[index].addedBy != ADMIN) SizedBox(width: 8),
if (complaintListData[index].addedBy != ADMIN)
Container(
height: 35,
width: 35,
decoration: BoxDecoration(shape: BoxShape.circle, image: DecorationImage(image: NetworkImage(mData.userProfileImage.validate())),border: Border.all(color:Colors.black12)),
),
],
),
);
}),
),
Positioned(
bottom: 16,
left: 16,
right: 16,
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(30),
boxShadow: [
BoxShadow(
spreadRadius: 0.5,
blurRadius: 0.5,
),
],
color: Theme.of(context).cardColor,
),
padding: EdgeInsets.only(left: 8, right: 8),
child: Row(
children: [
Expanded(
child: TextField(
controller: messageCont,
decoration: InputDecoration(
focusColor: primaryColor,
border: InputBorder.none,
hintText: language.writeMsg,
hintStyle: secondaryTextStyle(),
contentPadding: EdgeInsets.symmetric(horizontal: 8),
),
cursorColor: Colors.black,
focusNode: messageFocus,
textCapitalization: TextCapitalization.sentences,
keyboardType: TextInputType.multiline,
minLines: 1,
style: primaryTextStyle(),
// textInputAction: mIsEnterKey ? TextInputAction.send : TextInputAction.newline,
onSubmitted: (s) {
//
},
maxLines: 5,
),
),
inkWellWidget(
child: Icon(Icons.send, color: primaryColor, size: 25),
onTap: () {
if (messageCont.text.isEmpty) {
return toast(language.pleaseEnterMsg);
} else {
save();
}
},
)
],
),
width: MediaQuery.of(context).size.width,
),
),
if (appStore.isLoading) loaderWidget(),
if (!appStore.isLoading && complaintListData.isEmpty) emptyWidget()
],
);
}),
);
}
}
Editor is loading...
Leave a Comment