Commit 0d0b5e08d3390fa1f358c9f23ed921e93cbbfb83

Authored by wdn127929
2 parents 3fdf8c89 f327abe0

Merge branch 'v5.0.2+' of http://123.56.79.57/xt/Flutter-ReserveApp into v5.0.2+

... ... @@ -3,3 +3,4 @@ org.gradle.jvmargs=-Xmx1536M
android.enableR8=true
android.useAndroidX=true
android.enableJetifier=true
# android.jetifier.blacklist=bcprov-jdk15on
... ...

10.6 KB | W: | H:

6.27 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin
... ... @@ -3,7 +3,7 @@
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objectVersion = 50;
objects = {
/* Begin PBXBuildFile section */
... ... @@ -525,7 +525,7 @@
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
MARKETING_VERSION = 5.0.0;
MARKETING_VERSION = 5.0.2;
PRODUCT_BUNDLE_IDENTIFIER = com.naji.reserveLine;
PRODUCT_NAME = Runner;
PROVISIONING_PROFILE_SPECIFIER = "";
... ... @@ -671,7 +671,7 @@
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
MARKETING_VERSION = 5.0.0;
MARKETING_VERSION = 5.0.2;
PRODUCT_BUNDLE_IDENTIFIER = com.naji.reserveLine;
PRODUCT_NAME = Runner;
PROVISIONING_PROFILE_SPECIFIER = "";
... ... @@ -707,7 +707,7 @@
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
MARKETING_VERSION = 5.0.0;
MARKETING_VERSION = 5.0.2;
PRODUCT_BUNDLE_IDENTIFIER = com.naji.reserveLine;
PRODUCT_NAME = Runner;
PROVISIONING_PROFILE_SPECIFIER = "";
... ...
... ... @@ -47,6 +47,10 @@ class CommentsSunModel {
String isnoshow;
Reply reply;
String ddate;
String ddateSolt;
String tableinfo;
String get createTimeStr {
DateTime dateTime = DateTime.fromMillisecondsSinceEpoch(
int.parse(createTime.toString()) * 1000);
... ... @@ -67,7 +71,10 @@ class CommentsSunModel {
this.createTime,
this.enclosure,
this.isnoshow,
this.reply});
this.reply,
this.ddate,
this.ddateSolt,
this.tableinfo});
CommentsSunModel.fromJson(Map<String, dynamic> json) {
id = json['id'];
... ... @@ -93,6 +100,10 @@ class CommentsSunModel {
isnoshow = json['isnoshow'];
reply = json['reply'] != null ? new Reply.fromJson(json['reply']) : null;
ddate = json['ddate'];
ddateSolt = json['ddate_solt'];
tableinfo = json['tableinfo'];
}
Map<String, dynamic> toJson() {
... ... @@ -116,6 +127,10 @@ class CommentsSunModel {
if (this.enclosure != null) {
data['enclosure'] = jsonEncode(this.enclosure);
}
data['ddate'] = this.ddate;
data['ddate_solt'] = this.ddateSolt;
data['tableinfo'] = this.tableinfo;
return data;
}
}
... ... @@ -194,6 +209,7 @@ class CommentsImageModel {
ImageInfo imageInfo;
ImageAve imageAve;
String url;
String avinfo;
CommentsImageModel(
{this.key,
... ... @@ -203,7 +219,8 @@ class CommentsImageModel {
this.exif,
this.imageInfo,
this.imageAve,
this.url});
this.url,
this.avinfo});
CommentsImageModel.fromJson(Map<String, dynamic> json) {
key = json['key'];
... ... @@ -218,6 +235,7 @@ class CommentsImageModel {
? new ImageAve.fromJson(json['imageAve'])
: null;
url = json['url'];
avinfo =json['avinfo'] == null ? null : jsonEncode(json['avinfo']);
}
Map<String, dynamic> toJson() {
... ... @@ -234,6 +252,8 @@ class CommentsImageModel {
data['imageAve'] = this.imageAve.toJson();
}
data['url'] = this.url;
data['avinfo'] = this.avinfo;
return data;
}
}
... ...
... ... @@ -319,6 +319,10 @@ class MarkMarketingModel {
List<CouponSunModel> couponDataList;
String isComments;
String isCommentsCoupon;
List<CouponSunModel> couponDataListComments;
MarkMarketingModel(
{this.isArrival,
this.isLink,
... ... @@ -328,7 +332,12 @@ class MarkMarketingModel {
this.logo,
this.wecomle,
this.isCoupon,
this.isRecharge});
this.isRecharge,
this.rechargeData,
this.couponDataList,
this.isComments,
this.isCommentsCoupon,
this.couponDataListComments});
MarkMarketingModel.fromJson(Map<String, dynamic> json) {
isTranspond = json['is_transpond'];
... ... @@ -365,6 +374,32 @@ class MarkMarketingModel {
}
}
}
isComments = json['is_comments'];
isCommentsCoupon = json['is_comments_coupon'];
if (json['coupon_data_comments'] != null) {
couponDataListComments = <CouponSunModel>[];
if (json['coupon_data_comments'] is Map) {
//旧数据map
couponDataListComments
.add(CouponSunModel.fromJson(json['coupon_data_comments']));
} else {
var couponData = convert.jsonDecode(json['coupon_data_comments']);
if (couponData is List) {
couponData.forEach((v) {
couponDataListComments.add(CouponSunModel.fromJson(v));
});
} else if (couponData is Map) {
// json['coupon_data'].forEach((v) {
couponDataListComments.add(CouponSunModel.fromJson(couponData));
// });
} else {
couponData.forEach((v) {
couponDataListComments.add(v);
});
}
}
}
}
Map<String, dynamic> toJson() {
... ... @@ -380,6 +415,9 @@ class MarkMarketingModel {
data['is_recharge'] = this.isRecharge;
data['recharge_data'] = this.rechargeData;
data['coupon_data'] = this.couponDataList;
data['is_comments'] = this.isComments;
data['is_comments_coupon'] = this.isCommentsCoupon;
data['coupon_data_comments'] = this.couponDataListComments;
return data;
}
... ...
... ... @@ -48,6 +48,9 @@ class _CouponSettingPageState extends State<CouponSettingPage> {
String rechargeContent = '';
List<CouponSunModel> couponDataList = [];
bool isComments = false; //启用评价设置
bool isCommentsCoupon = false; //启用评价送券
List<CouponSunModel> couponDataListComments = [];
@override
void initState() {
super.initState();
... ... @@ -93,7 +96,18 @@ class _CouponSettingPageState extends State<CouponSettingPage> {
marketingCenterProvider.markDataModel.marketing.rechargeData;
couponDataList =
marketingCenterProvider.markDataModel.marketing.couponDataList ?? [];
couponDataListComments = marketingCenterProvider
.markDataModel.marketing.couponDataListComments ??
[];
isComments =
marketingCenterProvider.markDataModel.marketing.isComments == '1'
? true
: false;
isCommentsCoupon =
marketingCenterProvider.markDataModel.marketing.isCommentsCoupon ==
'1'
? true
: false;
qiniuUrl = marketingCenterProvider.markDataModel.marketing.logo ?? null;
welcome = marketingCenterProvider.markDataModel.marketing.wecomle;
... ... @@ -118,7 +132,10 @@ class _CouponSettingPageState extends State<CouponSettingPage> {
'wecomle': welcome ?? '',
'logo': qiniuUrl,
'recharge_data': rechargeData,
'coupon_data': json.encode(couponDataList)
'coupon_data': json.encode(couponDataList),
'is_comments': isComments ? '1' : '0',
'is_comments_coupon': isCommentsCoupon ? '1' : '0',
'coupon_data_comments': json.encode(couponDataListComments),
};
Map<String, String> params = {
'sid': Provider.of<UserModel>(context, listen: false).user.sellerid,
... ... @@ -421,7 +438,7 @@ class _CouponSettingPageState extends State<CouponSettingPage> {
Map temp =
await NavigatorUtil.goMarkingCouponSelectPage(
context, {'object': couponDataList});
if (temp['coupon'] != null) {
if (temp != null && temp['coupon'] != null) {
couponDataList = temp['coupon'];
setState(() {});
... ...
import 'dart:ui';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:fijkplayer/fijkplayer.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:one_key/models/comments_label_model.dart';
import 'package:one_key/models/comments_model.dart';
import 'package:one_key/pages/my/comment_manage/input_buttom_widget.dart';
import 'package:one_key/pages/my/comment_manage/pop_route.dart';
import 'package:one_key/pages/my/comment_manage/video_page.dart';
import 'package:one_key/provider/user_model.dart';
import 'package:one_key/res/colors.dart';
import 'package:one_key/utils/dialog_util.dart';
... ... @@ -11,6 +17,7 @@ import 'package:one_key/widgets/round_button.dart';
import 'package:one_key/widgets/system_app_bar.dart';
import 'package:one_key/widgets/v_empty_view.dart';
import 'package:provider/provider.dart';
import 'package:video_player/video_player.dart';
import '../../../constant/state.dart';
import '../../../provider/comment_manage_provider.dart';
... ... @@ -19,7 +26,10 @@ import '../../../utils/screen_util.dart';
import '../../../utils/utils.dart';
import '../../../widgets/page_exception.dart';
import '../../online_check/photo_view_wiget.dart';
import 'package:sliding_up_panel2/sliding_up_panel2.dart';
// import 'package:chewie/chewie.dart';
// import 'package:fijkplayer/fijkplayer.dart';
// import 'package:video_thumbnail/video_thumbnail.dart';
import 'package:cached_video_player/cached_video_player.dart';
/**
* 评价管理
... ... @@ -36,7 +46,15 @@ class _CommentManageHomePageState extends State<CommentManageHomePage> {
Map<String, String> starTextMap = {};
bool allSelect = true;
String label = '';
bool showInput = false;
TextEditingController replyController = TextEditingController();
// 声明控制器(两个)
CachedVideoPlayerController videoPlayerController;
// ChewieController chewieController;
// final FijkPlayer player = FijkPlayer();
// VideoPlayerController _controller;
Future _initializeVideoPlayerFuture;
@override
void initState() {
super.initState();
... ... @@ -45,7 +63,7 @@ class _CommentManageHomePageState extends State<CommentManageHomePage> {
WidgetsBinding.instance.addPostFrameCallback((_) {
_getSellerComments(isShowLoading: false);
_getCountCommentLabel(isShowLoading: false);
// _getCountCommentLabel(isShowLoading: false);
});
}
... ... @@ -53,18 +71,20 @@ class _CommentManageHomePageState extends State<CommentManageHomePage> {
void dispose() {
bus.emit('changeStatusColor');
// videoPlayerController.dispose();
super.dispose();
}
///评价标签
_getCountCommentLabel({bool isShowLoading = true}) async {
Map<String, String> pramas = {
'sid': Provider.of<UserModel>(context, listen: false).user.sellerid,
};
// label
await commentManageProvider.getCountCommentLabel(context, pramas,
isShowLoading: isShowLoading);
}
// _getCountCommentLabel({bool isShowLoading = true}) async {
// Map<String, String> pramas = {
// 'sid': Provider.of<UserModel>(context, listen: false).user.sellerid,
// };
// // label
// await commentManageProvider.getCountCommentLabel(context, pramas,
// isShowLoading: isShowLoading);
// }
///评价列表
_getSellerComments({bool isShowLoading = true}) async {
... ... @@ -73,78 +93,97 @@ class _CommentManageHomePageState extends State<CommentManageHomePage> {
'scene': '3',
'status': '1'
};
if (label != '') {
pramas['label'] = label;
}
// if (label != '') {
// pramas['label'] = label;
// }
await commentManageProvider.getSellerComments(context, pramas,
isShowLoading: isShowLoading);
}
List<Widget> _labelWidget() {
List<Widget> data = [];
data.add(InkWell(
onTap: () {
allSelect = true;
commentManageProvider.commentsLabeldata.forEach((element) {
element.select = false;
});
setState(() {});
label = '';
_getSellerComments(isShowLoading: true);
},
child: Container(
padding: EdgeInsets.symmetric(horizontal: w(8), vertical: w(3)),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(r(10)),
color: allSelect
? MyColours.color_33438E93
: MyColours.color_F8F7F3),
child: Text(
'全部',
style: TextStyle(
fontSize: font(14),
color: allSelect
? MyColours.color_438E93
: MyColours.color_515151),
),
)));
for (int i = 0; i < commentManageProvider.commentsLabeldata.length; i++) {
CommentsLabelSunModel sunModel =
commentManageProvider.commentsLabeldata[i];
data.add(InkWell(
onTap: () {
commentManageProvider.commentsLabeldata.forEach((element) {
element.select = false;
});
allSelect = false;
sunModel.select = true;
setState(() {});
label = sunModel.name;
_getSellerComments(isShowLoading: true);
},
child: Container(
padding: EdgeInsets.symmetric(horizontal: w(8), vertical: w(3)),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(r(10)),
color: sunModel.select
? MyColours.color_33438E93
: MyColours.color_F8F7F3),
child: Text(
sunModel.name,
style: TextStyle(
fontSize: font(14),
color: sunModel.select
? MyColours.color_438E93
: MyColours.color_515151),
),
)));
_setComment(String pid, String rid, String text,
{bool isShowLoading = true}) async {
Map<String, String> pramas = {
'sid': Provider.of<UserModel>(context, listen: false).user.sellerid,
'identity': '0',
'pid': pid,
'rid': rid,
'text': text,
};
bool success = await commentManageProvider.setComment(context, pramas,
isShowLoading: isShowLoading);
if (success) {
//成功 刷新列表
_getSellerComments(isShowLoading: false);
}
return data;
}
// List<Widget> _labelWidget() {
// List<Widget> data = [];
// data.add(InkWell(
// onTap: () {
// allSelect = true;
// commentManageProvider.commentsLabeldata.forEach((element) {
// element.select = false;
// });
// setState(() {});
// label = '';
// _getSellerComments(isShowLoading: true);
// },
// child: Container(
// padding: EdgeInsets.symmetric(horizontal: w(8), vertical: w(3)),
// decoration: BoxDecoration(
// borderRadius: BorderRadius.circular(r(10)),
// color: allSelect
// ? MyColours.color_33438E93
// : MyColours.color_F8F7F3),
// child: Text(
// '全部',
// style: TextStyle(
// fontSize: font(14),
// color: allSelect
// ? MyColours.color_438E93
// : MyColours.color_515151),
// ),
// )));
// for (int i = 0; i < commentManageProvider.commentsLabeldata.length; i++) {
// CommentsLabelSunModel sunModel =
// commentManageProvider.commentsLabeldata[i];
// data.add(InkWell(
// onTap: () {
// commentManageProvider.commentsLabeldata.forEach((element) {
// element.select = false;
// });
// allSelect = false;
// sunModel.select = true;
// setState(() {});
// label = sunModel.name;
// _getSellerComments(isShowLoading: true);
// },
// child: Container(
// padding: EdgeInsets.symmetric(horizontal: w(8), vertical: w(3)),
// decoration: BoxDecoration(
// borderRadius: BorderRadius.circular(r(10)),
// color: sunModel.select
// ? MyColours.color_33438E93
// : MyColours.color_F8F7F3),
// child: Text(
// sunModel.name,
// style: TextStyle(
// fontSize: font(14),
// color: sunModel.select
// ? MyColours.color_438E93
// : MyColours.color_515151),
// ),
// )));
// }
// return data;
// }
/// 九宫格
Widget _getGridImg(List<CommentsImageModel> imags) {
imags.removeWhere((element) => element.url == null || element.url == '');
return GridView.builder(
controller: controller,
padding: EdgeInsets.symmetric(vertical: w(7)),
... ... @@ -162,9 +201,63 @@ class _CommentManageHomePageState extends State<CommentManageHomePage> {
//子组件宽高长度比例
childAspectRatio: 1.0),
itemBuilder: (BuildContext context, int index) {
if (imags[index].avinfo != null) {
videoPlayerController =
CachedVideoPlayerController.network(imags[index].url);
videoPlayerController.setLooping(false);
_initializeVideoPlayerFuture = videoPlayerController.initialize();
//视频
return InkWell(
onTap: () {
Navigator.push(
context,
PopRoute(
child: VideoPage(
url: imags[index].url,
)));
},
child: Stack(alignment: Alignment.center, children: [
ClipRRect(
borderRadius: BorderRadius.circular(r(8)),
child: FutureBuilder(
//显示缩略图
future: _initializeVideoPlayerFuture,
builder: (context, snapshot) {
print(snapshot.connectionState);
if (snapshot.hasError) print(snapshot.error);
if (snapshot.connectionState ==
ConnectionState.done) {
return AspectRatio(
aspectRatio: 1 / 1,
// aspectRatio: _controller.value.aspectRatio,
// child: VideoPlayer(videoPlayerController),
child:
CachedVideoPlayer(videoPlayerController));
} else {
return Center(
child: CircularProgressIndicator(),
);
}
},
)),
Positioned(
child: Image.asset(
Utils.getImgPath('play'),
width: w(20),
))
]));
}
return InkWell(
onTap: () {
List<String> images = imags.map((e) => e.url).toList();
List<String> images = [];
imags.forEach((element) {
if (!element.mimeType.startsWith('video')) {
images.add(element.url);
}
});
_showPhotoView(context, index, images);
},
child: ClipRRect(
... ... @@ -224,7 +317,7 @@ class _CommentManageHomePageState extends State<CommentManageHomePage> {
return ExceptionPage(
pageState: model.pageState,
callback: () async {
_getCountCommentLabel();
// _getCountCommentLabel();
_getSellerComments();
},
emptyMsg: "暂时没有评论列表信息哦",
... ... @@ -237,13 +330,13 @@ class _CommentManageHomePageState extends State<CommentManageHomePage> {
padding: EdgeInsets.symmetric(horizontal: w(20)),
child: Column(
children: [
Container(
child: Wrap(
runSpacing: w(10),
spacing: w(10),
children: _labelWidget()),
),
VEmptyView(10),
// Container(
// child: Wrap(
// runSpacing: w(10),
// spacing: w(10),
// children: _labelWidget()),
// ),
// VEmptyView(10),
Expanded(
child: ListView.builder(
itemCount:
... ... @@ -253,287 +346,295 @@ class _CommentManageHomePageState extends State<CommentManageHomePage> {
itemBuilder: (context, index) {
CommentsSunModel sunModel =
commentManageProvider.commentsData[index];
return Container(
margin: EdgeInsets.only(top: w(10)),
decoration: BoxDecoration(
border: Border(
bottom: BorderSide(
width: w(0.5),
color: MyColours.color_DBDBDB))),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
width: w(50),
height: w(50),
margin: EdgeInsets.only(
left: w(8),
right: w(8),
top: w(20)),
child: ClipRRect(
borderRadius:
BorderRadius.circular(w(50)),
child: sunModel.authorImage !=
null &&
sunModel.authorImage != ''
? CachedNetworkImage(
imageUrl:
sunModel.authorImage,
width: w(50),
height: w(50),
)
: Container(
width: w(50),
height: w(50),
decoration: BoxDecoration(
color: MyColours
.color_d9d9d9,
borderRadius:
BorderRadius
.circular(
r(50))),
))),
HEmptyView(34),
Expanded(
child: Padding(
padding: EdgeInsets.symmetric(
vertical: w(4)),
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Row(
children: [
return Stack(children: [
Container(
margin: EdgeInsets.only(top: w(10)),
decoration: BoxDecoration(
border: Border(
bottom: BorderSide(
width: w(0.5),
color: MyColours.color_DBDBDB))),
child: Row(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Container(
width: w(50),
height: w(50),
margin: EdgeInsets.only(
left: w(8),
right: w(8),
top: w(20)),
child: ClipRRect(
borderRadius:
BorderRadius.circular(w(50)),
child: sunModel.authorImage !=
null &&
sunModel.authorImage != ''
? CachedNetworkImage(
imageUrl:
sunModel.authorImage,
width: w(50),
height: w(50),
)
: Container(
width: w(50),
height: w(50),
decoration: BoxDecoration(
color: MyColours
.color_d9d9d9,
borderRadius:
BorderRadius
.circular(
r(50))),
))),
HEmptyView(34),
Expanded(
child: Padding(
padding: EdgeInsets.symmetric(
vertical: w(4)),
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Row(
children: [
Container(
padding: EdgeInsets
.symmetric(
vertical:
w(4)),
constraints:
BoxConstraints(
maxWidth:
w(120)),
child: Text(
sunModel.author ??
'',
maxLines: 10,
overflow:
TextOverflow
.ellipsis,
style: TextStyle(
fontSize:
font(14),
fontWeight:
FontWeight
.bold,
color: MyColours
.color_515151),
)),
// Spacer(),
// Container(
// width: w(75),
// height: w(24),
// child: ListView
// .builder(
// itemCount:
// 5,
// shrinkWrap:
// true,
// scrollDirection:
// Axis
// .horizontal,
// itemBuilder:
// (context,
// index) {
// return CachedNetworkImage(
// imageUrl: index <=
// int.parse(sunModel.grade) - 1
// ? 'http://nosqn.colorcun.com/pinglun/p%20%283%29.png'
// : 'http://nosqn.colorcun.com/pinglun/p%20%284%29.png',
// width: w(
// 15),
// );
// })),
// HEmptyView(3),
// Container(
// padding: EdgeInsets
// .symmetric(
// vertical:
// w(4)),
// child: Text(
// starTextMap[
// '${sunModel.grade}'] ??
// '',
// maxLines: 2,
// overflow:
// TextOverflow
// .ellipsis,
// style: TextStyle(
// fontSize:
// font(12),
// color: MyColours
// .color_999999),
// )),
],
),
VEmptyView(8),
Container(
padding: EdgeInsets
.symmetric(
vertical: w(4)),
child: Text(
'就餐于 ${sunModel.ddate ?? ''} ${sunModel.ddateSolt ?? ""} ${sunModel.tableinfo ?? ''}',
maxLines: 10,
overflow: TextOverflow
.ellipsis,
style: TextStyle(
fontSize:
font(12),
color: MyColours
.color_999999),
)),
Container(
padding: EdgeInsets
.symmetric(
vertical: w(4)),
child: Text(
'发表于 ${sunModel.createTimeStr}',
maxLines: 10,
overflow: TextOverflow
.ellipsis,
style: TextStyle(
fontSize:
font(12),
color: MyColours
.color_999999),
)),
VEmptyView(8),
if (sunModel.text != null &&
sunModel.text.length >
0)
Container(
padding: EdgeInsets
.symmetric(
vertical:
w(4)),
constraints:
BoxConstraints(
maxWidth:
w(120)),
child: Text(
sunModel.author ??
'',
maxLines: 10,
overflow:
TextOverflow
.ellipsis,
sunModel.text ?? '',
style: TextStyle(
height: 1.8,
fontSize:
font(14),
fontWeight:
FontWeight
.bold,
font(12),
color: MyColours
.color_515151),
)),
Spacer(),
Container(
width: w(75),
height: w(24),
child:
ListView.builder(
itemCount: 5,
shrinkWrap:
true,
scrollDirection:
Axis
.horizontal,
itemBuilder:
(context,
index) {
return Image
.asset(
Utils.getImgPath(index <=
int.parse(sunModel.grade) - 1
? 'zwzp'
: 'apple'),
width:
w(15),
);
})),
Container(
padding: EdgeInsets
.symmetric(
vertical:
w(4)),
child: Text(
starTextMap[
'${sunModel.grade}'] ??
'',
maxLines: 2,
overflow:
TextOverflow
.ellipsis,
style: TextStyle(
fontSize:
font(12),
// Container(
// padding: EdgeInsets
// .symmetric(
// vertical: w(4)),
// child: Text(
// '#${sunModel.evalLabel ?? ''}',
// style: TextStyle(
// height: 1.8,
// fontSize:
// font(12),
// color: MyColours
// .color_438E93),
// )),
if (sunModel
.enclosure.length >
0)
_getGridImg(
sunModel.enclosure),
VEmptyView(8),
sunModel.reply != null
? Container(
width:
double.infinity,
padding:
EdgeInsets.all(
w(4)),
decoration: BoxDecoration(
color: MyColours
.color_999999),
)),
],
),
VEmptyView(8),
Container(
padding:
EdgeInsets.symmetric(
vertical: w(4)),
child: Text(
'就餐于 2023-8-24 午餐 二楼205',
maxLines: 10,
overflow: TextOverflow
.ellipsis,
style: TextStyle(
fontSize: font(12),
color: MyColours
.color_999999),
)),
Container(
padding:
EdgeInsets.symmetric(
vertical: w(4)),
child: Text(
'发表于 ${sunModel.createTimeStr}',
maxLines: 10,
overflow: TextOverflow
.ellipsis,
style: TextStyle(
fontSize: font(12),
color: MyColours
.color_999999),
)),
VEmptyView(8),
if (sunModel.text != null &&
sunModel.text.length > 0)
Container(
padding: EdgeInsets
.symmetric(
vertical: w(4)),
child: Text(
sunModel.text ?? '',
style: TextStyle(
height: 1.8,
fontSize:
font(12),
color: MyColours
.color_515151),
)),
Container(
padding:
EdgeInsets.symmetric(
vertical: w(4)),
child: Text(
'#${sunModel.evalLabel ?? ''}',
style: TextStyle(
height: 1.8,
fontSize: font(12),
color: MyColours
.color_438E93),
)),
if (sunModel
.enclosure.length >
0)
_getGridImg(
sunModel.enclosure),
VEmptyView(8),
sunModel.reply != null
? Container(
width:
double.infinity,
padding:
EdgeInsets.all(
w(4)),
decoration: BoxDecoration(
color: MyColours
.color_33438E93,
borderRadius:
BorderRadius
.circular(
r(8))),
child: Column(
crossAxisAlignment:
CrossAxisAlignment
.start,
children: [
Text(
'回复内容',
style: TextStyle(
color: MyColours
.color_515151,
fontWeight:
FontWeight
.bold,
fontSize:
font(
12)),
),
VEmptyView(6),
Container(
padding: EdgeInsets
.symmetric(
vertical:
w(4)),
child: Text(
sunModel.reply
.text ??
"",
style: TextStyle(
height:
1.8,
fontSize:
font(
12),
color: MyColours
.color_515151),
)),
],
),
)
:
// showInput
// ? SlidingUpPanel(
// panel: Center(
// child: Text(
// "This is the sliding Widget"),
// ),
// )
// :
Align(
alignment: Alignment
.centerRight,
child: RoundButton(
text: '回复',
width: w(54),
height: w(24),
gradientStart:
MyColours
.color_ffffff,
gradientEnd: MyColours
.color_ffffff,
textColor: MyColours
.color_000000,
fontSize: 24,
borderColor: MyColours
.color_999999,
radius: r(15),
onPressed: () {
setState(() {
showInput =
!showInput;
});
DialogUtil
.openCommentsModalBottomSheet(
context);
},
.color_33438E93,
borderRadius:
BorderRadius
.circular(
r(8))),
child: Column(
crossAxisAlignment:
CrossAxisAlignment
.start,
children: [
Text(
'回复内容',
style: TextStyle(
color: MyColours
.color_515151,
fontWeight:
FontWeight
.bold,
fontSize:
font(
12)),
),
VEmptyView(6),
Container(
padding: EdgeInsets.symmetric(
vertical:
w(4)),
child: Text(
sunModel.reply
.text ??
"",
style: TextStyle(
height:
1.8,
fontSize: font(
12),
color:
MyColours.color_515151),
)),
],
),
)
: Align(
alignment: Alignment
.centerRight,
child: RoundButton(
text: '回复',
width: w(54),
height: w(24),
gradientStart:
MyColours
.color_ffffff,
gradientEnd: MyColours
.color_ffffff,
textColor: MyColours
.color_000000,
fontSize: 24,
borderColor: MyColours
.color_999999,
radius: r(15),
onPressed: () {
Navigator.push(
context,
PopRoute(child:
InputButtomWidget(
onEditingCompleteText:
(text) {
print(
'点击发送 ---$text');
_setComment(
sunModel
.id,
sunModel
.rid,
text,
);
},
)));
},
),
),
),
VEmptyView(26),
]))),
],
VEmptyView(26),
]))),
],
),
),
);
]);
}))
],
));
... ...
import 'package:flutter/material.dart';
import '../../../res/colors.dart';
import '../../../utils/screen_util.dart';
import '../../../widgets/h_empty_view.dart';
import '../../../widgets/round_button.dart';
class InputButtomWidget extends StatefulWidget {
final ValueChanged onEditingCompleteText;
InputButtomWidget({Key key, this.onEditingCompleteText}) : super(key: key);
@override
_InputButtomWidgetState createState() => _InputButtomWidgetState();
}
class _InputButtomWidgetState extends State<InputButtomWidget> {
final TextEditingController controller = TextEditingController();
@override
Widget build(BuildContext context) {
return new Scaffold(
backgroundColor: Colors.transparent,
body: new Column(
children: <Widget>[
Expanded(
child: new GestureDetector(
child: new Container(
color: Colors.transparent,
),
onTap: () {
Navigator.pop(context);
},
)),
new Container(
color: Color(0xFFF4F4F4),
padding: EdgeInsets.only(left: 16, top: 8, bottom: 8, right: 16),
child: Row(children: [
// Container(
// decoration: BoxDecoration(color: Colors.white),
// child: TextField(
// controller: controller,
// autofocus: true,
// style: TextStyle(fontSize: 16),
// //设置键盘按钮为发送
// textInputAction: TextInputAction.send,
// keyboardType: TextInputType.multiline,
// onEditingComplete: () {
// //点击发送调用
// print('onEditingComplete');
// onEditingCompleteText(controller.text);
// Navigator.pop(context);
// },
// decoration: InputDecoration(
// hintText: '评论',
// isDense: true,
// contentPadding: EdgeInsets.only(
// left: 10, top: 5, bottom: 5, right: 10),
// border: const OutlineInputBorder(
// gapPadding: 0,
// borderSide: BorderSide(
// width: 0,
// style: BorderStyle.none,
// ),
// ),
// ),
// minLines: 1,
// maxLines: 5,
// ),
// ),
Expanded(
child: Container(
decoration: BoxDecoration(
color: MyColours.color_ffffff,
borderRadius: BorderRadius.circular(r(8))),
padding:
EdgeInsets.symmetric(horizontal: w(4), vertical: 0),
child: TextField(
controller: controller,
minLines: 1,
maxLines: 5,
autofocus: true,
// //光标颜色
// cursorColor:
// widget.isSelect ? Colors.white : MyColours.color_199095,
//输入文本的样式
// inputFormatters: lenghtLimit
// ? [
// LengthLimitingTextInputFormatter(10),
// ]
// : [],
// textAlignVertical: TextAlignVertical.center,
textAlign: TextAlign.left,
style: TextStyle(
fontSize: font(14),
),
decoration: InputDecoration(
contentPadding: EdgeInsets.zero,
border:
OutlineInputBorder(borderSide: BorderSide.none),
hintText: '评论',
hintStyle: TextStyle(
color: MyColours.color_999999,
fontSize: font(14),
),
enabledBorder: new UnderlineInputBorder(
borderSide: BorderSide.none,
),
focusedBorder: new UnderlineInputBorder(
borderSide: BorderSide.none,
),
),
onChanged: (value) {
// name = value;
setState(() {});
},
//设置键盘按钮为发送
// textInputAction: TextInputAction.send,
keyboardType: TextInputType.multiline,
onEditingComplete: () {
//点击发送调用
// print('onEditingComplete');
// onEditingCompleteText(controller.text);
// Navigator.pop(context);
},
))),
HEmptyView(20),
RoundButton(
text: '发送',
width: w(54),
height: w(28),
gradientStart: controller.text.trim().length > 0
? MyColours.color_438E93
: MyColours.color_ffffff,
gradientEnd: controller.text.trim().length > 0
? MyColours.color_438E93
: MyColours.color_ffffff,
textColor: controller.text.trim().length > 0
? MyColours.color_F8F9FD
: MyColours.color_999999,
fontSize: 24,
borderColor: controller.text.trim().length > 0
? MyColours.color_438E93
: MyColours.color_999999,
radius: r(15),
onPressed: () {
if (controller.text.trim().length == 0) {
return;
}
print('onEditingComplete');
widget.onEditingCompleteText(controller.text);
Navigator.pop(context);
},
),
]))
],
),
);
}
}
... ...
//过度路由
import 'package:flutter/material.dart';
class PopRoute extends PopupRoute{
final Duration _duration = Duration(milliseconds: 300);
Widget child;
PopRoute({@required this.child});
@override
Color get barrierColor => null;
@override
bool get barrierDismissible => true;
@override
String get barrierLabel => null;
@override
Widget buildPage(BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation) {
return child;
}
@override
Duration get transitionDuration => _duration;
}
... ...
import 'package:fijkplayer/fijkplayer.dart';
import 'package:flutter/material.dart';
import 'package:one_key/res/colors.dart';
import 'package:one_key/widgets/system_app_bar.dart';
// import 'custom_ui.dart';
class VideoPage extends StatefulWidget {
final String url;
VideoPage({this.url});
@override
_VideoPageState createState() => _VideoPageState();
}
class _VideoPageState extends State<VideoPage> {
final FijkPlayer player = FijkPlayer();
_VideoPageState();
@override
void initState() {
super.initState();
player.setOption(FijkOption.hostCategory, "enable-snapshot", 1);
player.setOption(FijkOption.playerCategory, "mediacodec-all-videos", 1);
startPlay();
}
void startPlay() async {
await player.setOption(FijkOption.hostCategory, "request-screen-on", 1);
await player.setOption(FijkOption.hostCategory, "request-audio-focus", 1);
await player.setDataSource(widget.url, autoPlay: true).catchError((e) {
print("setDataSource error: $e");
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: SystemAppBar("评价管理"),
body: Container(
child: Center(
child: FijkView(
color: MyColours.color_000000,
player: player,
panelBuilder: fijkPanel2Builder(snapShot: true),
fsFit: FijkFit.fill,
// panelBuilder: simplestUI,
// panelBuilder: (FijkPlayer player, BuildContext context,
// Size viewSize, Rect texturePos) {
// return CustomFijkPanel(
// player: player,
// buildContext: context,
// viewSize: viewSize,
// texturePos: texturePos);
// },
),
),
),
);
}
@override
void dispose() {
super.dispose();
player.release();
}
}
... ...
... ... @@ -31,7 +31,10 @@ import '../../../../models/coupon_model.dart';
*/
class MarkingCouponSelectPage extends StatefulWidget {
final List<CouponSunModel> couponList;
MarkingCouponSelectPage({Key key, this.couponList}) : super(key: key);
final bool mulSelect;
MarkingCouponSelectPage({Key key, this.couponList, this.mulSelect = true})
: super(key: key);
@override
_MarkingCouponSelectPageState createState() =>
... ... @@ -92,7 +95,6 @@ class _MarkingCouponSelectPageState extends State<MarkingCouponSelectPage> {
@override
void dispose() {
super.dispose();
}
... ... @@ -140,23 +142,28 @@ class _MarkingCouponSelectPageState extends State<MarkingCouponSelectPage> {
return InkWell(
onTap: () {
//改这里 ******8
// couponProvider.couponListSelect
// .forEach((element) {
// element.isCheck = false;
// });
// couponProvider.couponListSelect[index].isCheck =
// true;
couponProvider.couponListSelect[index].isCheck =
!couponProvider
.couponListSelect[index].isCheck;
if (couponProvider
.couponListSelect[index].isCheck) {
selectDataList.add(
couponProvider.couponListSelect[index]);
if (widget.mulSelect) {
couponProvider.couponListSelect[index].isCheck =
!couponProvider
.couponListSelect[index].isCheck;
if (couponProvider
.couponListSelect[index].isCheck) {
selectDataList.add(
couponProvider.couponListSelect[index]);
} else {
selectDataList.remove(
couponProvider.couponListSelect[index]);
}
} else {
selectDataList.remove(
couponProvider.couponListSelect
.forEach((element) {
element.isCheck = false;
});
selectDataList = [];
selectDataList.add(
couponProvider.couponListSelect[index]);
couponProvider.couponListSelect[index].isCheck =
true;
}
setState(() {});
... ... @@ -188,21 +195,30 @@ class _MarkingCouponSelectPageState extends State<MarkingCouponSelectPage> {
// bool old = couponProvider
// .couponListSelect[index].isCheck;
//改这里 ******8
couponProvider
.couponListSelect[index].isCheck =
!couponProvider
.couponListSelect[index].isCheck;
if (couponProvider
.couponListSelect[index].isCheck) {
selectDataList.add(
couponProvider.couponListSelect[index]);
if (widget.mulSelect) {
couponProvider
.couponListSelect[index].isCheck =
!couponProvider
.couponListSelect[index].isCheck;
if (couponProvider
.couponListSelect[index].isCheck) {
selectDataList.add(couponProvider
.couponListSelect[index]);
} else {
selectDataList.remove(couponProvider
.couponListSelect[index]);
}
} else {
selectDataList.remove(
couponProvider.couponListSelect
.forEach((element) {
element.isCheck = false;
});
selectDataList = [];
selectDataList.add(
couponProvider.couponListSelect[index]);
couponProvider
.couponListSelect[index].isCheck = true;
}
// couponProvider
// .couponListSelect[index].isCheck = !old;
setState(() {});
}));
}, childCount: couponProvider.couponListSelect.length),
... ...
... ... @@ -58,6 +58,9 @@ class _MarkingInteractionPageState extends State<MarkingInteractionPage> {
String rechargeContent = '';
List<CouponSunModel> couponDataList = [];
bool isComments = false; //启用评价设置
bool isCommentsCoupon = false; //启用评价送券
List<CouponSunModel> couponDataListComments = [];
List<RechargeListSunModel> rechargeListCanUse = [];
ScrollController controller = ScrollController();
... ... @@ -162,6 +165,18 @@ class _MarkingInteractionPageState extends State<MarkingInteractionPage> {
marketingCenterProvider.markDataModel.marketing.rechargeData;
couponDataList =
marketingCenterProvider.markDataModel.marketing.couponDataList ?? [];
couponDataListComments = marketingCenterProvider
.markDataModel.marketing.couponDataListComments ??
[];
isComments =
marketingCenterProvider.markDataModel.marketing.isComments == '1'
? true
: false;
isCommentsCoupon =
marketingCenterProvider.markDataModel.marketing.isCommentsCoupon ==
'1'
? true
: false;
_uploadImageProvider.firstImage.qiniuUrl =
marketingCenterProvider.markDataModel.marketing.logo ?? null;
... ... @@ -1122,7 +1137,10 @@ class _MarkingInteractionPageState extends State<MarkingInteractionPage> {
'wecomle': welcomeTextC.text ?? '',
'logo': _uploadImageProvider.firstImage.qiniuUrl,
'recharge_data': rechargeData,
'coupon_data': json.encode(couponDataList)
'coupon_data': json.encode(couponDataList),
'is_comments': isComments ? '1' : '0',
'is_comments_coupon': isCommentsCoupon ? '1' : '0',
'coupon_data_comments': json.encode(couponDataListComments),
};
Map<String, String> params = {
'sid': Provider.of<UserModel>(context, listen: false)
... ...
... ... @@ -451,13 +451,13 @@ class _MarkingPreviewPageState extends State<MarkingPreviewPage> {
margin: EdgeInsets.symmetric(horizontal: w(20)),
padding: EdgeInsets.symmetric(horizontal: w(15), vertical: w(12)),
decoration: BoxDecoration(
color: MyColours.color_d9d9d9,
color: MyColours.color_F8F9FD,
borderRadius: BorderRadius.circular(r(5))),
child: Row(
children: [
Image.asset(
Utils.getImgPath('location_blue'),
width: w(36),
width: w(30),
),
HEmptyView(28),
Expanded(
... ... @@ -1539,6 +1539,33 @@ class _MarkingPreviewPageState extends State<MarkingPreviewPage> {
'1')
? _rechargeWiddget()
: SizedBox(),
_marketingCenterProvider.markDataModel.marketing != null &&
(_marketingCenterProvider
.markDataModel.marketing.isComments ==
'1')
? Container(
padding: EdgeInsets.symmetric(
horizontal: w(20), vertical: w(8)),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
_marketingCenterProvider.markDataModel
.marketing.isCommentsCoupon ==
'1'
? '想吐槽?戳这里填写意见反馈赢好礼!-->'
: '想吐槽?戳这里填写意见!-->',
style: TextStyle(
color: MyColours.color_000000,
fontSize: font(14)),
),
Image.asset(
Utils.getImgPath('comments'),
width: w(30),
)
],
))
: SizedBox(),
_marketingCenterProvider.markDataModel.marketing != null
? _logoWidget()
: SizedBox()
... ...
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/widgets/system_app_bar.dart';
import 'package:provider/provider.dart';
import '../../../models/coupon_model.dart';
import '../../../models/recharge_list_model.dart';
import '../../../provider/coupon_provider.dart';
import '../../../provider/marketing_center_provider.dart';
import '../../../provider/user_model.dart';
import '../../../res/colors.dart';
import '../../../route/navigator_util.dart';
import '../../../utils/screen_util.dart';
import '../../../utils/utils.dart';
import '../../../widgets/h_empty_view.dart';
import '../../../widgets/round_button.dart';
import '../../../widgets/v_empty_view.dart';
/**
* 优惠券设置页面
* */
class CommentsSettingPage extends StatefulWidget {
CommentsSettingPage({Key key}) : super(key: key);
@override
_CommentsSettingPageState createState() => _CommentsSettingPageState();
}
class _CommentsSettingPageState extends State<CommentsSettingPage> {
ScrollController controller = ScrollController();
CouponProvider couponProvider;
MarketingCenterProvider marketingCenterProvider;
bool isTranspond = false; //转发邀请函
bool isArrival = false; //确认到店
bool isOnlineBook = false; //在线预订
bool isOrder = false; //提前点餐
bool isLink = false; //充值优惠活动链接
bool isCoupon = false; // 代金券
bool isRecharge = false; //充值券
String welcome = '';
String qiniuUrl = '';
RechargeListSunModel rechargeData;
String rechargeContent = '';
List<CouponSunModel> couponDataList = [];
bool isComments = false; //启用评价设置
bool isCommentsCoupon = false; //启用评价送券
List<CouponSunModel> couponDataListComments = [];
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) async {
_couponNetworkData();
getSellerTemplateConf();
});
}
getSellerTemplateConf() async {
bool success = await marketingCenterProvider.getSellerTemplateConf(context);
if (success && marketingCenterProvider.markDataModel.marketing != null) {
isTranspond =
marketingCenterProvider.markDataModel.marketing.isTranspond == '1'
? true
: false;
isArrival =
marketingCenterProvider.markDataModel.marketing.isArrival == '1'
? true
: false;
isOnlineBook =
marketingCenterProvider.markDataModel.marketing.isOnlineBook == '1'
? true
: false;
isOrder = marketingCenterProvider.markDataModel.marketing.isOrder == '1'
? true
: false;
isLink = marketingCenterProvider.markDataModel.marketing.isLink == '1'
? true
: false;
isCoupon = marketingCenterProvider.markDataModel.marketing.isCoupon == '1'
? true
: false;
isRecharge =
marketingCenterProvider.markDataModel.marketing.isRecharge == '1'
? true
: false;
rechargeData =
marketingCenterProvider.markDataModel.marketing.rechargeData;
couponDataList =
marketingCenterProvider.markDataModel.marketing.couponDataList ?? [];
couponDataListComments = marketingCenterProvider
.markDataModel.marketing.couponDataListComments ??
[];
isCommentsCoupon =
marketingCenterProvider.markDataModel.marketing.isCommentsCoupon ==
'1'
? true
: false;
isComments =
marketingCenterProvider.markDataModel.marketing.isComments == '1'
? true
: false;
qiniuUrl = marketingCenterProvider.markDataModel.marketing.logo ?? null;
welcome = marketingCenterProvider.markDataModel.marketing.wecomle;
setState(() {});
}
}
///优惠券设置
_setCouponShow() async {
//接口
Map marketingData = {
// 'isTranspond': isTranspond ? '1' : '0', //转发同行客人
'is_transpond': '1', //转发同行客人
'is_arrival': isArrival ? '1' : '0', //确认到店
'is_online_book': isOnlineBook ? '1' : '0', //在线预订
'is_order': isOrder ? '1' : '0', //去点餐
'is_coupon': isCoupon ? '1' : '0', //代金券暂时
'is_recharge': isRecharge ? '1' : '0', //充值券暂时
'is_link': isLink ? '1' : '0',
'wecomle': welcome ?? '',
'logo': qiniuUrl,
'recharge_data': rechargeData,
'coupon_data': json.encode(couponDataList),
'is_comments': isComments ? '1' : '0',
'is_comments_coupon': isCommentsCoupon ? '1' : '0',
'coupon_data_comments': json.encode(couponDataListComments),
};
Map<String, String> params = {
'sid': Provider.of<UserModel>(context, listen: false).user.sellerid,
'marketing': json.encode(marketingData)
};
bool success = await marketingCenterProvider
.setSellerTemplateConf(context, params, showLoading: true);
if (success) {
// bus.emit('refresh_coupon_list_f');
Utils.showToast('保存成功');
Navigator.pop(context);
}
}
///获取优惠券列表数据(status == 1)
_couponNetworkData({bool isShowLoading = true}) async {
Map<String, String> params = {
"uid": Provider.of<UserModel>(context, listen: false).user.openid,
};
params['status'] = '1';
await couponProvider.getCustomerSelectActivityMarking(context, params,
isShowLoading: isShowLoading);
if (couponDataListComments == null || couponDataListComments.length == 0) {
if (couponProvider.couponListSelect != null &&
couponProvider.couponListSelect.length > 0) {
couponDataListComments.add(couponProvider.couponListSelect[0]);
}
}
setState(() {});
}
///标题
Widget _headItem(String title) {
return Container(
width: double.infinity,
alignment: Alignment.centerLeft,
decoration: BoxDecoration(
border: Border(
bottom:
BorderSide(color: MyColours.color_E7E7E7, width: w(0.5)))),
margin: EdgeInsets.only(left: w(16)),
padding: EdgeInsets.only(top: w(12), bottom: w(12), right: w(16)),
child: Text(
title,
style: TextStyle(
color: MyColours.color_515151, fontSize: ScreenUtil().setWidth(32)),
),
);
}
///优惠券
Widget _markingCupon({
VoidCallback onPressed,
bool select = false,
VoidCallback onPressedSelect,
}) {
return Container(
margin: EdgeInsets.only(left: w(21), top: w(12), right: w(21)),
child: Column(
children: [
InkWell(
onTap: onPressedSelect,
child: Row(
children: [
Image.asset(
Utils.getImgPath(select ? 'f_select' : 'f_select_not'),
width: w(20),
),
HEmptyView(20),
Text(
'顾客点评后赠送优惠券',
style: TextStyle(
fontSize: font(14), color: MyColours.color_515151),
),
Spacer(),
RoundButton(
text: '选择活动',
width: w(72),
height: w(22),
gradientStart: MyColours.color_ffffff,
gradientEnd: MyColours.color_ffffff,
borderColor: MyColours.color_438E93,
textColor: MyColours.color_438E93,
radius: r(11),
fontSize: 24,
isBold: true,
onPressed: onPressed,
)
],
)),
VEmptyView(20),
ListView.builder(
shrinkWrap: true,
controller: controller,
itemCount: couponDataListComments.length,
itemBuilder: (BuildContext context, int index) {
CouponSunModel couponData = couponDataListComments[index];
return _markingCuponItem(
couponData.aname,
_getCouponsDesc(couponData),
couponData.price ?? '',
couponData.use != null && couponData.use.isCash
? '${(double.parse(couponData.price) / double.parse(couponData.use.cash)) * 10}折'
: '',
'切换活动',
select: isCommentsCoupon, onPressedSelect: () {
setState(() {
isCommentsCoupon = !isCommentsCoupon;
});
});
})
],
),
);
}
String _getCouponsDesc(couponData) {
String couponsDesc = '';
if (couponData != null) {
if (couponData.expDate == null) {
couponsDesc = couponData.desc;
} else {
if (couponData.expDate.isNone) {
couponsDesc = '无限制,' + couponData.desc ?? '';
} else if (couponData.expDate.isBirthday) {
couponsDesc = '会员生日当天可用,' + couponData.desc ?? '';
} else if (couponData.expDate.isWeek) {
couponsDesc =
'${couponData.expDate.weekShow},' + couponData.desc ?? '';
}
}
}
return couponsDesc;
}
///优惠券
Widget _markingCuponItem(
String title,
String content,
String subtile,
String discount,
String btnTitle, {
VoidCallback onPressed,
bool select = false,
VoidCallback onPressedSelect,
}) {
return Container(
margin: EdgeInsets.only(left: w(21), top: w(12), right: w(21)),
child: Container(
padding: EdgeInsets.all(w(12)),
decoration: BoxDecoration(
borderRadius: BorderRadiusDirectional.circular(r(8)),
border: Border.all(width: w(1), color: MyColours.color_DBDBDB)),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
Container(
constraints: BoxConstraints(maxWidth: w(150)),
child: Text(
title,
style: TextStyle(
fontSize: font(14),
fontWeight: FontWeight.bold,
color: MyColours.color_515151),
)),
HEmptyView(20),
subtile != ''
? Text(
'¥${subtile}',
style: TextStyle(
fontSize: font(7),
fontWeight: FontWeight.bold,
color: MyColours.color_E34D59),
)
: SizedBox(),
HEmptyView(10),
discount != ''
? Container(
padding: EdgeInsets.symmetric(
horizontal: w(3), vertical: w(2)),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(r(3)),
border: Border.all(
width: w(0.5),
color: MyColours.color_E34D59)),
child: Text(
discount,
style: TextStyle(
color: MyColours.color_E34D59,
fontSize: font(7)),
),
)
: SizedBox(),
],
),
if (content != '') VEmptyView(20),
if (content != '')
Text(
content,
style: TextStyle(
height: 1.2,
fontSize: font(10),
fontWeight: FontWeight.bold,
color: MyColours.color_515151),
)
],
)),
],
),
),
);
}
///营销推广
Widget _markingItem(
String selectTitle,
String title, {
bool select = false,
VoidCallback onPressedSelect,
}) {
return Container(
margin: EdgeInsets.only(left: w(18), top: w(12), right: w(18)),
child: Column(
children: [
InkWell(
onTap: onPressedSelect,
child: Row(
children: [
Image.asset(
Utils.getImgPath(select ? 'f_select' : 'f_select_not'),
width: w(20),
),
HEmptyView(20),
Text(
selectTitle,
style: TextStyle(
fontSize: font(14), color: MyColours.color_515151),
)
],
)),
VEmptyView(20),
Container(
height: w(76),
padding: EdgeInsets.all(w(12)),
decoration: BoxDecoration(
borderRadius: BorderRadiusDirectional.circular(r(8)),
border:
Border.all(width: w(1), color: MyColours.color_DBDBDB)),
child: Text(
title,
maxLines: 2,
style: TextStyle(
fontSize: font(14),
// fontWeight: FontWeight.bold,
color: MyColours.color_515151),
))
],
),
);
}
@override
Widget build(BuildContext context) {
couponProvider = Provider.of<CouponProvider>(context, listen: false);
marketingCenterProvider =
Provider.of<MarketingCenterProvider>(context, listen: false);
return Scaffold(
backgroundColor: MyColours.color_ffffff,
appBar: SystemAppBar('用户评价设置'),
body: Column(
children: [
Expanded(
child: SingleChildScrollView(
controller: controller,
child: Column(
children: [
// _headItem('预订安排启用顾客反馈评价功能'),
InkWell(
onTap: () {
setState(() {
isComments = !isComments;
});
},
child: Padding(
padding: EdgeInsets.only(
left: w(16),
top: w(12),
bottom: w(12),
right: w(12)),
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Text(
'预订安排启用顾客反馈评价功能',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(16)),
),
Spacer(),
Container(
padding: EdgeInsets.symmetric(
horizontal: w(7), vertical: w(4)),
child: Image.asset(
Utils.getImgPath(isComments
? 'swich_on'
: 'swich_off'),
width: w(44),
),
)
// RoundButton(
// text: '预览',
// gradientStart: MyColours.color_ffffff,
// gradientEnd: MyColours.color_ffffff,
// borderColor: MyColours.color_438E93,
// textColor: MyColours.color_438E93,
// radius: ScreenUtil().setWidth(22),
// fontSize: 24,
// width: w(72),
// height: ScreenUtil().setWidth(44),
// isBold: true,
// onPressed: () {
// NavigatorUtil.goMarkingPreviewPage(context);
// },
// ),
]))),
VEmptyView(24),
couponProvider.couponListSelect != null &&
couponProvider.couponListSelect.length > 0
? _markingCupon(
select: isCommentsCoupon,
onPressedSelect: () {
setState(() {
isCommentsCoupon = !isCommentsCoupon;
});
},
onPressed: () async {
//切换活动
Map temp =
await NavigatorUtil.goMarkingCouponSelectPage(
context,
{'object': couponDataListComments},
mulSelect: false);
// Map temp = await NavigatorUtil.goCouponSelectPage(
// context,
// from: 'statistics',
// hasModify: false);
if (temp!= null && temp['coupon'] != null) {
couponDataListComments = temp['coupon'];
setState(() {});
}
})
: (couponProvider.couponListSelect == null ||
couponProvider.couponListSelect.length == 0)
? _markingItem(
'顾客点评后赠送优惠券',
'当前没有可用优惠券,请创建优惠券后再来尝试。',
select: false,
)
: SizedBox(),
],
),
),
),
Container(
color: MyColours.color_ffffff,
padding: EdgeInsets.only(
left: w(45), right: w(45), top: w(12), bottom: w(25)),
child: RoundButton(
text: '保存',
gradientStart: MyColours.color_199095,
gradientEnd: MyColours.color_199095,
// borderColor: MyColours.color_999999,
radius: r(5),
fontSize: 34,
height: w(40),
isBold: true,
onPressed: () async {
_setCouponShow();
},
),
)
],
));
}
}
... ...
... ... @@ -269,6 +269,41 @@ class _MarketingCenterHomePageState extends State<MarketingCenterHomePage> {
VEmptyView(24),
InkWell(
onTap: () {
NavigatorUtil.goCommentsSettingPage(context);
},
child: Padding(
padding: EdgeInsets.only(
left: w(16),
top: w(12),
bottom: w(12),
right: w(12)),
child: Row(
children: [
Text(
'用户评价反馈',
style: TextStyle(
color: MyColours.color_515151,
fontSize: ScreenUtil().setWidth(32)),
),
Spacer(),
Container(
padding: EdgeInsets.symmetric(
horizontal: w(7), vertical: w(4)),
child: Image.asset(
"assets/arrow_right_new.png",
width: ScreenUtil().setWidth(18),
height: ScreenUtil().setWidth(32),
),
)
],
))),
Padding(
padding: EdgeInsets.only(left: w(16)),
child: MyDivider(double.infinity, w(0.5),
color: MyColours.color_E7E7E7)),
VEmptyView(24),
InkWell(
onTap: () {
NavigatorUtil.goCustomerNoticeSettingPage(context);
},
child: Padding(
... ...
... ... @@ -27,7 +27,6 @@ class OrderSettingPage extends StatefulWidget {
class _OrderSettingPageState extends State<OrderSettingPage> {
MarketingCenterProvider marketingCenterProvider;
bool isTranspond = false; //转发邀请函
bool isArrival = false; //确认到店
... ... @@ -44,6 +43,9 @@ class _OrderSettingPageState extends State<OrderSettingPage> {
String welcome = '';
List<CouponSunModel> couponDataList = [];
bool isComments = false; //启用评价设置
bool isCommentsCoupon = false; //启用评价送券
List<CouponSunModel> couponDataListComments = [];
@override
void initState() {
... ... @@ -90,6 +92,18 @@ class _OrderSettingPageState extends State<OrderSettingPage> {
marketingCenterProvider.markDataModel.marketing.rechargeData;
couponDataList =
marketingCenterProvider.markDataModel.marketing.couponDataList ?? [];
couponDataListComments = marketingCenterProvider
.markDataModel.marketing.couponDataListComments ??
[];
isComments =
marketingCenterProvider.markDataModel.marketing.isComments == '1'
? true
: false;
isCommentsCoupon =
marketingCenterProvider.markDataModel.marketing.isCommentsCoupon ==
'1'
? true
: false;
qiniuUrl = marketingCenterProvider.markDataModel.marketing.logo ?? null;
... ... @@ -115,7 +129,10 @@ class _OrderSettingPageState extends State<OrderSettingPage> {
'wecomle': welcome ?? '',
'logo': qiniuUrl,
'recharge_data': rechargeData,
'coupon_data': json.encode(couponDataList)
'coupon_data': json.encode(couponDataList),
'is_comments': isComments ? '1' : '0',
'is_comments_coupon': isCommentsCoupon ? '1' : '0',
'coupon_data_comments': json.encode(couponDataListComments),
};
Map<String, String> params = {
'sid': Provider.of<UserModel>(context, listen: false).user.sellerid,
... ... @@ -169,9 +186,8 @@ class _OrderSettingPageState extends State<OrderSettingPage> {
padding: EdgeInsets.symmetric(
horizontal: w(7), vertical: w(4)),
child: Image.asset(
Utils.getImgPath(isOrder
? 'swich_on'
: 'swich_off'),
Utils.getImgPath(
isOrder ? 'swich_on' : 'swich_off'),
width: w(44),
),
)
... ...
... ... @@ -48,6 +48,9 @@ class _RechargeSettingPageState extends State<RechargeSettingPage> {
List<CouponSunModel> couponDataList = [];
List<RechargeListSunModel> rechargeListCanUse = [];
bool isComments = false; //启用评价设置
bool isCommentsCoupon = false; //启用评价送券
List<CouponSunModel> couponDataListComments = [];
@override
void initState() {
super.initState();
... ... @@ -93,6 +96,18 @@ class _RechargeSettingPageState extends State<RechargeSettingPage> {
marketingCenterProvider.markDataModel.marketing.rechargeData;
couponDataList =
marketingCenterProvider.markDataModel.marketing.couponDataList ?? [];
couponDataListComments = marketingCenterProvider
.markDataModel.marketing.couponDataListComments ??
[];
isComments =
marketingCenterProvider.markDataModel.marketing.isComments == '1'
? true
: false;
isCommentsCoupon =
marketingCenterProvider.markDataModel.marketing.isCommentsCoupon ==
'1'
? true
: false;
qiniuUrl = marketingCenterProvider.markDataModel.marketing.logo ?? null;
... ... @@ -118,7 +133,10 @@ class _RechargeSettingPageState extends State<RechargeSettingPage> {
'wecomle': welcome ?? '',
'logo': qiniuUrl,
'recharge_data': rechargeData,
'coupon_data': json.encode(couponDataList)
'coupon_data': json.encode(couponDataList),
'is_comments': isComments ? '1' : '0',
'is_comments_coupon': isCommentsCoupon ? '1' : '0',
'coupon_data_comments': json.encode(couponDataListComments),
};
Map<String, String> params = {
'sid': Provider.of<UserModel>(context, listen: false).user.sellerid,
... ...
... ... @@ -1304,32 +1304,32 @@ class MyPageState extends State<MyPage> with WidgetsBindingObserver {
isRowLow: outDay == '0' ||
!Utils.getAuthority(
context, '营销中心'))),
// InkWell(
// onTap: () {
// if (outDay == '0') {
// return;
// }
// if (Utils.getAuthority(
// context, '评价管理')) {
// NavigatorUtil
// .goCommentManageHomePage(
// context);
// }
// },
// child: _item(
// outDay == '0' ||
// !Utils.getAuthority(
// context, '评价管理')
// ? Utils.getImgPath(
// 'my_comment_un')
// : Utils.getImgPath(
// 'my_comment'),
// '评价管理',
// isRowLow: outDay == '0' ||
// !Utils.getAuthority(
// context, '评价管理'))),
InkWell(
onTap: () {}, child: _item('', '空空空空')),
onTap: () {
if (outDay == '0') {
return;
}
if (Utils.getAuthority(
context, '评价管理')) {
NavigatorUtil
.goCommentManageHomePage(
context);
}
},
child: _item(
outDay == '0' ||
!Utils.getAuthority(
context, '评价管理')
? Utils.getImgPath(
'my_comment_un')
: Utils.getImgPath(
'my_comment'),
'评价管理',
isRowLow: outDay == '0' ||
!Utils.getAuthority(
context, '评价管理'))),
// InkWell(
// onTap: () {}, child: _item('', '空空空空')),
InkWell(
onTap: () {}, child: _item('', '空空空空')),
],
... ...
... ... @@ -1459,12 +1459,10 @@ class NavigatorUtil {
///预订安排通知定制------优惠券选择
static Future<dynamic> goMarkingCouponSelectPage(
BuildContext context,
Map object, {
replace = false,
}) {
BuildContext context, Map object,
{replace = false, bool mulSelect = true}) {
return _navigateTo(context,
"${Routes.marking_coupon_select_page}?object=${FluroConvertUtils.object2string(object)}",
"${Routes.marking_coupon_select_page}?object=${FluroConvertUtils.object2string(object)}&mulSelect=${mulSelect}",
replace: replace);
}
... ... @@ -1806,4 +1804,13 @@ class NavigatorUtil {
return _navigateTo(context, "${Routes.comment_manage_home_page}",
replace: replace);
}
/// 客户通知配置页----评价配置页
static Future<dynamic> goCommentsSettingPage(
BuildContext context, {
replace = false,
}) {
return _navigateTo(context, "${Routes.comments_setting_page}",
replace: replace);
}
}
... ...
... ... @@ -206,6 +206,7 @@ import '../pages/my/marketing_center/book_notification/marking_coupon_select_pag
import '../pages/my/marketing_center/book_notification/marking_preview_page.dart';
import '../pages/my/marketing_center/book_notification/marking_recharge_select_page.dart';
import '../pages/my/marketing_center/book_notification/store_introduce_page.dart';
import '../pages/my/marketing_center/comments_setting_page.dart';
import '../pages/my/marketing_center/customer_notice_setting_page.dart';
import '../pages/my/marketing_center/marketing_center_home_page.dart';
import '../pages/my/marketing_center/order_setting_manager_page.dart';
... ... @@ -2503,11 +2504,13 @@ var markingCouponSelectPageHandle = new Handler(
res.add(CouponSunModel.fromJson(item));
}
}
bool mulSelect = FluroConvertUtils.string2bool(params["mulSelect"].first);
// NotebookDetail detailEntity = NotebookDetail.fromJson(json
// .decode(FluroConvertUtils.fluroCnParamsDecode(params["detail"].first)));
return ChangeNotifierProvider<MarketingCenterProvider>(
create: (_) => MarketingCenterProvider(),
child: MarkingCouponSelectPage(couponList: res));
child: MarkingCouponSelectPage(couponList: res, mulSelect: mulSelect));
});
//我的----营销中心-预订安排预览页
... ... @@ -3015,3 +3018,20 @@ var commentManageHomePageHandle = new Handler(
return ChangeNotifierProvider<CommentManageProvider>(
create: (_) => CommentManageProvider(), child: CommentManageHomePage());
});
//客户通知----评价配置页
var commentsSettingPageHandle = new Handler(
handlerFunc: (BuildContext context, Map<String, List<Object>> params) {
// String year = params["year"].first;
// String month = params["month"].first;
// String day = params["day"].first;
// String uid = params["uid"].first;
// DayList daylist = DayList.fromJson(json
// .decode(FluroConvertUtils.fluroCnParamsDecode(params["daylist"].first)));
return ChangeNotifierProvider<MarketingCenterProvider>(
create: (_) => MarketingCenterProvider(),
child: ChangeNotifierProvider<CouponProvider>(
create: (_) => CouponProvider(), child: CommentsSettingPage()));
});
... ...
... ... @@ -289,6 +289,10 @@ class Routes {
static String recharge_setting_page = "/recharge_setting_page"; // 充值优惠设置页
static String comment_manage_home_page = "/comment_manage_home_page"; // 评价管理
static String comments_setting_page = "/comments_setting_page"; // 评价管理设置
static void configureRoutes(FluroRouter router) {
router.notFoundHandler = new Handler(
handlerFunc: (BuildContext context, Map<String, List<String>> params) {
... ... @@ -538,5 +542,10 @@ class Routes {
router.define(recharge_setting_page, handler: rechargeSettingPageHandle);
router.define(comment_manage_home_page,
handler: commentManageHomePageHandle);
router.define(comments_setting_page,
handler: commentsSettingPageHandle);
}
}
... ...
... ... @@ -55,87 +55,108 @@ typedef ClickCallback = void Function(String value);
// };
class DialogUtil {
//回复评论弹框
static openCommentsModalBottomSheet(context,
static openCommentsModalBottomSheet(context, TextEditingController controller,
{VoidCallback lCallback, VoidCallback rCallback}) async {
final option = await showModalBottomSheet(
context: context,
backgroundColor: Colors.transparent,
isDismissible: false,
isDismissible: true,
builder: (BuildContext context) {
return Container(
// height: ScreenUtil().setWidth(180 * 2),
decoration: BoxDecoration(
color: MyColours.color_DBDBDB,
return Scaffold(
resizeToAvoidBottomInset: false,
body: Column(mainAxisSize: MainAxisSize.min, children: [
Container(
// height: ScreenUtil().setWidth(180 * 2),
// constraints: BoxConstraints(minHeight: w(40), maxHeight: w(500)),
decoration: BoxDecoration(
color: MyColours.color_F7F7F7,
// borderRadius: BorderRadius.only(
// topLeft: Radius.circular(ScreenUtil().setWidth(24)),
// topRight: Radius.circular(ScreenUtil().setWidth(24)))
),
child: Row(
children: <Widget>[
InkWell(
onTap: lCallback,
child: Container(
width: double.infinity,
height: ScreenUtil().setWidth(58 * 2),
child: Center(
child: Text(
'拍摄',
style: TextStyle(
fontSize: ScreenUtil().setSp(32),
color: MyColours.color_353535,
fontWeight: FontWeight.bold),
),
)),
),
MyDivider(
double.infinity,
ScreenUtil().setWidth(2),
color: MyColours.color_EEEEEE,
),
InkWell(
onTap: rCallback,
child: Container(
width: double.infinity,
height: ScreenUtil().setWidth(58 * 2),
child: Center(
child: Text(
'从相册选择',
style: TextStyle(
fontSize: ScreenUtil().setSp(32),
color: MyColours.color_353535,
fontWeight: FontWeight.bold),
),
)),
),
MyDivider(
double.infinity,
ScreenUtil().setWidth(10),
color: MyColours.color_EEEEEE,
),
InkWell(
onTap: () {
Navigator.pop(context, '取消');
},
child: Container(
width: double.infinity,
height: ScreenUtil().setWidth(58 * 2),
child: Center(
child: Text(
'取消',
style: TextStyle(
fontSize: ScreenUtil().setSp(32),
color: MyColours.color_353535,
fontWeight: FontWeight.bold),
),
)))
],
),
);
),
child: Row(
crossAxisAlignment: CrossAxisAlignment.end,
children: <Widget>[
Expanded(
child: Container(
margin: EdgeInsets.symmetric(
horizontal: w(15), vertical: w(8)),
decoration: BoxDecoration(
color: MyColours.color_ffffff,
borderRadius: BorderRadius.circular(r(8))),
padding: EdgeInsets.symmetric(horizontal: w(4)),
child: TextField(
controller: controller,
maxLines: null,
autofocus: true,
// //光标颜色
// cursorColor:
// widget.isSelect ? Colors.white : MyColours.color_199095,
//输入文本的样式
// inputFormatters: lenghtLimit
// ? [
// LengthLimitingTextInputFormatter(10),
// ]
// : [],
textAlignVertical: TextAlignVertical.bottom,
textAlign: TextAlign.left,
style: TextStyle(
fontSize: ScreenUtil().setSp(28),
),
decoration: InputDecoration(
border: OutlineInputBorder(
borderSide: BorderSide.none),
hintText: '评论',
hintStyle: TextStyle(
color: MyColours.color_999999,
fontSize: ScreenUtil().setSp(28),
),
enabledBorder: new UnderlineInputBorder(
borderSide: BorderSide.none,
),
focusedBorder: new UnderlineInputBorder(
borderSide: BorderSide.none,
),
),
onChanged: (value) {
// name = value;
},
onEditingComplete: () {
FocusScope.of(context)
.requestFocus(FocusNode()); //点击空白处隐藏键盘
},
keyboardType: TextInputType.text))),
HEmptyView(20),
RoundButton(
text: '发送',
width: w(54),
height: w(24),
gradientStart: controller.text.trim().length > 0
? MyColours.color_438E93
: MyColours.color_ffffff,
gradientEnd: controller.text.trim().length > 0
? MyColours.color_438E93
: MyColours.color_ffffff,
textColor: controller.text.trim().length > 0
? MyColours.color_F8F9FD
: MyColours.color_000000,
fontSize: 24,
borderColor: controller.text.trim().length > 0
? MyColours.color_438E93
: MyColours.color_999999,
radius: r(15),
onPressed: () {},
),
HEmptyView(20),
],
),
)
]));
});
}
static List<Widget> menuSelectBtn(MenuSunModel menuSunModel, state) {
List<Widget> temp = [];
for (int i = 0; i < menuSunModel.practice.length; i++) {
... ...
... ... @@ -169,6 +169,13 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.0.1"
cached_video_player:
dependency: "direct main"
description:
name: cached_video_player
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.0.4"
characters:
dependency: transitive
description:
... ... @@ -400,6 +407,13 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.1.2"
fijkplayer:
dependency: "direct main"
description:
name: fijkplayer
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.11.0"
file:
dependency: transitive
description:
... ... @@ -930,35 +944,35 @@ packages:
name: permission_handler
url: "https://pub.flutter-io.cn"
source: hosted
version: "10.0.0"
version: "10.4.3"
permission_handler_android:
dependency: transitive
description:
name: permission_handler_android
url: "https://pub.flutter-io.cn"
source: hosted
version: "10.0.0"
version: "10.3.4"
permission_handler_apple:
dependency: transitive
description:
name: permission_handler_apple
url: "https://pub.flutter-io.cn"
source: hosted
version: "9.0.4"
version: "9.1.4"
permission_handler_platform_interface:
dependency: transitive
description:
name: permission_handler_platform_interface
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.7.0"
version: "3.11.3"
permission_handler_windows:
dependency: transitive
description:
name: permission_handler_windows
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.1.0"
version: "0.1.3"
petitparser:
dependency: transitive
description:
... ... @@ -1401,40 +1415,47 @@ packages:
source: hosted
version: "3.1.1"
video_player:
dependency: "direct main"
dependency: transitive
description:
name: video_player
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.4.7"
version: "2.6.0"
video_player_android:
dependency: transitive
description:
name: video_player_android
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.3.5"
version: "2.4.3"
video_player_avfoundation:
dependency: transitive
description:
name: video_player_avfoundation
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.3.4"
version: "2.4.2"
video_player_platform_interface:
dependency: transitive
description:
name: video_player_platform_interface
url: "https://pub.flutter-io.cn"
source: hosted
version: "5.1.2"
version: "5.1.4"
video_player_web:
dependency: transitive
description:
name: video_player_web
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.0.10"
version: "2.0.15"
video_thumbnail:
dependency: "direct main"
description:
name: video_thumbnail
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.5.3"
wakelock:
dependency: transitive
description:
... ...
... ... @@ -79,6 +79,7 @@ dependencies:
# 日历
table_calendar: ^2.2.1
# 微信SDK
# fluwx: ^3.9.0+2
fluwx: ^3.13.1
# fluwx: ^4.2.5
... ... @@ -135,14 +136,18 @@ dependencies:
#苹果登陆
sign_in_with_apple: ^3.0.0
# sign_in_with_apple: ^3.0.0
# video_thumbnail: ^0.2.5
video_player: ^2.4.7
video_thumbnail: ^0.5.3
# video_player: ^2.4.7
# video_player: ^2.7.0
# video_player: ^2.4.2
# video_player: ^2.2.12
# ^2.4.7
# chewie: ^1.3.3
chewie: ^1.3.5
cached_video_player: ^2.0.4
# 视频播放
# flutter_ijkplayer: 0.3.5+1
# fijkplayer: ^0.11.0
# 视频信息获取
# video_compress: ^2.1.1
video_compress: ^3.1.1
... ... @@ -198,6 +203,9 @@ dependencies:
#评论弹框
sliding_up_panel2: ^3.3.0+1
#视频播放
fijkplayer: ^0.11.0
# shimmer: ^3.0.0
... ...