import 'package:dio/dio.dart';
import 'package:fancy_shimmer_image/fancy_shimmer_image.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.dart';
import 'package:mobile/app/Dto/provider_comment_model.dart';
import 'package:mobile/app/global_widgets/circular_block_button_widget.dart';
import 'package:mobile/app/models/new/app_user_model.dart';
import 'package:mobile/app/models/responses/get_all_comments_response.dart';
import 'package:mobile/app/modules/account/controllers/account_controller.dart';
import 'package:mobile/app/modules/account/controllers/posts_comments_controller.dart';
import 'package:mobile/app/modules/feed/controller/comments_controller.dart';
import 'package:mobile/app/modules/feed/controller/feed_controller.dart';
import 'package:mobile/app/modules/root/controllers/root_controller.dart';
import 'package:mobile/app/other_provider_account/controller/other_provider_controller.dart';
import 'package:mobile/app/other_provider_account/views/another_provider_account_view.dart';
import 'package:mobile/app/providers/api_provider.dart';
import 'package:mobile/app/services/auth_service.dart';
class PostComments extends GetView<PostsCommentsController> {
final AccountController accountController = Get.put(AccountController());
final _currentUser = Get.find<AuthService>();
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
FocusScopeNode currentFocus = FocusScope.of(context);
if (!currentFocus.hasPrimaryFocus) {
currentFocus.unfocus();
}
},
child: Scaffold(
backgroundColor: Colors.white,
appBar: AppBar(
iconTheme: IconThemeData(
color: Colors.black, //change your color here
),
backgroundColor: Colors.white,
title: Text("Comments".tr,
style: Get.textTheme.headline4
.copyWith(fontWeight: FontWeight.w800)),
centerTitle: true,
elevation: 0,
),
body: CommentsWidget(),
),
);
}
}
class CommentsWidget extends StatefulWidget {
const CommentsWidget({Key key}) : super(key: key);
@override
_CommentsWidgetState createState() => _CommentsWidgetState();
}
class _CommentsWidgetState extends State<CommentsWidget> {
@override
Widget build(BuildContext context) {
var controller = Get.find<PostsCommentsController>();
final _currentUser1 = Get.find<AuthService>();
final AccountController accountController = Get.put(AccountController());
return Column(
children: [
Expanded(
flex: 7,
child: FutureBuilder<List<CommentsItems>>(
future: controller.getAllComments(controller.postId),
builder: (context, snapshot) {
// print('SNAPSHOT DATA: ${snapshot.data.first.comments}');
if (snapshot.connectionState == ConnectionState.waiting) {
return Column(
children: [
SizedBox(
height: 200,
),
Center(
child: Container(
child: CircularProgressIndicator(
color: Get.theme.accentColor,
)),
),
],
);
} else if (snapshot.data.isEmpty) {
return Container(
width: Get.width,
child: Center(
child: Text(
"There is no comments yet".tr,
style: Get.theme.textTheme.headline5.merge(
TextStyle(
color: context.theme.hoverColor,
fontWeight: FontWeight.w600),
),
),
),
);
}
return Obx(() => ListView.builder(
padding: EdgeInsets.zero,
itemCount: controller.postComments.length,
itemBuilder: (context, index) {
return listItem(
controller.postComments[index], context);
},
));
}),
),
Expanded(
flex: 2,
child: Container(
height: Get.height * 0.1,
width: Get.width,
child: SingleChildScrollView(
scrollDirection: Axis.vertical,
reverse: true,
child: TextFormField(
autofocus: true,
cursorColor: Colors.black,
keyboardType: TextInputType.multiline,
style: TextStyle(color: Colors.black87),
maxLength: 160,
decoration: new InputDecoration(
border: InputBorder.none,
focusedBorder: InputBorder.none,
enabledBorder: InputBorder.none,
errorBorder: InputBorder.none,
disabledBorder: InputBorder.none,
suffixIcon: Container(
width: Get.width * 0.133,
margin: EdgeInsets.all(5),
decoration: BoxDecoration(
color: Colors.grey[400],
borderRadius: BorderRadius.all(
Radius.circular(50),
),
),
child: CircularBlockButtonWidget(
color: Colors.grey[400],
onPressed: () async {
ProviderCommentModel comments = ProviderCommentModel(
providerId: controller.postOwner,
requesterId: _currentUser1.appUser.value.id,
comments: controller.commentController.text,
postId: controller.postId);
await ApiProvider(httpClient: Dio())
.providerAddComments(comments)
.then((value) => {
accountController.providerPosts
.where((element) =>
element.id == comments.postId)
.first
.commentCount++,
accountController.providerPosts.refresh(),
setState(() {
// controller.futureComments = controller.getAllComments(controller.feedPostId);
})
});
// controller.feedComments.clear();
// await ApiProvider(httpClient: Dio())
// .getAllComments(comments.postId)
// .then(
// (value) {
// value.data.items.forEach(
// (v) {
// controller.feedComments.add(v);
// });
// }
// );
controller.commentController.clear();
controller.postComments.refresh();
setState(() {
// controller.futureComments =
// controller.getAllComments(controller.feedPostId);
});
},
text: SvgPicture.asset(
'assets/svg/sendComment.svg',
height: 20,
width: 20,
),
),
),
contentPadding: EdgeInsets.only(left: 15, top: 5, right: 15),
hintText: "Add comment".tr,
),
controller: controller.commentController,
maxLines: 4,
).paddingOnly(bottom: 8),
),
),
),
],
);
}
Widget listItem(CommentsItems e, BuildContext context) {
AppUser _currentUser = Get.find<AuthService>().appUser.value;
final RootController rootController = Get.put(RootController());
return InkWell(
onTap: () async {
if (e.requesterId != _currentUser.id) {
Get.dialog(
Center(
child: CircularProgressIndicator(
valueColor: AlwaysStoppedAnimation<Color>(
Get.theme.focusColor,
),
),
),
barrierDismissible: true,
);
var otherProviderController = Get.put(OtherProviderController());
await otherProviderController.getAllProviderData(e.requesterId);
Get.to(AnotherProvider()).then((value) => Get.back());
} else {
Get.back();
rootController.changePageInRoot(3);
}
},
child: ListTile(
contentPadding: EdgeInsets.symmetric(horizontal: 8, vertical: 12),
leading: CircleAvatar(
radius: 28,
child: ClipRRect(
borderRadius: new BorderRadius.circular(40.0),
child: _currentUser.profilePictureUrl != null?
FancyShimmerImage(
imageUrl: e.requesterUrl,
width: 130,
height: 130,
)
: SvgPicture.asset(
'assets/svg/icProfilePic.svg',
height: 130,
width: 130,
),),
),
subtitle: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
RichText(
text: TextSpan(
text: e.requesterName + " ",
style: Get.textTheme.bodyText1
.copyWith(fontWeight: FontWeight.bold, fontSize: 14),
children: <TextSpan>[
TextSpan(
text: e.comments,
style: Get.textTheme.bodyText1.copyWith(
fontSize: 14,
),
),
],
),
),
Text(
e.createdDate.split(" ")[0],
style: Get.textTheme.bodyText1
.copyWith(fontSize: 12, color: Get.theme.hintColor),
),
],
),
),
);
}
}