Untitled
unknown
dart
4 years ago
60 kB
14
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:full_screen_image/full_screen_image.dart';
import 'package:get/get.dart';
import 'package:inview_notifier_list/inview_notifier_list.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/IconBottonWidget.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: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: InViewNotifierList(
///malik:remove space between appbar and list
padding: EdgeInsets.zero,
// reverse: true,
addAutomaticKeepAlives: true,
scrollDirection: Axis.vertical,
initialInViewIds: ['0'],
isInViewPortCondition: (double deltaTop,
double deltaBottom,
double viewPortDimension) {
return deltaTop < (0.5 * viewPortDimension) &&
deltaBottom > (0.5 * viewPortDimension);
},
itemCount: controller.feed
.where((element) => element.url != null)
.toList()
.length,
builder: (BuildContext context, int index) {
return InViewNotifierWidget(
id: '$index',
builder: (BuildContext context, bool isInView,
Widget child) {
return Obx(() => listItem(
controller.feed
.where((element) =>
element.url != null)
.toList()[index],
context,
isInView));
},
);
},
),
),
),
),
Container(
height: controller.isLoading.value ? 50.0 : 0,
child: Center(
child: new CircularProgressIndicator(
color: Get.theme.accentColor,
),
),
),
],
),
),
),
),
);
}
Widget listItem(PostsItems e, BuildContext context, bool isInView) {
return FeedItem(
e: e,
currentUser: _currentUser,
feedLikesController: feedLikesController,
feedController: feedController,
feedcommentsController: feedcommentsController,
isInView: isInView,
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,
@required this.isInView})
: _currentUser = currentUser,
super(key: key);
final PostsItems e;
final FeedController feedController;
final FeedLikesController feedLikesController;
final FeedCommentsController feedcommentsController;
final RootController rootController;
final AccountController accountController;
final bool isInView;
final AppUser _currentUser;
@override
Widget build(BuildContext context) {
dynamic like = e.isLiked;
return e.url.isNotEmpty
? Container(
color: Get.theme.primaryColor,
// margin: EdgeInsets.only(
// bottom: 20,
// ),
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.put(
OtherProviderController());
// otherProviderController.setProviderId(e.providerId);
// await otherProviderController.getAll(e.providerId);
await otherProviderController
.getAllProviderData(e.providerId);
// await otherProviderController
// .getAllSpecialities(e.providerId);
// Get.back();
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(
play: isInView,
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,
@required this.play,})
: super(key: key);
final bool play;
final String url;
@override
_VideoWidgetState createState() => _VideoWidgetState();
}
class _VideoWidgetState extends State<VideoWidget> {
bool loop;
VideoPlayerController _controller;
ChewieController chewieController;
Future<void> _initializeVideoPlayerFuture;
double aRatio = 0.5;
@override
void didUpdateWidget(VideoWidget oldWidget) {
setState(() {});
if (oldWidget.play != widget.play) {
Get.log("Herew");
if (widget.play) {
Get.log("Here");
chewieController.videoPlayerController.play();
chewieController.videoPlayerController.setLooping(loop);
} else {
Get.log("Here1");
chewieController.videoPlayerController.pause();
}
}
else {
Get.log("Herex");
}
super.didUpdateWidget(oldWidget);
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
void initState() {
super.initState();
setState(() {
loop = true;
});
_controller = VideoPlayerController.network(widget.url);
_initializeVideoPlayerFuture = _controller.initialize().then((_) {
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: widget.play,
looping: loop,
autoInitialize: true,
aspectRatio: aRatio);
},
);
});
if (widget.play) {
chewieController.videoPlayerController.play();
chewieController.videoPlayerController.setLooping(loop);
}
}
@override
Widget build(BuildContext context) {
Get.log("${widget.play} feed");
return 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...