任务发布筛选条件

pull/1/head
张萌 3 years ago
parent 7baefdc458
commit a2608269e9

@ -9,18 +9,19 @@ import 'package:velocity_x/src/extensions/num_ext.dart';
import 'hall_card.dart'; import 'hall_card.dart';
class HallView extends StatefulWidget { class HallView extends StatefulWidget {
const HallView({Key? key}) : super(key: key); final EasyRefreshController refreshController;
final int type;
const HallView(
{Key? key, required this.refreshController, required this.type})
: super(key: key);
@override @override
_HallViewState createState() => _HallViewState(); _HallViewState createState() => _HallViewState();
} }
class _HallViewState extends State<HallView> { class _HallViewState extends State<HallView> {
EasyRefreshController _refreshController = EasyRefreshController();
@override @override
void dispose() { void dispose() {
_refreshController.dispose();
super.dispose(); super.dispose();
} }
@ -28,9 +29,10 @@ class _HallViewState extends State<HallView> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return BeeListView( return BeeListView(
path: SARSAPI.task.list, path: SARSAPI.task.list,
controller: _refreshController, controller: widget.refreshController,
extraParams: { extraParams: {
'taskModel': 1, 'taskModel': 1,
'type': widget.type + 1,
}, },
convert: (json) => convert: (json) =>
json.rows.map((e) => HallListModel.fromJson(e)).toList(), json.rows.map((e) => HallListModel.fromJson(e)).toList(),
@ -41,7 +43,7 @@ class _HallViewState extends State<HallView> {
return HallCard( return HallCard(
key: ValueKey(models[index].id), key: ValueKey(models[index].id),
model: models[index], model: models[index],
refresh: () => _refreshController.callRefresh()); refresh: () => widget.refreshController.callRefresh());
}, },
separatorBuilder: (_, __) { separatorBuilder: (_, __) {
return 24.w.heightBox; return 24.w.heightBox;

@ -5,6 +5,8 @@ import 'package:aku_new_community/ui/service/my_take_task/my_take_task_detail_pa
import 'package:aku_new_community/ui/service/task_map.dart'; import 'package:aku_new_community/ui/service/task_map.dart';
import 'package:aku_new_community/widget/bee_divider.dart'; import 'package:aku_new_community/widget/bee_divider.dart';
import 'package:aku_new_community/widget/buttons/card_bottom_button.dart'; import 'package:aku_new_community/widget/buttons/card_bottom_button.dart';
import 'package:aku_new_community/widget/views/bee_grid_image_view.dart';
import 'package:aku_new_community/widget/voice_player.dart';
import 'package:common_utils/common_utils.dart'; import 'package:common_utils/common_utils.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
@ -22,6 +24,28 @@ class MyTakeTaskCard extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
var appointment = Row(
children: [
Container(
width: 40.w,
height: 40.w,
alignment: Alignment.center,
decoration: BoxDecoration(
color: Color(0xFFFA8C16),
borderRadius: BorderRadius.circular(8.w)),
child: Text(
'',
style: TextStyle(color: Colors.white, fontSize: 24.sp),
),
),
24.w.widthBox,
'${DateUtil.formatDateStr(model.readyEndTime, format: 'MM月dd日 HH:mm')}'
.text
.size(24.sp)
.color(Colors.black.withOpacity(0.65))
.make(),
],
);
return GestureDetector( return GestureDetector(
onTap: () { onTap: () {
Get.to(() => MyTakeTaskDetailPage(model: model)); Get.to(() => MyTakeTaskDetailPage(model: model));
@ -53,7 +77,9 @@ class MyTakeTaskCard extends StatelessWidget {
), ),
20.w.heightBox, 20.w.heightBox,
BeeDivider.horizontal(), BeeDivider.horizontal(),
34.w.heightBox, 24.w.heightBox,
appointment,
20.w.heightBox,
Row( Row(
children: [ children: [
Assets.icons.clockCircle.image(width: 36.w, height: 36.w), Assets.icons.clockCircle.image(width: 36.w, height: 36.w),
@ -77,6 +103,32 @@ class MyTakeTaskCard extends StatelessWidget {
.make(), .make(),
], ],
), ),
Row(
children: [
Assets.icons.watch.image(width: 40.w, height: 40.w),
24.w.widthBox,
'${model.serviceTime ?? '0'}'
.richText
.withTextSpanChildren([
' 分钟'.textSpan.size(28.sp).color(Colors.black).make(),
])
.size(28.sp)
.color(Color(0xFFFA8C16))
.make(),
],
),
24.w.heightBox,
Row(
children: [
Assets.icons.environment.image(width: 36.w, height: 36.w),
24.w.widthBox,
'${model.accessAddress}'
.text
.size(24.sp)
.color(Colors.black.withOpacity(0.65))
.make(),
],
),
34.w.heightBox, 34.w.heightBox,
Container( Container(
width: 638.w, width: 638.w,
@ -87,16 +139,17 @@ class MyTakeTaskCard extends StatelessWidget {
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
'#${TaskMap.typeToString[model.type]}'
.text
.size(28.sp)
.color(Colors.black.withOpacity(0.85))
.make(),
16.w.heightBox,
model.remarks.text model.remarks.text
.size(28.sp) .size(28.sp)
.color(Colors.black.withOpacity(0.65)) .color(Colors.black.withOpacity(0.65))
.make(), .make(),
24.w.heightBox,
VoicePlayer(
url: model.voiceUrl,
),
24.w.heightBox,
BeeGridImageView(
urls: model.imgList?.map((e) => e.url).toList() ?? []),
], ],
), ),
), ),

@ -8,18 +8,19 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:velocity_x/velocity_x.dart'; import 'package:velocity_x/velocity_x.dart';
class MyTakeTaskView extends StatefulWidget { class MyTakeTaskView extends StatefulWidget {
const MyTakeTaskView({Key? key}) : super(key: key); final EasyRefreshController refreshController;
final int type;
const MyTakeTaskView(
{Key? key, required this.refreshController, required this.type})
: super(key: key);
@override @override
_MyTakeTaskViewState createState() => _MyTakeTaskViewState(); _MyTakeTaskViewState createState() => _MyTakeTaskViewState();
} }
class _MyTakeTaskViewState extends State<MyTakeTaskView> { class _MyTakeTaskViewState extends State<MyTakeTaskView> {
EasyRefreshController _refreshController = EasyRefreshController();
@override @override
void dispose() { void dispose() {
_refreshController.dispose();
super.dispose(); super.dispose();
} }
@ -27,9 +28,10 @@ class _MyTakeTaskViewState extends State<MyTakeTaskView> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return BeeListView( return BeeListView(
path: SARSAPI.task.list, path: SARSAPI.task.list,
controller: _refreshController, controller: widget.refreshController,
extraParams: { extraParams: {
'taskModel': 2, 'taskModel': 2,
'type': widget.type + 1,
}, },
convert: (json) => convert: (json) =>
json.rows.map((e) => MyTakeTaskListModel.fromJson(e)).toList(), json.rows.map((e) => MyTakeTaskListModel.fromJson(e)).toList(),
@ -39,7 +41,7 @@ class _MyTakeTaskViewState extends State<MyTakeTaskView> {
itemBuilder: (context, index) { itemBuilder: (context, index) {
return MyTakeTaskCard( return MyTakeTaskCard(
model: models[index], model: models[index],
refresh: () => _refreshController.callRefresh()); refresh: () => widget.refreshController.callRefresh());
}, },
separatorBuilder: (_, __) { separatorBuilder: (_, __) {
return 24.w.heightBox; return 24.w.heightBox;

@ -3,6 +3,8 @@ import 'package:aku_new_community/models/task/my_task_list_model.dart';
import 'package:aku_new_community/ui/service/my_task/my_task_detail_page.dart'; import 'package:aku_new_community/ui/service/my_task/my_task_detail_page.dart';
import 'package:aku_new_community/ui/service/task_map.dart'; import 'package:aku_new_community/ui/service/task_map.dart';
import 'package:aku_new_community/widget/buttons/card_bottom_button.dart'; import 'package:aku_new_community/widget/buttons/card_bottom_button.dart';
import 'package:aku_new_community/widget/views/bee_grid_image_view.dart';
import 'package:aku_new_community/widget/voice_player.dart';
import 'package:common_utils/common_utils.dart'; import 'package:common_utils/common_utils.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
@ -45,6 +47,28 @@ class MyTaskCard extends StatelessWidget {
.make() .make()
], ],
); );
var appointment = Row(
children: [
Container(
width: 40.w,
height: 40.w,
alignment: Alignment.center,
decoration: BoxDecoration(
color: Color(0xFFFA8C16),
borderRadius: BorderRadius.circular(8.w)),
child: Text(
'',
style: TextStyle(color: Colors.white, fontSize: 24.sp),
),
),
24.w.widthBox,
'${DateUtil.formatDateStr(model.readyEndTime, format: 'MM月dd日 HH:mm')}'
.text
.size(24.sp)
.color(Colors.black.withOpacity(0.65))
.make(),
],
);
return GestureDetector( return GestureDetector(
onTap: () { onTap: () {
Get.to(() => MyTaskDetailPage(model: model)); Get.to(() => MyTaskDetailPage(model: model));
@ -59,19 +83,24 @@ class MyTaskCard extends StatelessWidget {
child: Column( child: Column(
children: [ children: [
head, head,
34.w.heightBox, 24.w.heightBox,
appointment,
20.w.heightBox,
Row( Row(
children: [ children: [
Assets.icons.clockCircle.image(width: 36.w, height: 36.w), Assets.icons.watch.image(width: 40.w, height: 40.w),
24.w.widthBox, 24.w.widthBox,
'${DateUtil.formatDateStr(model.readyEndTime)}' '${model.serviceTime ?? '0'}'
.text .richText
.size(24.sp) .withTextSpanChildren([
.color(Colors.black.withOpacity(0.65)) ' 分钟'.textSpan.size(28.sp).color(Colors.black).make(),
])
.size(28.sp)
.color(Color(0xFFFA8C16))
.make(), .make(),
], ],
), ),
20.w.heightBox, 24.w.heightBox,
Row( Row(
children: [ children: [
Assets.icons.environment.image(width: 36.w, height: 36.w), Assets.icons.environment.image(width: 36.w, height: 36.w),
@ -93,16 +122,17 @@ class MyTaskCard extends StatelessWidget {
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
'#${TaskMap.typeToString[model.type]}'
.text
.size(28.sp)
.color(Colors.black.withOpacity(0.85))
.make(),
16.w.heightBox,
model.remarks.text model.remarks.text
.size(28.sp) .size(28.sp)
.color(Colors.black.withOpacity(0.65)) .color(Colors.black.withOpacity(0.65))
.make(), .make(),
24.w.heightBox,
VoicePlayer(
url: model.voiceUrl,
),
24.w.heightBox,
BeeGridImageView(
urls: model.imgList?.map((e) => e.url).toList() ?? []),
], ],
), ),
), ),

@ -8,18 +8,19 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:velocity_x/velocity_x.dart'; import 'package:velocity_x/velocity_x.dart';
class MyTaskView extends StatefulWidget { class MyTaskView extends StatefulWidget {
const MyTaskView({Key? key}) : super(key: key); final EasyRefreshController refreshController;
final int type;
const MyTaskView(
{Key? key, required this.refreshController, required this.type})
: super(key: key);
@override @override
_MyTaskViewState createState() => _MyTaskViewState(); _MyTaskViewState createState() => _MyTaskViewState();
} }
class _MyTaskViewState extends State<MyTaskView> { class _MyTaskViewState extends State<MyTaskView> {
EasyRefreshController _refreshController = EasyRefreshController();
@override @override
void dispose() { void dispose() {
_refreshController.dispose();
super.dispose(); super.dispose();
} }
@ -27,9 +28,10 @@ class _MyTaskViewState extends State<MyTaskView> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return BeeListView( return BeeListView(
path: SARSAPI.task.list, path: SARSAPI.task.list,
controller: _refreshController, controller: widget.refreshController,
extraParams: { extraParams: {
'taskModel': 2, 'taskModel': 2,
'type': widget.type + 1,
}, },
convert: (json) => convert: (json) =>
json.rows.map((e) => MyTaskListModel.fromJson(e)).toList(), json.rows.map((e) => MyTaskListModel.fromJson(e)).toList(),
@ -39,7 +41,7 @@ class _MyTaskViewState extends State<MyTaskView> {
itemBuilder: (context, index) { itemBuilder: (context, index) {
return MyTaskCard( return MyTaskCard(
model: models[index], model: models[index],
refresh: () => _refreshController.callRefresh()); refresh: () => widget.refreshController.callRefresh());
}, },
separatorBuilder: (_, __) { separatorBuilder: (_, __) {
return 24.w.heightBox; return 24.w.heightBox;

@ -32,7 +32,7 @@ class PublishTaskPage extends StatefulWidget {
} }
class _PublishTaskPageState extends State<PublishTaskPage> { class _PublishTaskPageState extends State<PublishTaskPage> {
List<String> _types = ['跑腿', '代驾', '装修', '陪玩', '家政', '维修', '搬家', '家教', '其他']; List<String> _types = ['跑腿', '家政', '维修', '家教', '其他'];
// //
int _type = 0; int _type = 0;
@ -41,7 +41,9 @@ class _PublishTaskPageState extends State<PublishTaskPage> {
// //
int _service = 0; int _service = 0;
List<String> _serviceObject = ['住户', '物业', '不限']; List<String> _serviceObject = [
'住户',
];
List<String> _rewardTypes = ['赏金', '积分']; List<String> _rewardTypes = ['赏金', '积分'];
// //
@ -305,6 +307,20 @@ class _PublishTaskPageState extends State<PublishTaskPage> {
.color(Colors.black.withOpacity(0.85)) .color(Colors.black.withOpacity(0.85))
.make()), .make()),
actions: [ actions: [
..._serviceObject
.mapIndexed((e, index) => CupertinoActionSheetAction(
onPressed: () {
_service = index + 1;
Get.back();
setState(() {});
},
child: 'e'
.text
.size(28.sp)
.isIntrinsic
.color(Colors.black.withOpacity(0.85))
.make()))
.toList(),
CupertinoActionSheetAction( CupertinoActionSheetAction(
onPressed: () { onPressed: () {
_service = 1; _service = 1;

@ -1,15 +1,14 @@
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:velocity_x/velocity_x.dart';
import 'package:aku_new_community/ui/service/hall/hall_view.dart'; import 'package:aku_new_community/ui/service/hall/hall_view.dart';
import 'package:aku_new_community/ui/service/my_take_task/my_take_task_view.dart'; import 'package:aku_new_community/ui/service/my_take_task/my_take_task_view.dart';
import 'package:aku_new_community/ui/service/my_task/my_task_view.dart'; import 'package:aku_new_community/ui/service/my_task/my_task_view.dart';
import 'package:aku_new_community/ui/service/publish_task_page.dart'; import 'package:aku_new_community/ui/service/publish_task_page.dart';
import 'package:aku_new_community/widget/bee_scaffold.dart'; import 'package:aku_new_community/widget/bee_scaffold.dart';
import 'package:aku_new_community/widget/painter/tab_indicator.dart'; import 'package:aku_new_community/widget/painter/tab_indicator.dart';
import 'package:flutter/material.dart';
import 'package:flutter_easyrefresh/easy_refresh.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:velocity_x/velocity_x.dart';
class TaskPage extends StatefulWidget { class TaskPage extends StatefulWidget {
const TaskPage({Key? key}) : super(key: key); const TaskPage({Key? key}) : super(key: key);
@ -22,13 +21,25 @@ class _TaskPageState extends State<TaskPage> with TickerProviderStateMixin {
late TabController _tabController; late TabController _tabController;
List<String> _tabs = ['大厅', '我服务的', '我发布的']; List<String> _tabs = ['大厅', '我服务的', '我发布的'];
List<String> _types = ['跑腿', '家政', '维修', '家教', '其他'];
List<EasyRefreshController> _refreshControllers = [];
int _currentType = 0;
@override @override
void initState() { void initState() {
_tabController = TabController(length: _tabs.length, vsync: this); _tabController = TabController(length: _tabs.length, vsync: this);
_refreshControllers = _tabs.map((e) => EasyRefreshController()).toList();
super.initState(); super.initState();
} }
@override
void dispose() {
_refreshControllers.forEach((element) {
element.dispose();
});
super.dispose();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return BeeScaffold( return BeeScaffold(
@ -45,20 +56,46 @@ class _TaskPageState extends State<TaskPage> with TickerProviderStateMixin {
)) ))
], ],
appBarBottom: PreferredSize( appBarBottom: PreferredSize(
preferredSize: Size.fromHeight(88.w), preferredSize: Size.fromHeight((88 + 50 + 48).w),
child: Row( child: Column(
mainAxisSize: MainAxisSize.min,
children: [ children: [
..._tabs Padding(
.mapIndexed( padding: EdgeInsets.symmetric(horizontal: 16.w),
(currentValue, index) => _tabCard(currentValue, index)) child: Row(
.toList(), children: [
..._tabs
.mapIndexed((currentValue, index) =>
_tabCard(currentValue, index))
.toList(),
],
),
),
Padding(
padding: EdgeInsets.symmetric(vertical: 24.w, horizontal: 32.w),
child: Row(
children: _types
.mapIndexed((currentValue, index) =>
_typeBar(currentValue, index))
.toList(),
),
)
], ],
)), )),
body: SafeArea( body: SafeArea(
child: TabBarView(controller: _tabController, children: [ child: TabBarView(controller: _tabController, children: [
HallView(), HallView(
MyTakeTaskView(), refreshController: _refreshControllers[0],
MyTaskView(), type: _currentType,
),
MyTakeTaskView(
refreshController: _refreshControllers[1],
type: _currentType,
),
MyTaskView(
refreshController: _refreshControllers[2],
type: _currentType,
),
])), ])),
); );
} }
@ -90,4 +127,36 @@ class _TaskPageState extends State<TaskPage> with TickerProviderStateMixin {
), ),
); );
} }
Widget _typeBar(String text, int index) {
return GestureDetector(
onTap: () {
_currentType = index;
_refreshControllers[_tabController.index].callRefresh();
setState(() {});
},
child: Material(
color: Colors.transparent,
child: _currentType == index
? Container(
padding: EdgeInsets.symmetric(vertical: 8.w, horizontal: 24.w),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(30.w),
color: Color(0xFFFAC058).withOpacity(0.5),
),
child: text.text
.size(24.sp)
.color(Colors.black.withOpacity(0.65))
.make(),
)
: Container(
padding: EdgeInsets.symmetric(vertical: 8.w, horizontal: 24.w),
child: text.text
.size(24.sp)
.color(Colors.black.withOpacity(0.45))
.make(),
),
),
);
}
} }

Loading…
Cancel
Save