feed

 avatar
unknown
dart
3 years ago
58 kB
5
Indexable
import 'package:carousel_slider/carousel_slider.dart';
import 'package:chewie/chewie.dart';
import 'package:dio/dio.dart';
import 'package:dots_indicator/dots_indicator.dart';
import 'package:fancy_shimmer_image/fancy_shimmer_image.dart';
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter_svg/svg.dart';
import 'package:get/get.dart';
import 'package:mobile/app/Dto/like_dto.dart';
import 'package:mobile/app/Dto/provider_follow_dto.dart';
import 'package:mobile/app/Utilities/methods.dart';
import 'package:mobile/app/global_widgets/favorite_button.dart';
import 'package:mobile/app/models/new/app_user_model.dart';
import 'package:mobile/app/models/responses/get_all_posts_response.dart';
import 'package:mobile/app/models/responses/get_all_provier_following.dart';
import 'package:mobile/app/models/responses/provider_followers_response.dart';
import 'package:mobile/app/modules/account/controllers/account_controller.dart';
import 'package:mobile/app/modules/chat/views/Chats.dart';
import 'package:mobile/app/modules/feed/controller/comments_controller.dart';
// import 'package:mobile/app/modules/account/views/posts_view.dart';
import 'package:mobile/app/modules/feed/controller/feed_controller.dart';
import 'package:mobile/app/modules/feed/controller/likes_controller.dart';
import 'package:mobile/app/modules/feed/view/widgets/feed_comments_list.dart';
import 'package:mobile/app/modules/feed/view/widgets/feed_likes_list.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/routes/app_pages.dart';
import 'package:mobile/app/services/auth_service.dart';
import 'package:readmore/readmore.dart';
import 'package:video_player/video_player.dart';
import 'package:mobile/common/ui.dart';
import 'package:visibility_detector/visibility_detector.dart';
import 'package:volume_watcher/volume_watcher.dart';
// import 'package:mobile/app/modules/feed/controller/feed_controller.dart';

class FeedView extends GetView<FeedController> {
  final FeedController feedController = Get.put(FeedController());
  final FeedLikesController feedLikesController =
      Get.put(FeedLikesController());

  final FeedCommentsController feedcommentsController =
      Get.put(FeedCommentsController());

  AppUser _currentUser = Get.find<AuthService>().appUser.value;

  Widget build(BuildContext context) {
    return Scaffold(
      extendBodyBehindAppBar: false,
      body: RefreshIndicator(
        color: Get.theme.focusColor,
        onRefresh: () async {
          await controller.refreshPage(1);
        },
        child: Obx(
          () => controller.feed.length <= 0
              ? Center(
                  child: CircularProgressIndicator(
                    color: Get.theme.focusColor,
                  ),
                )
              : Padding(
                  padding: EdgeInsets.only(top: 25),
                  child: Column(
                    children: [
                      Expanded(
                        flex: 1,
                        child: Container(
                          color: Get.theme.primaryColor,
                          // margin: EdgeInsets.only(left: 8, right: 8, top: 35),
                          child: Row(
                            mainAxisAlignment: MainAxisAlignment.spaceBetween,
                            crossAxisAlignment: CrossAxisAlignment.center,
                            children: [
                              IconButton(
                                onPressed: () =>
                                    {Scaffold.of(context).openDrawer()},
                                icon: SvgPicture.asset(
                                    'assets/svg/menu_icon_black.svg'),
                              ),
                              Text(
                                "Posts".tr,
                                style: Get.theme.textTheme.headline5
                                    .merge(
                                      TextStyle(
                                          color: context.theme.hoverColor,
                                          fontWeight: FontWeight.w600),
                                    )
                                    .copyWith(fontSize: 21.0),
                              ),
                              Row(
                                mainAxisAlignment: MainAxisAlignment.center,
                                children: [
                                  IconButton(
                                    icon: _currentUser.id != null
                                        ? SvgPicture.asset(
                                            'assets/svg/Icon-notifications.svg')
                                        : Icon(
                                            Icons.notifications_active,
                                          ),
                                    onPressed: () =>
                                        Get.toNamed(Routes.NOTIFICATIONS),
                                  ),
                                  IconButton(
                                    icon: Icon(
                                      Icons.search,
                                      color: Colors.black,
                                    ),
                                    onPressed: () =>
                                        Get.toNamed(Routes.FEED_SEARCH),
                                  ),
                                ],
                              ),
                            ],
                          ),
                        ),
                      ),
                      Expanded(
                        flex: 9,
                        child: Container(
                          decoration: BoxDecoration(),
                          child: NotificationListener<ScrollNotification>(
                            onNotification: (ScrollNotification scrollInfo) {
                              if (!controller.isLoading.value &&
                                  scrollInfo.metrics.pixels ==
                                      scrollInfo.metrics.maxScrollExtent) {
                                controller.isLoading.value = true;
                                controller.incrementPage();
                                controller.getAllPosts(controller.pageIndex.value);

                                return true;
                              }
                              return false;
                            },
                            child: ListView.builder(
                                padding: EdgeInsets.zero,
                                itemCount: controller.feed
                                    .where((element) => element.url != null)
                                    .toList()
                                    .length,
                                itemBuilder: (context, indexPath) {
                                  return listItem(
                                      controller.feed
                                          .where((element) => element.url != null)
                                          .toList()[indexPath],
                                      context);
                                },
                              ),
                             ),
                        ),
                      ),
                      Container(
                        height: controller.isLoading.value ? 50.0 : 0,
                        child: Center(
                          child: new CircularProgressIndicator(
                            color: Get.theme.accentColor,
                          ),
                        ),
                      ),
                    ],
                  ),
                ),
        ),
      ),
    );
  }

