PostComments.dart

 avatar
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),
            ),
          ],
        ),
      ),
    );
  }
}