You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
397 lines
13 KiB
397 lines
13 KiB
import 'package:aku_new_community/base/base_style.dart';
|
|
import 'package:aku_new_community/constants/saas_api.dart';
|
|
import 'package:aku_new_community/model/common/img_model.dart';
|
|
import 'package:aku_new_community/models/home/activity_detail_model.dart';
|
|
import 'package:aku_new_community/models/home/home_activity_model.dart';
|
|
import 'package:aku_new_community/utils/headers.dart';
|
|
import 'package:aku_new_community/utils/network/base_model.dart';
|
|
import 'package:aku_new_community/utils/network/net_util.dart';
|
|
import 'package:aku_new_community/widget/beeImageNetwork.dart';
|
|
import 'package:aku_new_community/widget/bee_divider.dart';
|
|
import 'package:aku_new_community/widget/bee_scaffold.dart';
|
|
import 'package:aku_new_community/widget/buttons/bottom_button.dart';
|
|
import 'package:aku_new_community/widget/others/stack_avatar.dart';
|
|
import 'package:common_utils/common_utils.dart';
|
|
import 'package:flutter/cupertino.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_easyrefresh/easy_refresh.dart';
|
|
import 'package:get/get.dart';
|
|
import 'package:url_launcher/url_launcher.dart';
|
|
|
|
import 'activity_func.dart';
|
|
import 'activity_people_list_page.dart';
|
|
|
|
class ActivityDetailPage extends StatefulWidget {
|
|
final int id;
|
|
|
|
const ActivityDetailPage({Key? key, required this.id}) : super(key: key);
|
|
|
|
@override
|
|
_ActivityDetailPageState createState() => _ActivityDetailPageState();
|
|
}
|
|
|
|
class _ActivityDetailPageState extends State<ActivityDetailPage> {
|
|
final EasyRefreshController _refreshController = EasyRefreshController();
|
|
ActivityDetailModel? _model;
|
|
|
|
@override
|
|
void initState() {
|
|
_refreshController.dispose();
|
|
super.initState();
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
var content = Container(
|
|
width: double.infinity,
|
|
padding: EdgeInsets.all(32.w),
|
|
color: Colors.white,
|
|
child: Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
'活动详情'.text.size(32.sp).color(Colors.black).bold.make(),
|
|
32.w.heightBox,
|
|
'${_model?.content}'
|
|
.text
|
|
.size(28.sp)
|
|
.color(Colors.black.withOpacity(0.45))
|
|
.make(),
|
|
32.w.heightBox,
|
|
...List.generate(
|
|
0,
|
|
(index) => Container(
|
|
width: 686.w,
|
|
height: 432.w,
|
|
decoration: BoxDecoration(
|
|
borderRadius: BorderRadius.circular(8.w),
|
|
),
|
|
child: BeeImageNetwork(
|
|
urls: [ImgModel.first(_model?.imgList)],
|
|
),
|
|
)),
|
|
],
|
|
),
|
|
);
|
|
return BeeScaffold(
|
|
title: '活动详情',
|
|
body: EasyRefresh(
|
|
header: MaterialHeader(),
|
|
controller: _refreshController,
|
|
firstRefresh: true,
|
|
onRefresh: () async {
|
|
BaseModel baseModel = await NetUtil().get(
|
|
SAASAPI.activity.detail,
|
|
params: {'activityId': widget.id},
|
|
);
|
|
_model = ActivityDetailModel.fromJson(baseModel.data);
|
|
setState(() {});
|
|
},
|
|
child: _model == null
|
|
? SizedBox()
|
|
: ListView(
|
|
children: [
|
|
_headWidget(),
|
|
24.w.heightBox,
|
|
content,
|
|
24.w.heightBox,
|
|
Container(
|
|
width: double.infinity,
|
|
color: Colors.white,
|
|
padding:
|
|
EdgeInsets.symmetric(horizontal: 32.w, vertical: 16.w),
|
|
height: 132.w,
|
|
child: Row(
|
|
children: [
|
|
CircleAvatar(
|
|
child: BeeImageNetwork(
|
|
width: 100.w,
|
|
height: 100.w,
|
|
imgs: _model!.organizerImgList,
|
|
),
|
|
radius: 50.w,
|
|
),
|
|
20.w.widthBox,
|
|
Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
'${_model!.unit}'
|
|
.text
|
|
.size(28.sp)
|
|
.color(Colors.black)
|
|
.make(),
|
|
8.w.heightBox,
|
|
'${S.of(context)!.tempPlotName}'
|
|
.text
|
|
.size(24.sp)
|
|
.color(Colors.black.withOpacity(0.25))
|
|
.make()
|
|
],
|
|
),
|
|
Spacer(),
|
|
MaterialButton(
|
|
minWidth: 120.w,
|
|
height: 60.w,
|
|
onPressed: () {
|
|
launch('tel:${_model!.tel}');
|
|
},
|
|
shape: RoundedRectangleBorder(
|
|
side: BorderSide(
|
|
color: Colors.blueAccent,
|
|
),
|
|
borderRadius: BorderRadius.circular(30.w)),
|
|
child: '联系物业'
|
|
.text
|
|
.size(24.sp)
|
|
.color(Colors.blueAccent)
|
|
.make(),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
bottomNavi: BottomButton(
|
|
child: btnText,
|
|
onPressed: !canTap
|
|
? null
|
|
: () async {
|
|
var re = await NetUtil().get(SAASAPI.activity.registration,
|
|
params: {'activityId': _model!.id}, showMessage: true);
|
|
if (re.success) {
|
|
_refreshController.callRefresh();
|
|
}
|
|
},
|
|
),
|
|
);
|
|
}
|
|
|
|
Widget get btnText{
|
|
if (_model?.regisEndTime?.isBefore(DateTime.now()) ?? true) {
|
|
return '报名截止'.text.size(32.sp).bold.make();
|
|
}else if(_model!.isRegistration==1){
|
|
return '已报名'.text.size(32.sp).bold.make();
|
|
}else{
|
|
return '立即报名'.text.size(32.sp).bold.make();
|
|
}
|
|
}
|
|
|
|
bool get canTap {
|
|
if ((_model?.regisEndTime?.isBefore(DateTime.now()) ?? true) ||_model!.isRegistration==1) {
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
Container _headWidget() {
|
|
return Container(
|
|
color: Colors.white,
|
|
child: Column(
|
|
children: [
|
|
Container(
|
|
width: double.infinity,
|
|
height: 280.w,
|
|
child: BeeImageNetwork(
|
|
imgs: _model!.imgList,
|
|
fit: BoxFit.fitWidth,
|
|
),
|
|
),
|
|
Padding(
|
|
padding: EdgeInsets.only(
|
|
left: 32.w, right: 32.w, top: 16.w, bottom: 16.w),
|
|
child: Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
'${_model!.title}'
|
|
.text
|
|
.size(32.sp)
|
|
.color(Colors.black.withOpacity(0.85))
|
|
.maxLines(3)
|
|
.bold
|
|
.make(),
|
|
32.w.heightBox,
|
|
Row(
|
|
mainAxisAlignment: MainAxisAlignment.start,
|
|
children: [
|
|
Container(
|
|
padding:
|
|
EdgeInsets.symmetric(horizontal: 16.w, vertical: 8.w),
|
|
decoration: BoxDecoration(
|
|
color: Color(0xFFFEC076).withOpacity(0.5),
|
|
borderRadius: BorderRadius.circular(10.w)),
|
|
alignment: Alignment.center,
|
|
child: '${ActivityFunc.dateCheck(_model!.regisEndTime)}'
|
|
.text
|
|
.size(24.sp)
|
|
.color(Color(0xFFF48117))
|
|
.make(),
|
|
),
|
|
],
|
|
),
|
|
32.w.heightBox,
|
|
_buildTile(
|
|
'报名时间',
|
|
'${DateUtil.formatDate(
|
|
_model!.regisStartTime,
|
|
format: 'yyyy.MM.dd HH:mm',
|
|
)}-${DateUtil.formatDate(
|
|
_model!.regisEndTime,
|
|
format: 'yyyy.MM.dd HH:mm',
|
|
)}',
|
|
),
|
|
16.hb,
|
|
_buildTile(
|
|
'活动时间',
|
|
'${DateUtil.formatDate(
|
|
_model!.activeTime,
|
|
format: 'yyyy.MM.dd HH:mm',
|
|
)}-${DateUtil.formatDate(
|
|
_model!.activeEndTime,
|
|
format: 'yyyy.MM.dd HH:mm',
|
|
)}',
|
|
),
|
|
// 16.hb,
|
|
// Row(
|
|
// children: [
|
|
// '活动方式'.text.size(28.sp).make().box.width(136.w).make(),
|
|
// '本次活动介绍'
|
|
// .richText
|
|
// .tap(() {
|
|
// var bottomSheet = Container(
|
|
// width: double.infinity,
|
|
// padding: EdgeInsets.all(32.w),
|
|
// decoration: BoxDecoration(
|
|
// color: Colors.white,
|
|
// borderRadius: BorderRadius.circular(16.w)),
|
|
// child: Column(
|
|
// children: [
|
|
// '活动介绍'.text.size(32.sp).black.bold.make(),
|
|
// 32.w.heightBox,
|
|
// _model!.content.text
|
|
// .size(28.sp)
|
|
// .color(Colors.black.withOpacity(0.65))
|
|
// .make(),
|
|
// ],
|
|
// ),
|
|
// );
|
|
// Get.bottomSheet(
|
|
// bottomSheet,
|
|
// );
|
|
// })
|
|
// .size(28.sp)
|
|
// .color(Colors.blue)
|
|
// .make(),
|
|
// Spacer(),
|
|
// ],
|
|
// ),
|
|
16.hb,
|
|
Row(
|
|
children: [
|
|
'活动费用'.text.size(28.sp).make().box.width(136.w).make(),
|
|
'免费'.richText.size(28.sp).make(),
|
|
Spacer(),
|
|
],
|
|
),
|
|
16.w.heightBox,
|
|
Row(
|
|
children: [
|
|
'活动地点'.text.size(28.sp).make().box.width(136.w).make(),
|
|
'${_model!.activityAddress}'
|
|
.richText
|
|
.tap(() {})
|
|
.size(28.sp)
|
|
.color(Colors.blue)
|
|
.make(),
|
|
Spacer(),
|
|
],
|
|
),
|
|
32.w.heightBox,
|
|
BeeDivider.horizontal(),
|
|
16.hb,
|
|
AvatarsParticipate(
|
|
registrationList: _model!.registrationList,
|
|
avatars: _model!.registrationList
|
|
.map((e) => ImgModel.first(e.avatarImgList))
|
|
.toList(),
|
|
pNum: _model!.registrationNum,
|
|
tNum: _model!.registrationNumMax),
|
|
],
|
|
),
|
|
),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
|
|
_buildTile(String title, String subTitle) {
|
|
return Row(
|
|
children: [
|
|
title.text.size(28.sp).make().box.width(136.w).make(),
|
|
subTitle.text.size(28.sp).make().expand(),
|
|
],
|
|
);
|
|
}
|
|
}
|
|
|
|
class AvatarsParticipate extends StatelessWidget {
|
|
final List<String?> avatars;
|
|
final List<Registration>? registrationList;
|
|
|
|
//参加人数
|
|
final int pNum;
|
|
|
|
//总人数
|
|
final int? tNum;
|
|
|
|
final bool? hasIcon;
|
|
|
|
const AvatarsParticipate({
|
|
Key? key,
|
|
required this.avatars,
|
|
required this.pNum,
|
|
this.tNum,
|
|
this.hasIcon = true, this.registrationList,
|
|
}) : super(key: key);
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return InkWell(
|
|
onTap: () {
|
|
Get.to(() => ActivityPeopleListPage( registrationList: registrationList,));
|
|
},
|
|
child: Container(
|
|
child: Row(
|
|
children: [
|
|
Offstage(
|
|
offstage: avatars.isEmpty,
|
|
child: StackAvatar(
|
|
avatars: avatars,
|
|
),
|
|
),
|
|
16.w.heightBox,
|
|
'${pNum}'
|
|
.richText
|
|
.withTextSpanChildren([
|
|
'${tNum == null ? '' : '/${tNum}'}人参与'
|
|
.textSpan
|
|
.size(24.sp)
|
|
.black
|
|
.make()
|
|
])
|
|
.color(Colors.blueAccent)
|
|
.size(24.sp)
|
|
.make(),
|
|
Spacer(),
|
|
!hasIcon!
|
|
? SizedBox()
|
|
: Icon(
|
|
CupertinoIcons.chevron_right,
|
|
size: 40.w,
|
|
),
|
|
],
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|