  Widget listItem(PostsItems e, BuildContext context) {
    return FeedItem(
      e: e,
      currentUser: _currentUser,
      feedLikesController: feedLikesController,
      feedController: feedController,
      feedcommentsController: feedcommentsController,
      rootController: Get.put(RootController()),
      accountController: Get.put(AccountController()),
    );
  }
}

class FeedItem extends StatelessWidget {
  const FeedItem(
      {Key key,
      @required AppUser currentUser,
      @required this.feedController,
      @required this.feedLikesController,
      @required this.feedcommentsController,
      @required this.rootController,
      @required this.e,
      this.accountController,})
      : _currentUser = currentUser,
        super(key: key);

  final PostsItems e;
  final FeedController feedController;
  final FeedLikesController feedLikesController;
  final FeedCommentsController feedcommentsController;
  final RootController rootController;
  final AccountController accountController;

  final AppUser _currentUser;

  @override
  Widget build(BuildContext context) {
    dynamic like = e.isLiked;
    return e.url.isNotEmpty
        ? Container(
            color: Get.theme.primaryColor,
            width: Get.width,
            child: Column(
              children: [
                Column(
                  children: [
                    Container(
                            decoration: BoxDecoration(
                              color: Colors.white,
                            ),
                            child: Column(
                              crossAxisAlignment: CrossAxisAlignment.start,
                              children: <Widget>[
                                Row(
                                  mainAxisAlignment:
                                      MainAxisAlignment.spaceBetween,
                                  children: [
                                    InkWell(
                                      onTap: () async {
                                        if (e.providerId != _currentUser.id) {
                                          Get.dialog(
                                            Center(
                                              child: CircularProgressIndicator(
                                                valueColor:
                                                    AlwaysStoppedAnimation<
                                                        Color>(
                                                  Get.theme.accentColor,
                                                ),
                                              ),
                                            ),
                                            barrierDismissible: true,
                                          );
                                          final OtherProviderController
                                              otherProviderController = Get.find();
                                        
                                          await otherProviderController
                                              .getAllProviderData(e.providerId);
                                          Get.to(AnotherProvider())
                                              .then((value) => Get.back());
                                        } else {
                                          rootController.changePageInRoot(3);
                                        }
                                      },
                                      child: Container(
                                        margin: EdgeInsets.only(
                                            top: 10.0, bottom: 5.0),
                                        padding: EdgeInsets.all(5.0),
                                        child: Row(
                                          mainAxisAlignment:
                                              MainAxisAlignment.center,
                                          crossAxisAlignment:
                                              CrossAxisAlignment.center,
                                          children: <Widget>[
                                            Stack(
                                              children: [
                                                e.providerProfileUrl != null
                                                    ? ClipRRect(
                                                        borderRadius:
                                                            new BorderRadius
                                                                .circular(50.0),
                                                        child: CircleAvatar(
                                                          backgroundColor:
                                                              Ui.parseColor(
                                                                  "#BEBEBE"),
                                                          radius: 22,
                                                          child:
                                                              FancyShimmerImage(
                                                            imageUrl: e
                                                                .providerProfileUrl,
                                                            width: 60,
                                                            height: 60,
                                                          ),
                                                          backgroundImage:
                                                              NetworkImage(
                                                            '${e.providerProfileUrl}',
                                                          ),
                                                        ),
                                                      )
                                                    : ClipRRect(
                                                        borderRadius:
                                                            new BorderRadius
                                                                .circular(50.0),
                                                        child: Image.asset(
                                                          'assets/img/def_user.jpg',
                                                          width: 60,
                                                          height: 60,
                                                        ),
                                                      ),
                                                Positioned(
                                                  top: e.providerProfileUrl ==
                                                          null
                                                      ? 8
                                                      : 0,
                                                  right: e.providerProfileUrl ==
                                                          null
                                                      ? 8
                                                      : 0,
                                                  child: InkWell(
                                                    onTap: () {},
                                                    child: e.isLicenseActive ==
                                                            true
                                                        ? CircleAvatar(
                                                            backgroundColor: Get
                                                                .theme
                                                                .focusColor,
                                                            radius: 8,
                                                            child: Icon(
                                                              Icons.check,
                                                              size: 12,
                                                              color: Get.theme
                                                                  .primaryColor,
                                                            ),
                                                          )
                                                        : SizedBox(),
                                                  ),
                                                ),
                                              ],
                                            ),
                                            SizedBox(
                                              width: 5.0,
                                            ),
                                            Column(
                                              crossAxisAlignment:
                                                  CrossAxisAlignment.start,
                                              mainAxisAlignment:
                                                  MainAxisAlignment.start,
                                              mainAxisSize: MainAxisSize.min,
                                              children: <Widget>[
                                                Row(
                                                  mainAxisAlignment:
                                                      MainAxisAlignment.start,
                                                  crossAxisAlignment:
                                                      CrossAxisAlignment.start,
                                                  children: [
                                                    Text(
                                                      e.providerName,
                                                      textScaleFactor: 1.0,
                                                      style: TextStyle(
                                                        color: Colors.black,
                                                        fontSize: 14.0,
                                                        fontWeight:
                                                            FontWeight.bold,
                                                      ),
                                                    ),
                                                  ],
                                                ).marginOnly(top: 8, bottom: 8),
                                                Row(
                                                    mainAxisAlignment:
                                                        MainAxisAlignment.start,
                                                    crossAxisAlignment:
                                                        CrossAxisAlignment
                                                            .start,
                                                    children: <Widget>[
                                                      Icon(
                                                        Icons.access_time,
                                                        color: Colors.black
                                                            .withOpacity(0.7),
                                                        size: 15.0,
                                                      ),
                                                      SizedBox(
                                                        width: 5.0,
                                                      ),
                                                      Text(
                                                        AppMethodsAndUtilities()
                                                            .getVerboseDateTimeRepresentation(
                                                                e.createdDate),
                                                        style: TextStyle(
                                                            color: Colors.black
                                                                .withOpacity(
                                                                    0.7),
                                                            fontSize: 13),
                                                      ),
                                                    ])
                                              ],
                                            ),
                                          ],
                                        ),
                                      ),
                                    ),
                                    e.providerId != _currentUser.id
                                        ? Obx(
                                            () => accountController
                                                    .following.value
                                                    .where((element) =>
                                                        element.providerId ==
                                                        e.providerId)
                                                    .isEmpty
                                                ? TextButton(
                                                    child: Text(
                                                      "Follow".tr,
                                                      style: Get
                                                          .textTheme.bodyText1
                                                          .copyWith(
                                                              color: Get.theme
                                                                  .focusColor,
                                                              fontWeight:
                                                                  FontWeight
                                                                      .w600),
                                                    ),
                                                    onPressed: () async {
                                                      ProviderFollowDto param =
                                                          ProviderFollowDto(
                                                        providerId:
                                                            e.providerId,
                                                        requesterId:
                                                            _currentUser.id,
                                                        isfollow: true,
                                                      );

                                                      Get.log(
                                                          "trying to add follower");
                                                      await ApiProvider(
                                                              httpClient: Dio())
                                                          .addOtherProviderFollow(
                                                              param)
                                                          .then((value) {
                                                        accountController
                                                            .following
                                                            .add(
                                                          providerFollowingItems(
                                                            isfollow: true,
                                                            requesterId:
                                                                e.providerId,
                                                            providerId:
                                                                _currentUser.id,
                                                            providerName:
                                                                e.providerName,
                                                            requesterName:
                                                                _currentUser
                                                                    .name,
                                                            providerUrl: e
                                                                .providerProfileUrl,
                                                            requesterUrl:
                                                                _currentUser
                                                                    .profilePictureUrl,
                                                            createdDate:
                                                                DateTime.now()
                                                                    .toString(),
                                                            id: value,
                                                          ),
                                                        );
                                                        accountController
                                                            .getAllFollowing();
                                                      });
                                                    },
                                                  )
                                                : TextButton(
                                                    child: Text(
                                                      "Following".tr,
                                                      style: Get
                                                          .textTheme.bodyText1
                                                          .copyWith(
                                                              color:
                                                                  Ui.parseColor(
                                                                      "#262626 "),
                                                              fontWeight:
                                                                  FontWeight
                                                                      .w600),
                                                    ),
                                                    onPressed: () async {
                                                      String id = accountController
                                                          .following.value
                                                          .where((element) =>
                                                              element
                                                                  .providerId ==
                                                              e.providerId)
                                                          .first
                                                          .id;
                                                      print(
                                                          "lenght = ${accountController.followers.length}");
                                                      await ApiProvider(
                                                              httpClient: Dio())
                                                          .deleteProviderFollowers(
                                                              id)
                                                          .then((value) {
                                                        accountController
                                                            .following
                                                            .removeWhere((element) =>
                                                                element
                                                                    .requesterId ==
                                                                e.providerId);
                                                        accountController
                                                            .getAllFollowing();
                                                      });
                                                    },
                                                  ),
                                          )
                                        : SizedBox(),
                                  ],
                                ),
                                
                                
                        e.url.first.contains("mp4") || e.url.first.contains('MOV')
                        ? VideoWidget(
                            url: e.url.first,
                          )
                        : Column(
                                  mainAxisSize: MainAxisSize.min,
                                  children: [
                                    CarouselSlider.builder(
                                      itemCount: e.url.length,
                                      itemBuilder: (context, index, realIndex) {
                                        return FancyShimmerImage(
                                          imageUrl: e.url[index],
                                          width: Get.width,
                                          boxFit: BoxFit.cover,
                                        );
                                      },
                                      options: CarouselOptions(
                                          viewportFraction: 1.0,
                                          enableInfiniteScroll: false,
                                          aspectRatio: 1 / 1,
                                          onPageChanged: (index, reason) {
                                            feedController.onPageChanged(
                                                index, reason, e.id);
                                          }),
                                    ),
                                  ],
                                ),
                                e.description != null
                                    ? Container(
                                        padding:
                                            EdgeInsets.symmetric(vertical: 8),
                                        margin: EdgeInsets.only(
                                            right: 5.0, left: 5.0),
                                        child: ReadMoreText(
                                          e.description,
                                          style:
                                              Get.textTheme.bodyText1.copyWith(
                                            fontSize: 16,
                                            fontWeight: FontWeight.w200,
                                            height: 1.3,
                                            color: e.description != null
                                                ? Colors.black
                                                : Colors.transparent,
                                          ),
                                          trimLength: 40,
                                          colorClickableText: Colors.black,
                                          trimMode: TrimMode.Length,
                                          trimCollapsedText: 'more'.tr,
                                          trimExpandedText: 'less'.tr,
                                          lessStyle: TextStyle(
                                            color: Colors.grey[400],
                                            fontSize: 14,
                                            fontWeight: FontWeight.normal,
                                          ),
                                          moreStyle: TextStyle(
                                            color: Colors.grey[400],
                                            fontSize: 14,
                                            fontWeight: FontWeight.normal,
                                          ),
                                        ),

                                        // Text(
                                        //   e.description == '_' ? '' : e.description,
                                        //   textScaleFactor: 1.0,
                                        //   style: Get.textTheme.bodyText1.copyWith(
                                        //       fontSize: 16,
                                        //       fontWeight: FontWeight.w200,
                                        //       height: 1.3),
                                        // ),
                                      )
                                    : SizedBox(),
                              ],
                            ),
                          ),
                    e.url.length > 1
                        ? Row(
                            mainAxisAlignment: MainAxisAlignment.center,
                            children: [
                              DotsIndicator(
                                dotsCount: e.url.length,
                                position: e.index.toDouble(),
                                decorator: DotsDecorator(
                                  color: Colors.grey[300], // Inactive color
                                  activeColor: Colors.grey[600],
                                ),
                              ),
                            ],
                          )
                        : SizedBox(),
                  ],
                ),

                // Don't Touch Pls...
                Container(
                  margin: EdgeInsets.only(right: 5.0, left: 5.0),
                  child: Row(
                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
                    children: [
                      Row(
                        children: [
                          // love icon
                          Row(
                            children: [
                              Row(
                                mainAxisAlignment: MainAxisAlignment.center,
                                children: [
                                  FavoriteButton(
                                    iconDisabledColor: Colors.black87,
                                    isFavorite: like,
                                    iconSize: 35,
                                    valueChanged: (like) async {
                                      print('Is Favorite : $like');
                                      if (!e.isLiked) {
                                        LikeDto likeDto = LikeDto(
                                          providerId: e.providerId,
                                          requesterId: _currentUser.id,
                                          postId: e.id,
                                        );
                                        print("providerId=${e.providerId}");
                                        print("requesterId=${_currentUser.id}");

                                        Get.log("trying to add like on feed");
                                        await ApiProvider(httpClient: Dio())
                                            .providerAddLikes(likeDto)
                                            .then((value) {
                                          feedController.feed
                                              .where((element) =>
                                                  element.id == e.id)
                                              .first
                                              .likeCount++;
                                          feedController.feed.refresh();
                                          feedController.likes.refresh();
                                          e.isLiked = true;
                                          feedController
                                              .isHeartAnimating.value = true;
                                        });
                                        await ApiProvider(httpClient: Dio())
                                            .getAllProviderLikes(e.id);
                                      } else {
                                        print('unlike');

                                        await feedLikesController
                                            .getAllProviderfeedLikes(e.id);

                                        var likeId = feedLikesController
                                            .likes.value
                                            .where((element) =>
                                                element.requesterId ==
                                                _currentUser.id)
                                            .last
                                            .id;

                                        await ApiProvider(httpClient: Dio())
                                            .providerFeedDeleteLike(likeId)
                                            .then((value) {
                                          feedController.feed
                                              .where((element) =>
                                                  element.id == e.id)
                                              .first
                                              .likeCount--;
                                          feedController.feed.refresh();
                                          feedLikesController.likes.refresh();
                                          e.isLiked = false;
                                          feedController
                                              .isHeartAnimating.value = false;
                                        });
                                      }
                                    },
                                  ),
                                  SizedBox(
                                    width: 7.0,
                                  ),
                                  // Text(
                                  //   "${e.likeCount}",
                                  //   style: Get.textTheme.bodyText1
                                  //       .copyWith(fontWeight: FontWeight.bold),
                                  // ),
                                ],
                              ),
                            ],
                          ),

                          SizedBox(width: 3.0),
                          Row(
                            mainAxisAlignment: MainAxisAlignment.center,
                            children: [
                              IconButton(
                                icon: SvgPicture.asset(
                                  "assets/svg/instagram-comment.svg",
                                  width: 19,
                                ),
                                onPressed: () async {
                                  Get.log("trying to get all comments");
                                  Get.lazyPut(() => FeedCommentsController());
                                  await feedcommentsController
                                      .getAllComments(e.id)
                                      .then((value) {
                                    feedcommentsController.setPostId(e.id);
                                    feedcommentsController
                                        .setPostOwner(e.providerId);
                                    Get.to(
                                      FeedComments(),
                                    );
                                  });
                                },
                              ),
                              // Text(
                              //   "${e.commentCount}",
                              //   style: Get.textTheme.bodyText1
                              //       .copyWith(fontWeight: FontWeight.bold),
                              // ),
                            ],
                          ),
                        ],
                      ),
                      e.postPrice != null
                          ? Flexible(
                              child: Ui.getPrice(e.postPrice)
                                  .paddingOnly(right: 20))
                          : SizedBox(),
                    ],
                  ),
                ),
                feedController.feed
                            .where((element) => element.id == e.id)
                            .first
                            .likeCount >
                        0
                    ? Row(
                        children: [
                          Text(
                            "Liked by".tr,
                            style: Get.theme.textTheme.bodyText2.copyWith(
                                fontWeight: FontWeight.w100, fontSize: 14),
                          ),
                          SizedBox(
                            width: 3,
                          ),
                          Text(
                            e.likeFirstName != null
                                ? e.likeFirstName
                                : _currentUser.name,
                            style: Get.theme.textTheme.bodyText2.copyWith(
                                fontWeight: FontWeight.w700, fontSize: 15),
                          ),
                          SizedBox(
                            width: 2,
                          ),
                          feedController.feed
                                      .where((element) => element.id == e.id)
                                      .first
                                      .likeCount >=
                                  2
                              ? Text(
                                  "and".tr,
                                  style: Get.theme.textTheme.bodyText2.copyWith(
                                      fontWeight: FontWeight.w100,
                                      fontSize: 12),
                                )
                              : SizedBox(),
                          SizedBox(
                            width: 2,
                          ),
                          feedController.feed
                                      .where((element) => element.id == e.id)
                                      .first
                                      .likeCount >=
                                  2
                              ? InkWell(
                                  child: IgnorePointer(
                                    child: Row(
                                      children: [
                                        Text(
                                          "${e.likeCount - 1}".tr,
                                          style: Get.theme.textTheme.bodyText2
                                              .copyWith(
                                                  fontWeight: FontWeight.w500,
                                                  fontSize: 15),
                                        ).paddingSymmetric(horizontal: 2),
                                        Text(
                                          "others".tr,
                                          style: Get.theme.textTheme.bodyText2
                                              .copyWith(
                                                  fontWeight: FontWeight.w100,
                                                  fontSize: 12),
                                        )
                                      ],
                                    ),
                                  ),
                                  onTap: () async {
                                    Get.lazyPut(() => FeedLikesController());
                                    Get.log("trying to get all likes");
                                    await feedLikesController
                                        .getAllProviderfeedLikes(e.id)
                                        .then((value) {
                                      Get.to(
                                        FeedLikes(),
                                      );
                                    });
                                  },
                                )
                              : SizedBox(),
                        ],
                      ).paddingSymmetric(horizontal: 10)
                    : SizedBox(),
                e.comments != null && e.comments.isNotEmpty
                    ? Container(
                        margin: EdgeInsets.only(
                          left: 10,
                          right: 10,
                        ),
                        child: Column(
                          mainAxisAlignment: MainAxisAlignment.start,
                          crossAxisAlignment: CrossAxisAlignment.start,
                          children: [
                            Container(
                              margin: EdgeInsets.only(top: 10.0, bottom: 5.0),
                              child: Text(
                                "Comments".tr,
                                style: Get.textTheme.bodyText1.copyWith(
                                    fontWeight: FontWeight.bold, fontSize: 14),
                              ),
                            ),
                            Row(
                              mainAxisAlignment: MainAxisAlignment.center,
                              crossAxisAlignment: CrossAxisAlignment.start,
                              children: [
                                Text(
                                  "${e.comments.first.requesterName}",
                                  style: Get.textTheme.bodyText1.copyWith(
                                      fontWeight: FontWeight.w700,
                                      fontSize: 14),
                                ),
                                SizedBox(
                                  width: 2.0,
                                ),
                                Expanded(
                                  flex: 6,
                                  child: Text(
                                    e.comments.first.comments.length > 40
                                        ? String.fromCharCodes(e
                                                .comments.first.comments
                                                .replaceAll("\n", " ")
                                                .runes
                                                .toList()
                                                .sublist(0, 40)) +
                                            "..."
                                        : e.comments.first.comments
                                            .replaceAll("\n", " "),
                                    overflow: TextOverflow.ellipsis,
                                    style: Get.textTheme.bodyText1.copyWith(
                                      fontSize: 14,
                                      fontWeight: FontWeight.w100,
                                    ),
                                  ),
                                )
                              ],
                            ),
                            e.commentCount > 1
                                ? Container(
                                    margin: EdgeInsets.only(top: 10.0),
                                    child: InkWell(
                                      child: IgnorePointer(
                                        child: RichText(
                                          overflow: TextOverflow.ellipsis,
                                          maxLines: 2,
                                          text: TextSpan(
                                            text: "See all ".tr,
                                            style: Get.textTheme.bodyText1
                                                .copyWith(
                                              fontSize: 12,
                                              fontWeight: FontWeight.w500,
                                              color: Ui.parseColor("#949494"),
                                            ),
                                            children: <TextSpan>[
                                              TextSpan(
                                                text: " (${e.commentCount}) ",
                                                style: Get.textTheme.bodyText1
                                                    .copyWith(
                                                  fontSize: 12,
                                                  fontWeight: FontWeight.w500,
                                                  color:
                                                      Ui.parseColor("#949494"),
                                                ),
                                              ),
                                              TextSpan(
                                                text: "comments".tr,
                                                style: Get.textTheme.bodyText1
                                                    .copyWith(
                                                  fontSize: 12,
                                                  fontWeight: FontWeight.w500,
                                                  color:
                                                      Ui.parseColor("#949494"),
                                                ),
                                              ),
                                            ],
                                          ),
                                        ),
                                      ),
                                      onTap: () async {
                                        Get.log("trying to get all comments");
                                        Get.lazyPut(
                                            () => FeedCommentsController());
                                        await feedcommentsController
                                            .getAllComments(e.id)
                                            .then((value) {
                                          feedcommentsController
                                              .setPostId(e.id);
                                          feedcommentsController
                                              .setPostOwner(e.providerId);
                                          Get.to(
                                            FeedComments(),
                                          );
                                        });
                                      },
                                    ),
                                  )
                                : SizedBox(),
                          ],
                        ),
                      )
                    : SizedBox(),
              ],
            ),
          )
        : SizedBox();
  }
}

