PostComments.dart
unknown
plain_text
3 years ago
11 kB
1
Indexable
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), ), ], ), ), ); } }
Editor is loading...