class FeedVideoWidget extends StatefulWidget {
  const FeedVideoWidget({Key key, this.videoUrl, this.autoPlay})
      : super(key: key);

  final bool autoPlay;
  final String videoUrl;

  @override
  _FeedVideoWidgetState createState() => _FeedVideoWidgetState();
}

class _FeedVideoWidgetState extends State<FeedVideoWidget> {
  VideoPlayerController _controller;

  @override
  void initState() {
    super.initState();
    _controller = VideoPlayerController.network(widget.videoUrl)
      ..initialize().then((_) {
        _controller.setLooping(widget.autoPlay);
        Future.delayed(
          Duration(
            milliseconds: 500,
          ),
          () {
            if (widget.autoPlay) {
              _controller.play();
              _controller.setVolume(0.0);
            } else {
              _controller.pause();
              _controller.setVolume(0.0);
            }

            setState(() {});
          },
        );
      });
  }

  @override
  void dispose() {
    super.dispose();
    _controller.dispose();
  }

  /*

  @override
  void didUpdateWidget(FeedVideoWidget oldWidget) {
    _controller.pause();
    _controller.setLooping(false);

    super.didUpdateWidget(oldWidget);
  }

    */

  @override
  Widget build(BuildContext context) {
    return InkWell(
      onTap: () {
        if (_controller.value.volume == 0.0) {
          _controller.setVolume(1.0);
        } else {
          _controller.setVolume(0.0);
        }
        setState(() {});
      },
      child: _controller.value.isInitialized
          ? Center(
              child: Stack(
                children: [
                  AspectRatio(
                    aspectRatio: 1,
                    child: VideoPlayer(_controller),
                  ),
                  widget.autoPlay
                      ? Container(
                          margin: EdgeInsets.all(5.0),
                          child: _controller.value.volume == 0.0
                              ? Icon(
                                  Icons.volume_off,
                                  color: Get.theme.primaryColor,
                                  size: 25,
                                )
                              : Icon(
                                  Icons.volume_up,
                                  color: Get.theme.primaryColor,
                                  size: 25,
                                ),
                        )
                      : Icon(
                          Icons.play_arrow,
                          color: Get.theme.primaryColor,
                          size: 25,
                        )
                ],
              ),
            )
          : Container(),
    );
  }
}

// Forbidden
class VideoWidget extends StatefulWidget {
  const VideoWidget(
      {Key key,
      @required this.url,})
      : super(key: key);

  final String url;

  @override
  _VideoWidgetState createState() => _VideoWidgetState();
}

class _VideoWidgetState extends State<VideoWidget> {
  double aRatio = 0.5;
  VideoPlayerController _controller;
  ChewieController chewieController;
  Future<void> _initializeVideoPlayerFuture;

  @override
  void dispose() {
    _controller.dispose();
    chewieController.dispose();
    super.dispose();
  }

  @override
  void initState() {
    super.initState();
    _controller = VideoPlayerController.network(widget.url);
    _initializeVideoPlayerFuture = _controller.initialize().then((_) {
      // Ensure the first frame is shown after the video is initialized, even before the play button has been pressed.
      setState(
        () {
      aRatio = _controller.value.aspectRatio <
                  ((MediaQuery.of(context).size.width /
                          MediaQuery.of(context).size.height) +
                      0.4)
              ? _controller.value.aspectRatio / 0.7
              : _controller.value.aspectRatio;
      chewieController = ChewieController(
          videoPlayerController: _controller,
          autoPlay: false,
          looping: false,
          autoInitialize: true,
          aspectRatio: aRatio,);
              _controller.pause();
              _controller.setLooping(false);
        },
      
      );
    });

  }

  @override
  Widget build(BuildContext context) {

    return VisibilityDetector(
        key: ObjectKey(_controller),
          onVisibilityChanged: (visibility){
            if (visibility.visibleFraction == 0 && this.mounted) {
                  _controller.pause();
            }

            else 
            {
              _controller.play();
            }

       },
      child: FutureBuilder(
       future: _initializeVideoPlayerFuture,
       builder: (context, snapshot) {
         if (snapshot.connectionState == ConnectionState.done) {
           return _controller.value.isInitialized
               ? Stack(
                   children: [
                     AspectRatio(
                       aspectRatio: aRatio,
                       child: VolumeWatcher(
                         onVolumeChangeListener: (double volume) {
                           chewieController.setVolume(volume);
                         },
                         child: Chewie(
                           controller: chewieController,
                         ),
                       ),
                     ),
                   ],
                 )
               : Container();
         } else {
           return Container(
             width: double.infinity,
             height: 400,
             // child: FancyShimmerImage(
             //     imageUrl: 'https://i.imgur.com/j57mwe4.jpg'),
           );
         }
       },
          ),
    ); }
}
Editor is loading...