parent
2e8615f610
commit
9a118e2aa0
After Width: | Height: | Size: 3.1 KiB |
After Width: | Height: | Size: 478 B |
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 2.3 KiB |
After Width: | Height: | Size: 2.4 KiB |
@ -0,0 +1,11 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
extension ColorExt on Color {
|
||||
///获得此颜色的互补色
|
||||
Color get complementary {
|
||||
var r = ~this.red;
|
||||
var g = ~this.green;
|
||||
var b = ~this.blue;
|
||||
return Color.fromARGB(this.alpha, r, g, b);
|
||||
}
|
||||
}
|
@ -0,0 +1,40 @@
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
part 'hall_list_model.g.dart';
|
||||
|
||||
@JsonSerializable()
|
||||
class HallListModel {
|
||||
final int id;
|
||||
final String title;
|
||||
final int status;
|
||||
final int type;
|
||||
final int sex;
|
||||
final int serviceObject;
|
||||
final String content;
|
||||
final String appointmentDate;
|
||||
final String appointmentAddress;
|
||||
final int rewardType;
|
||||
final int reward;
|
||||
final int createType;
|
||||
final String? createName;
|
||||
final String createDate;
|
||||
factory HallListModel.fromJson(Map<String, dynamic> json) =>
|
||||
_$HallListModelFromJson(json);
|
||||
|
||||
const HallListModel({
|
||||
required this.id,
|
||||
required this.title,
|
||||
required this.status,
|
||||
required this.type,
|
||||
required this.sex,
|
||||
required this.serviceObject,
|
||||
required this.content,
|
||||
required this.appointmentDate,
|
||||
required this.appointmentAddress,
|
||||
required this.rewardType,
|
||||
required this.reward,
|
||||
required this.createType,
|
||||
this.createName,
|
||||
required this.createDate,
|
||||
});
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'hall_list_model.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// JsonSerializableGenerator
|
||||
// **************************************************************************
|
||||
|
||||
HallListModel _$HallListModelFromJson(Map<String, dynamic> json) =>
|
||||
HallListModel(
|
||||
id: json['id'] as int,
|
||||
title: json['title'] as String,
|
||||
status: json['status'] as int,
|
||||
type: json['type'] as int,
|
||||
sex: json['sex'] as int,
|
||||
serviceObject: json['serviceObject'] as int,
|
||||
content: json['content'] as String,
|
||||
appointmentDate: json['appointmentDate'] as String,
|
||||
appointmentAddress: json['appointmentAddress'] as String,
|
||||
rewardType: json['rewardType'] as int,
|
||||
reward: json['reward'] as int,
|
||||
createType: json['createType'] as int,
|
||||
createName: json['createName'] as String?,
|
||||
createDate: json['createDate'] as String,
|
||||
);
|
@ -0,0 +1,41 @@
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
part 'my_take_task_list_model.g.dart';
|
||||
|
||||
@JsonSerializable()
|
||||
class MyTakeTaskListModel {
|
||||
final int id;
|
||||
final String title;
|
||||
final int status;
|
||||
final int type;
|
||||
final int sex;
|
||||
final int serviceObject;
|
||||
final String content;
|
||||
final String appointmentDate;
|
||||
final String appointmentAddress;
|
||||
final int rewardType;
|
||||
final int reward;
|
||||
final int createType;
|
||||
final String? createName;
|
||||
final String createDate;
|
||||
|
||||
factory MyTakeTaskListModel.fromJson(Map<String, dynamic> json) =>
|
||||
_$MyTakeTaskListModelFromJson(json);
|
||||
|
||||
const MyTakeTaskListModel({
|
||||
required this.id,
|
||||
required this.title,
|
||||
required this.status,
|
||||
required this.type,
|
||||
required this.sex,
|
||||
required this.serviceObject,
|
||||
required this.content,
|
||||
required this.appointmentDate,
|
||||
required this.appointmentAddress,
|
||||
required this.rewardType,
|
||||
required this.reward,
|
||||
required this.createType,
|
||||
this.createName,
|
||||
required this.createDate,
|
||||
});
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'my_take_task_list_model.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// JsonSerializableGenerator
|
||||
// **************************************************************************
|
||||
|
||||
MyTakeTaskListModel _$MyTakeTaskListModelFromJson(Map<String, dynamic> json) =>
|
||||
MyTakeTaskListModel(
|
||||
id: json['id'] as int,
|
||||
title: json['title'] as String,
|
||||
status: json['status'] as int,
|
||||
type: json['type'] as int,
|
||||
sex: json['sex'] as int,
|
||||
serviceObject: json['serviceObject'] as int,
|
||||
content: json['content'] as String,
|
||||
appointmentDate: json['appointmentDate'] as String,
|
||||
appointmentAddress: json['appointmentAddress'] as String,
|
||||
rewardType: json['rewardType'] as int,
|
||||
reward: json['reward'] as int,
|
||||
createType: json['createType'] as int,
|
||||
createName: json['createName'] as String?,
|
||||
createDate: json['createDate'] as String,
|
||||
);
|
@ -0,0 +1,40 @@
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
part 'my_task_list_model.g.dart';
|
||||
|
||||
@JsonSerializable()
|
||||
class MyTaskListModel {
|
||||
final int id;
|
||||
final String title;
|
||||
final int status;
|
||||
final int type;
|
||||
final int sex;
|
||||
final int serviceObject;
|
||||
final String content;
|
||||
final String appointmentDate;
|
||||
final String appointmentAddress;
|
||||
final int rewardType;
|
||||
final int reward;
|
||||
final int createType;
|
||||
final String? createName;
|
||||
final String createDate;
|
||||
factory MyTaskListModel.fromJson(Map<String, dynamic> json) =>
|
||||
_$MyTaskListModelFromJson(json);
|
||||
|
||||
const MyTaskListModel({
|
||||
required this.id,
|
||||
required this.title,
|
||||
required this.status,
|
||||
required this.type,
|
||||
required this.sex,
|
||||
required this.serviceObject,
|
||||
required this.content,
|
||||
required this.appointmentDate,
|
||||
required this.appointmentAddress,
|
||||
required this.rewardType,
|
||||
required this.reward,
|
||||
required this.createType,
|
||||
this.createName,
|
||||
required this.createDate,
|
||||
});
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'my_task_list_model.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// JsonSerializableGenerator
|
||||
// **************************************************************************
|
||||
|
||||
MyTaskListModel _$MyTaskListModelFromJson(Map<String, dynamic> json) =>
|
||||
MyTaskListModel(
|
||||
id: json['id'] as int,
|
||||
title: json['title'] as String,
|
||||
status: json['status'] as int,
|
||||
type: json['type'] as int,
|
||||
sex: json['sex'] as int,
|
||||
serviceObject: json['serviceObject'] as int,
|
||||
content: json['content'] as String,
|
||||
appointmentDate: json['appointmentDate'] as String,
|
||||
appointmentAddress: json['appointmentAddress'] as String,
|
||||
rewardType: json['rewardType'] as int,
|
||||
reward: json['reward'] as int,
|
||||
createType: json['createType'] as int,
|
||||
createName: json['createName'] as String?,
|
||||
createDate: json['createDate'] as String,
|
||||
);
|
@ -0,0 +1,151 @@
|
||||
import 'package:aku_new_community/gen/assets.gen.dart';
|
||||
import 'package:aku_new_community/models/task/hall_list_model.dart';
|
||||
import 'package:aku_new_community/ui/service/hall/hall_detail_page.dart';
|
||||
import 'package:aku_new_community/ui/service/task_map.dart';
|
||||
import 'package:aku_new_community/widget/buttons/card_bottom_button.dart';
|
||||
import 'package:flustars/flustars.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:velocity_x/velocity_x.dart';
|
||||
|
||||
class HallCard extends StatelessWidget {
|
||||
final HallListModel model;
|
||||
final VoidCallback refresh;
|
||||
|
||||
const HallCard({Key? key, required this.model, required this.refresh})
|
||||
: super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
var head = Row(
|
||||
children: [
|
||||
Container(
|
||||
width: 100.w,
|
||||
height: 50.w,
|
||||
alignment: Alignment.center,
|
||||
decoration: BoxDecoration(
|
||||
color: Color(0xFFFFF7E6),
|
||||
borderRadius: BorderRadius.circular(8.w),
|
||||
),
|
||||
child: '#${TaskMap.typeToString[model.type]}'
|
||||
.text
|
||||
.size(28.sp)
|
||||
.color(Color(0xFFFA8C16))
|
||||
.make(),
|
||||
),
|
||||
Spacer(),
|
||||
Assets.icons.intergral.image(width: 24.w, height: 24.w),
|
||||
8.w.widthBox,
|
||||
'${model.reward}'.text.size(32.sp).color(Colors.red).make()
|
||||
],
|
||||
);
|
||||
return GestureDetector(
|
||||
onTap: () {
|
||||
Get.to(() => HallDetailPage(model: model));
|
||||
},
|
||||
child: Container(
|
||||
width: double.infinity,
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white,
|
||||
borderRadius: BorderRadius.circular(8.w),
|
||||
),
|
||||
padding: EdgeInsets.symmetric(horizontal: 24.w, vertical: 24.w),
|
||||
child: Column(
|
||||
children: [
|
||||
head,
|
||||
34.w.heightBox,
|
||||
Row(
|
||||
children: [
|
||||
Assets.icons.clockCircle.image(width: 36.w, height: 36.w),
|
||||
24.w.widthBox,
|
||||
'${DateUtil.formatDateStr(model.appointmentDate)}'
|
||||
.text
|
||||
.size(24.sp)
|
||||
.color(Colors.black.withOpacity(0.65))
|
||||
.make(),
|
||||
],
|
||||
),
|
||||
20.w.heightBox,
|
||||
Row(
|
||||
children: [
|
||||
Assets.icons.environment.image(width: 36.w, height: 36.w),
|
||||
24.w.widthBox,
|
||||
'${model.appointmentAddress}'
|
||||
.text
|
||||
.size(24.sp)
|
||||
.color(Colors.black.withOpacity(0.65))
|
||||
.make(),
|
||||
],
|
||||
),
|
||||
34.w.heightBox,
|
||||
Container(
|
||||
width: 638.w,
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.black.withOpacity(0.03),
|
||||
borderRadius: BorderRadius.circular(8.w)),
|
||||
padding: EdgeInsets.symmetric(horizontal: 24.w, vertical: 24.w),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
'#${TaskMap.typeToString[model.type]}'
|
||||
.text
|
||||
.size(28.sp)
|
||||
.color(Colors.black.withOpacity(0.85))
|
||||
.make(),
|
||||
16.w.heightBox,
|
||||
model.content.text
|
||||
.size(28.sp)
|
||||
.color(Colors.black.withOpacity(0.65))
|
||||
.make(),
|
||||
],
|
||||
),
|
||||
),
|
||||
40.w.heightBox,
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.end,
|
||||
children: [
|
||||
40.w.heightBox,
|
||||
Row(
|
||||
children: [
|
||||
Spacer(),
|
||||
CardBottomButton.yellow(text: '领取任务', onPressed: () {}),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _cardBottom(int) {
|
||||
switch (int) {
|
||||
case 1:
|
||||
case 2:
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.end,
|
||||
children: [
|
||||
40.w.heightBox,
|
||||
CardBottomButton.white(text: '取消订单', onPressed: () {}),
|
||||
CardBottomButton.yellow(text: '确认完成', onPressed: () {}),
|
||||
],
|
||||
);
|
||||
case 4:
|
||||
return Column(
|
||||
children: [
|
||||
32.w.heightBox,
|
||||
Row(
|
||||
children: [
|
||||
'客户取消:暂不需要该服务'.text.size(24.sp).color(Colors.red).make(),
|
||||
Spacer(),
|
||||
],
|
||||
),
|
||||
],
|
||||
);
|
||||
default:
|
||||
return SizedBox.shrink();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,262 @@
|
||||
import 'package:aku_new_community/gen/assets.gen.dart';
|
||||
import 'package:aku_new_community/models/task/hall_list_model.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_scaffold.dart';
|
||||
import 'package:flustars/flustars.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:velocity_x/velocity_x.dart';
|
||||
|
||||
class HallDetailPage extends StatefulWidget {
|
||||
final HallListModel model;
|
||||
|
||||
const HallDetailPage({Key? key, required this.model}) : super(key: key);
|
||||
|
||||
@override
|
||||
_HallDetailPageState createState() => _HallDetailPageState();
|
||||
}
|
||||
|
||||
class _HallDetailPageState extends State<HallDetailPage> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return BeeScaffold(
|
||||
extendBody: true,
|
||||
title: '',
|
||||
body: Stack(
|
||||
children: [
|
||||
Column(
|
||||
children: [
|
||||
Container(
|
||||
width: double.infinity,
|
||||
height: 380.w,
|
||||
decoration: BoxDecoration(
|
||||
gradient: LinearGradient(
|
||||
begin: Alignment.centerLeft,
|
||||
end: Alignment.centerRight,
|
||||
colors: widget.model.status == 4
|
||||
? [
|
||||
Colors.white,
|
||||
Color(0xFFADACAC),
|
||||
]
|
||||
: [
|
||||
Color(0xFFFFB737),
|
||||
Color(0xFFFFD361),
|
||||
]),
|
||||
),
|
||||
child: Column(
|
||||
children: [
|
||||
150.w.heightBox,
|
||||
Row(
|
||||
children: [
|
||||
Padding(
|
||||
padding: EdgeInsets.symmetric(horizontal: 32.w),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
'${TaskMap.detailStatusToString[widget.model.status]}'
|
||||
.text
|
||||
.size(40.sp)
|
||||
.color(Colors.black)
|
||||
.bold
|
||||
.make(),
|
||||
'${TaskMap.subStatus[widget.model.status]}'
|
||||
.text
|
||||
.size(24.sp)
|
||||
.color(Colors.black.withOpacity(0.45))
|
||||
.make(),
|
||||
],
|
||||
),
|
||||
),
|
||||
Spacer(),
|
||||
Padding(
|
||||
padding: EdgeInsets.only(right: 32.w),
|
||||
child: MaterialButton(
|
||||
color: Colors.white,
|
||||
elevation: 0,
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(8.w),
|
||||
),
|
||||
onPressed: () {},
|
||||
child: '取消订单'
|
||||
.text
|
||||
.size(24.sp)
|
||||
.color(Colors.black.withOpacity(0.65))
|
||||
.make(),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
Flexible(
|
||||
child: Container(
|
||||
width: double.infinity,
|
||||
color: Color(0xFFE5E5E5),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
Positioned(
|
||||
top: 280.w,
|
||||
left: 32.w,
|
||||
right: 32.w,
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
_content(),
|
||||
24.w.heightBox,
|
||||
_taskInfo(),
|
||||
],
|
||||
)),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _taskInfo() {
|
||||
return Container(
|
||||
width: 686.w,
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white,
|
||||
borderRadius: BorderRadius.circular(8.w),
|
||||
),
|
||||
padding: EdgeInsets.symmetric(horizontal: 24.w, vertical: 24.w),
|
||||
child: Column(
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
'任务信息'.text.size(28.sp).color(Colors.black).bold.make(),
|
||||
Spacer(),
|
||||
],
|
||||
),
|
||||
24.w.heightBox,
|
||||
BeeDivider.horizontal(),
|
||||
24.w.heightBox,
|
||||
Row(
|
||||
children: [
|
||||
'创建时间'
|
||||
.text
|
||||
.size(24.sp)
|
||||
.color(Colors.black.withOpacity(0.45))
|
||||
.make(),
|
||||
Spacer(),
|
||||
'${DateUtil.formatDateStr(widget.model.createDate)}'
|
||||
.text
|
||||
.size(24.sp)
|
||||
.color(Colors.black.withOpacity(0.45))
|
||||
.make()
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _content() {
|
||||
var head = Row(
|
||||
children: [
|
||||
Container(
|
||||
width: 100.w,
|
||||
height: 50.w,
|
||||
alignment: Alignment.center,
|
||||
decoration: BoxDecoration(
|
||||
color: Color(0xFFFFF7E6),
|
||||
borderRadius: BorderRadius.circular(8.w),
|
||||
),
|
||||
child: '#${TaskMap.typeToString[widget.model.type]}'
|
||||
.text
|
||||
.size(28.sp)
|
||||
.color(Color(0xFFFA8C16))
|
||||
.make(),
|
||||
),
|
||||
Spacer(),
|
||||
Assets.icons.intergral.image(width: 24.w, height: 24.w),
|
||||
8.w.widthBox,
|
||||
'${widget.model.reward}'.text.size(32.sp).color(Colors.red).make()
|
||||
],
|
||||
);
|
||||
return Container(
|
||||
width: 686.w,
|
||||
height: 500.w,
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white,
|
||||
borderRadius: BorderRadius.circular(8.w),
|
||||
),
|
||||
padding: EdgeInsets.symmetric(horizontal: 24.w, vertical: 24.w),
|
||||
child: Column(
|
||||
children: [
|
||||
head,
|
||||
34.w.heightBox,
|
||||
Row(
|
||||
children: [
|
||||
Assets.icons.clockCircle.image(width: 36.w, height: 36.w),
|
||||
24.w.widthBox,
|
||||
'${DateUtil.formatDateStr(widget.model.appointmentDate)}'
|
||||
.text
|
||||
.size(24.sp)
|
||||
.color(Colors.black.withOpacity(0.65))
|
||||
.make(),
|
||||
],
|
||||
),
|
||||
20.w.heightBox,
|
||||
Row(
|
||||
children: [
|
||||
Assets.icons.environment.image(width: 36.w, height: 36.w),
|
||||
24.w.widthBox,
|
||||
'${widget.model.appointmentAddress}'
|
||||
.text
|
||||
.size(24.sp)
|
||||
.color(Colors.black.withOpacity(0.65))
|
||||
.make(),
|
||||
],
|
||||
),
|
||||
34.w.heightBox,
|
||||
Container(
|
||||
width: 638.w,
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.black.withOpacity(0.03),
|
||||
borderRadius: BorderRadius.circular(8.w)),
|
||||
padding: EdgeInsets.symmetric(horizontal: 24.w, vertical: 24.w),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
'#${TaskMap.typeToString[widget.model.type]}'
|
||||
.text
|
||||
.size(28.sp)
|
||||
.color(Colors.black.withOpacity(0.85))
|
||||
.make(),
|
||||
16.w.heightBox,
|
||||
widget.model.content.text
|
||||
.size(28.sp)
|
||||
.color(Colors.black.withOpacity(0.65))
|
||||
.make(),
|
||||
],
|
||||
),
|
||||
),
|
||||
32.w.heightBox,
|
||||
BeeDivider.horizontal(),
|
||||
32.w.heightBox,
|
||||
Row(
|
||||
children: [
|
||||
Assets.icons.reward.image(width: 36.w, height: 36.w),
|
||||
24.w.widthBox,
|
||||
'报酬'
|
||||
.text
|
||||
.size(26.sp)
|
||||
.color(Colors.black.withOpacity(0.45))
|
||||
.make(),
|
||||
Spacer(),
|
||||
'¥${widget.model.reward}'
|
||||
.text
|
||||
.size(32.sp)
|
||||
.color(Colors.red)
|
||||
.make(),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -0,0 +1,49 @@
|
||||
import 'package:aku_new_community/constants/api.dart';
|
||||
import 'package:aku_new_community/models/task/hall_list_model.dart';
|
||||
import 'package:aku_new_community/pages/things_page/widget/bee_list_view.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_easyrefresh/easy_refresh.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:velocity_x/src/extensions/num_ext.dart';
|
||||
|
||||
import 'hall_card.dart';
|
||||
|
||||
class HallView extends StatefulWidget {
|
||||
const HallView({Key? key}) : super(key: key);
|
||||
|
||||
@override
|
||||
_HallViewState createState() => _HallViewState();
|
||||
}
|
||||
|
||||
class _HallViewState extends State<HallView> {
|
||||
EasyRefreshController _refreshController = EasyRefreshController();
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_refreshController.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return BeeListView(
|
||||
path: API.manager.task.hallList,
|
||||
controller: _refreshController,
|
||||
extraParams: {},
|
||||
convert: (json) =>
|
||||
json.tableList!.map((e) => HallListModel.fromJson(e)).toList(),
|
||||
builder: (models) {
|
||||
return ListView.separated(
|
||||
padding: EdgeInsets.symmetric(horizontal: 32.w, vertical: 24.w),
|
||||
itemBuilder: (context, index) {
|
||||
return HallCard(
|
||||
model: models[index],
|
||||
refresh: () => _refreshController.callRefresh());
|
||||
},
|
||||
separatorBuilder: (_, __) {
|
||||
return 24.w.heightBox;
|
||||
},
|
||||
itemCount: models.length);
|
||||
});
|
||||
}
|
||||
}
|
@ -0,0 +1,165 @@
|
||||
import 'package:aku_new_community/gen/assets.gen.dart';
|
||||
import 'package:aku_new_community/models/task/hall_list_model.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/buttons/card_bottom_button.dart';
|
||||
import 'package:flustars/flustars.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:velocity_x/velocity_x.dart';
|
||||
|
||||
class MyTakeTaskCard extends StatelessWidget {
|
||||
final HallListModel model;
|
||||
final VoidCallback refresh;
|
||||
|
||||
const MyTakeTaskCard({Key? key, required this.model, required this.refresh})
|
||||
: super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
width: double.infinity,
|
||||
decoration: BoxDecoration(
|
||||
color: Color(0xFFFFF7E6),
|
||||
borderRadius: BorderRadius.circular(8.w),
|
||||
),
|
||||
padding: EdgeInsets.symmetric(horizontal: 24.w, vertical: 24.w),
|
||||
child: Column(
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
'接单时间 ${DateUtil.formatDateStr(model.createDate)}'
|
||||
.text
|
||||
.size(26.sp)
|
||||
.color(Colors.black.withOpacity(0.45))
|
||||
.make(),
|
||||
Spacer(),
|
||||
'${TaskMap.statusToString[model.status]}'
|
||||
.text
|
||||
.size(28.sp)
|
||||
.color(Colors.black.withOpacity(0.85))
|
||||
.bold
|
||||
.make()
|
||||
],
|
||||
),
|
||||
20.w.heightBox,
|
||||
BeeDivider.horizontal(),
|
||||
34.w.heightBox,
|
||||
Row(
|
||||
children: [
|
||||
Assets.icons.clockCircle.image(width: 36.w, height: 36.w),
|
||||
24.w.widthBox,
|
||||
'${DateUtil.formatDateStr(model.appointmentDate)}'
|
||||
.text
|
||||
.size(24.sp)
|
||||
.color(Colors.black.withOpacity(0.65))
|
||||
.make(),
|
||||
],
|
||||
),
|
||||
20.w.heightBox,
|
||||
Row(
|
||||
children: [
|
||||
Assets.icons.environment.image(width: 36.w, height: 36.w),
|
||||
24.w.widthBox,
|
||||
'${model.appointmentAddress}'
|
||||
.text
|
||||
.size(24.sp)
|
||||
.color(Colors.black.withOpacity(0.65))
|
||||
.make(),
|
||||
],
|
||||
),
|
||||
34.w.heightBox,
|
||||
Container(
|
||||
width: 638.w,
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.black.withOpacity(0.03),
|
||||
borderRadius: BorderRadius.circular(8.w)),
|
||||
padding: EdgeInsets.symmetric(horizontal: 24.w, vertical: 24.w),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
'#${TaskMap.typeToString[model.type]}'
|
||||
.text
|
||||
.size(28.sp)
|
||||
.color(Colors.black.withOpacity(0.85))
|
||||
.make(),
|
||||
16.w.heightBox,
|
||||
model.content.text
|
||||
.size(28.sp)
|
||||
.color(Colors.black.withOpacity(0.65))
|
||||
.make(),
|
||||
],
|
||||
),
|
||||
),
|
||||
40.w.heightBox,
|
||||
Row(
|
||||
children: [
|
||||
Spacer(),
|
||||
RichText(
|
||||
text: TextSpan(
|
||||
text: '实付 ',
|
||||
children: model.rewardType == 2
|
||||
? [
|
||||
WidgetSpan(
|
||||
child: Assets.icons.intergral
|
||||
.image(width: 24.w, height: 24.w),
|
||||
),
|
||||
model.reward
|
||||
.toString()
|
||||
.textSpan
|
||||
.size(32.sp)
|
||||
.color(Colors.red)
|
||||
.make(),
|
||||
]
|
||||
: [
|
||||
'¥ ${model.reward}'
|
||||
.toString()
|
||||
.textSpan
|
||||
.size(32.sp)
|
||||
.color(Colors.red)
|
||||
.make(),
|
||||
],
|
||||
style: TextStyle(
|
||||
color: Colors.black.withOpacity(0.65), fontSize: 24.sp),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
_cardBottom(model.status),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _cardBottom(int) {
|
||||
switch (int) {
|
||||
case 1:
|
||||
case 2:
|
||||
return Column(
|
||||
children: [
|
||||
40.w.heightBox,
|
||||
Row(
|
||||
children: [
|
||||
CardBottomButton.white(text: '取消订单', onPressed: () {}),
|
||||
CardBottomButton.yellow(text: '确认完成', onPressed: () {}),
|
||||
],
|
||||
)
|
||||
],
|
||||
);
|
||||
case 4:
|
||||
return Column(
|
||||
children: [
|
||||
32.w.heightBox,
|
||||
Row(
|
||||
children: [
|
||||
'客户取消:暂不需要该服务'.text.size(24.sp).color(Colors.red).make(),
|
||||
Spacer(),
|
||||
],
|
||||
),
|
||||
],
|
||||
);
|
||||
default:
|
||||
return SizedBox.shrink();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,48 @@
|
||||
import 'package:aku_new_community/constants/api.dart';
|
||||
import 'package:aku_new_community/models/task/my_take_task_list_model.dart';
|
||||
import 'package:aku_new_community/pages/things_page/widget/bee_list_view.dart';
|
||||
import 'package:aku_new_community/ui/service/my_take_task/my_take_task_card.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_easyrefresh/easy_refresh.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:velocity_x/velocity_x.dart';
|
||||
|
||||
class MyTakeTaskView extends StatefulWidget {
|
||||
const MyTakeTaskView({Key? key}) : super(key: key);
|
||||
|
||||
@override
|
||||
_MyTakeTaskViewState createState() => _MyTakeTaskViewState();
|
||||
}
|
||||
|
||||
class _MyTakeTaskViewState extends State<MyTakeTaskView> {
|
||||
EasyRefreshController _refreshController = EasyRefreshController();
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_refreshController.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return BeeListView(
|
||||
path: API.manager.task.myTakeTask,
|
||||
controller: _refreshController,
|
||||
convert: (json) => json.tableList!
|
||||
.map((e) => MyTakeTaskListModel.fromJson(e))
|
||||
.toList(),
|
||||
builder: (models) {
|
||||
return ListView.separated(
|
||||
padding: EdgeInsets.symmetric(horizontal: 32.w, vertical: 24.w),
|
||||
itemBuilder: (context, index) {
|
||||
return MyTakeTaskCard(
|
||||
model: models[index],
|
||||
refresh: () => _refreshController.callRefresh());
|
||||
},
|
||||
separatorBuilder: (_, __) {
|
||||
return 24.w.heightBox;
|
||||
},
|
||||
itemCount: models.length);
|
||||
});
|
||||
}
|
||||
}
|
@ -0,0 +1,180 @@
|
||||
import 'package:aku_new_community/gen/assets.gen.dart';
|
||||
import 'package:aku_new_community/models/task/my_task_list_model.dart';
|
||||
import 'package:aku_new_community/ui/service/task_map.dart';
|
||||
import 'package:aku_new_community/widget/buttons/card_bottom_button.dart';
|
||||
import 'package:flustars/flustars.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:velocity_x/velocity_x.dart';
|
||||
|
||||
class MyTaskCard extends StatelessWidget {
|
||||
final MyTaskListModel model;
|
||||
final VoidCallback refresh;
|
||||
|
||||
const MyTaskCard({Key? key, required this.model, required this.refresh})
|
||||
: super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
var head = Row(
|
||||
children: [
|
||||
Container(
|
||||
width: 100.w,
|
||||
height: 50.w,
|
||||
alignment: Alignment.center,
|
||||
decoration: BoxDecoration(
|
||||
color: Color(0xFFFFF7E6),
|
||||
borderRadius: BorderRadius.circular(8.w),
|
||||
),
|
||||
child: '#${TaskMap.typeToString[model.type]}'
|
||||
.text
|
||||
.size(28.sp)
|
||||
.color(Color(0xFFFA8C16))
|
||||
.make(),
|
||||
),
|
||||
Spacer(),
|
||||
'${TaskMap.statusToString[model.status]}'
|
||||
.text
|
||||
.size(28.sp)
|
||||
.color(Colors.black.withOpacity(0.85))
|
||||
.bold
|
||||
.make()
|
||||
],
|
||||
);
|
||||
return Container(
|
||||
width: double.infinity,
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white,
|
||||
borderRadius: BorderRadius.circular(8.w),
|
||||
),
|
||||
padding: EdgeInsets.symmetric(horizontal: 24.w, vertical: 24.w),
|
||||
child: Column(
|
||||
children: [
|
||||
head,
|
||||
34.w.heightBox,
|
||||
Row(
|
||||
children: [
|
||||
Assets.icons.clockCircle.image(width: 36.w, height: 36.w),
|
||||
24.w.widthBox,
|
||||
'${DateUtil.formatDateStr(model.appointmentDate)}'
|
||||
.text
|
||||
.size(24.sp)
|
||||
.color(Colors.black.withOpacity(0.65))
|
||||
.make(),
|
||||
],
|
||||
),
|
||||
20.w.heightBox,
|
||||
Row(
|
||||
children: [
|
||||
Assets.icons.environment.image(width: 36.w, height: 36.w),
|
||||
24.w.widthBox,
|
||||
'${model.appointmentAddress}'
|
||||
.text
|
||||
.size(24.sp)
|
||||
.color(Colors.black.withOpacity(0.65))
|
||||
.make(),
|
||||
],
|
||||
),
|
||||
34.w.heightBox,
|
||||
Container(
|
||||
width: 638.w,
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.black.withOpacity(0.03),
|
||||
borderRadius: BorderRadius.circular(8.w)),
|
||||
padding: EdgeInsets.symmetric(horizontal: 24.w, vertical: 24.w),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
'#${TaskMap.typeToString[model.type]}'
|
||||
.text
|
||||
.size(28.sp)
|
||||
.color(Colors.black.withOpacity(0.85))
|
||||
.make(),
|
||||
16.w.heightBox,
|
||||
model.content.text
|
||||
.size(28.sp)
|
||||
.color(Colors.black.withOpacity(0.65))
|
||||
.make(),
|
||||
],
|
||||
),
|
||||
),
|
||||
40.w.heightBox,
|
||||
Row(
|
||||
children: [
|
||||
Spacer(),
|
||||
RichText(
|
||||
text: TextSpan(
|
||||
text: '实付 ',
|
||||
children: model.rewardType == 2
|
||||
? [
|
||||
WidgetSpan(
|
||||
child: Assets.icons.intergral
|
||||
.image(width: 24.w, height: 24.w),
|
||||
),
|
||||
model.reward
|
||||
.toString()
|
||||
.textSpan
|
||||
.size(32.sp)
|
||||
.color(Colors.red)
|
||||
.make(),
|
||||
]
|
||||
: [
|
||||
'¥ ${model.reward}'
|
||||
.toString()
|
||||
.textSpan
|
||||
.size(32.sp)
|
||||
.color(Colors.red)
|
||||
.make(),
|
||||
],
|
||||
style: TextStyle(
|
||||
color: Colors.black.withOpacity(0.65), fontSize: 24.sp),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.end,
|
||||
children: [
|
||||
40.w.heightBox,
|
||||
Row(
|
||||
children: [
|
||||
Spacer(),
|
||||
CardBottomButton.yellow(text: '取消订单', onPressed: () {}),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _cardBottom(int) {
|
||||
switch (int) {
|
||||
case 1:
|
||||
case 2:
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.end,
|
||||
children: [
|
||||
40.w.heightBox,
|
||||
CardBottomButton.white(text: '取消订单', onPressed: () {}),
|
||||
CardBottomButton.yellow(text: '确认完成', onPressed: () {}),
|
||||
],
|
||||
);
|
||||
case 4:
|
||||
return Column(
|
||||
children: [
|
||||
32.w.heightBox,
|
||||
Row(
|
||||
children: [
|
||||
'客户取消:暂不需要该服务'.text.size(24.sp).color(Colors.red).make(),
|
||||
Spacer(),
|
||||
],
|
||||
),
|
||||
],
|
||||
);
|
||||
default:
|
||||
return SizedBox.shrink();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,47 @@
|
||||
import 'package:aku_new_community/constants/api.dart';
|
||||
import 'package:aku_new_community/models/task/my_task_list_model.dart';
|
||||
import 'package:aku_new_community/pages/things_page/widget/bee_list_view.dart';
|
||||
import 'package:aku_new_community/ui/service/my_task/my_task_card.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_easyrefresh/easy_refresh.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:velocity_x/velocity_x.dart';
|
||||
|
||||
class MyTaskView extends StatefulWidget {
|
||||
const MyTaskView({Key? key}) : super(key: key);
|
||||
|
||||
@override
|
||||
_MyTaskViewState createState() => _MyTaskViewState();
|
||||
}
|
||||
|
||||
class _MyTaskViewState extends State<MyTaskView> {
|
||||
EasyRefreshController _refreshController = EasyRefreshController();
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_refreshController.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return BeeListView(
|
||||
path: API.manager.task.myTask,
|
||||
controller: _refreshController,
|
||||
convert: (json) =>
|
||||
json.tableList!.map((e) => MyTaskListModel.fromJson(e)).toList(),
|
||||
builder: (models) {
|
||||
return ListView.separated(
|
||||
padding: EdgeInsets.symmetric(horizontal: 32.w, vertical: 24.w),
|
||||
itemBuilder: (context, index) {
|
||||
return MyTaskCard(
|
||||
model: models[index],
|
||||
refresh: () => _refreshController.callRefresh());
|
||||
},
|
||||
separatorBuilder: (_, __) {
|
||||
return 24.w.heightBox;
|
||||
},
|
||||
itemCount: models.length);
|
||||
});
|
||||
}
|
||||
}
|
@ -0,0 +1,61 @@
|
||||
import 'package:aku_new_community/constants/api.dart';
|
||||
import 'package:aku_new_community/utils/network/net_util.dart';
|
||||
|
||||
class TaskFunc {
|
||||
///确认发布
|
||||
static Future<bool> publish(
|
||||
{required String title,
|
||||
required int taskType,
|
||||
required int taskSex,
|
||||
required int serviceObject,
|
||||
required String taskContent,
|
||||
required String taskDate,
|
||||
required String taskAddress,
|
||||
required int rewardType,
|
||||
required String reward}) async {
|
||||
var base = await NetUtil().post(API.manager.task.publish, params: {
|
||||
'title': title,
|
||||
'taskType': taskType,
|
||||
'taskSex': taskSex,
|
||||
'serviceObject': serviceObject,
|
||||
'taskContent': taskContent,
|
||||
'taskDate': taskDate,
|
||||
'taskAddress': taskAddress,
|
||||
'rewardType': rewardType,
|
||||
'reward': int.parse(reward),
|
||||
});
|
||||
return base.status ?? false;
|
||||
}
|
||||
|
||||
///取消任务
|
||||
static Future<bool> cancel({
|
||||
required int taskId,
|
||||
}) async {
|
||||
var base = await NetUtil().post(API.manager.task.cancel, params: {
|
||||
'taskId': taskId,
|
||||
});
|
||||
return base.status ?? false;
|
||||
}
|
||||
|
||||
///接取任务
|
||||
|
||||
static Future<bool> take({
|
||||
required int taskId,
|
||||
}) async {
|
||||
var base = await NetUtil().post(API.manager.task.take, params: {
|
||||
'taskId': taskId,
|
||||
});
|
||||
return base.status ?? false;
|
||||
}
|
||||
|
||||
///完成任务
|
||||
|
||||
static Future<bool> finish({
|
||||
required int taskId,
|
||||
}) async {
|
||||
var base = await NetUtil().post(API.manager.task.finish, params: {
|
||||
'taskId': taskId,
|
||||
});
|
||||
return base.status ?? false;
|
||||
}
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
class TaskMap {
|
||||
static Map<int, String> statusToString = {
|
||||
1: '未接单',
|
||||
2: '待处理',
|
||||
3: '已完成',
|
||||
4: '已取消'
|
||||
};
|
||||
|
||||
static Map<int, String> typeToString = {1: '跑腿', 2: '代驾', 3: '装修', 4: '陪玩'};
|
||||
static Map<int, String> serviceObject = {1: '住户', 2: '物业', 3: '不限'};
|
||||
|
||||
static Map<int, String> rewardType = {1: '赏金', 2: '积分'};
|
||||
static Map<int, String> detailStatusToString = {
|
||||
1: '已发布',
|
||||
2: '待处理',
|
||||
3: '已完成',
|
||||
4: '已取消'
|
||||
};
|
||||
|
||||
static Map<int, String> subStatus = {
|
||||
1: '请耐心等待帮手领取任务',
|
||||
2: '帮手正在为您服务中',
|
||||
3: '帮手已完成任务',
|
||||
4: '该任务已取消'
|
||||
};
|
||||
}
|
@ -0,0 +1,91 @@
|
||||
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_task/my_task_view.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/painter/tab_indicator.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:velocity_x/velocity_x.dart';
|
||||
|
||||
class TaskPage extends StatefulWidget {
|
||||
const TaskPage({Key? key}) : super(key: key);
|
||||
|
||||
@override
|
||||
_TaskPageState createState() => _TaskPageState();
|
||||
}
|
||||
|
||||
class _TaskPageState extends State<TaskPage> with TickerProviderStateMixin {
|
||||
late TabController _tabController;
|
||||
|
||||
List<String> _tabs = ['大厅', '我服务的', '我发布的'];
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
_tabController = TabController(length: _tabs.length, vsync: this);
|
||||
super.initState();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return BeeScaffold(
|
||||
title: '',
|
||||
actions: [
|
||||
IconButton(
|
||||
onPressed: () {
|
||||
Get.to(() => PublishTaskPage());
|
||||
},
|
||||
icon: Icon(
|
||||
Icons.add_circle_outline,
|
||||
size: 40.w,
|
||||
color: Colors.black,
|
||||
))
|
||||
],
|
||||
appBarBottom: PreferredSize(
|
||||
preferredSize: Size.fromHeight(88.w),
|
||||
child: Row(
|
||||
children: [
|
||||
..._tabs
|
||||
.mapIndexed(
|
||||
(currentValue, index) => _tabCard(currentValue, index))
|
||||
.toList(),
|
||||
],
|
||||
)),
|
||||
body: SafeArea(
|
||||
child: TabBarView(controller: _tabController, children: [
|
||||
HallView(),
|
||||
MyTakeTaskView(),
|
||||
MyTaskView(),
|
||||
])),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _tabCard(String title, int index) {
|
||||
var select = index == _tabController.index;
|
||||
return GestureDetector(
|
||||
onTap: () {
|
||||
_tabController.animateTo(index);
|
||||
setState(() {});
|
||||
},
|
||||
child: Material(
|
||||
color: Colors.transparent,
|
||||
child: Padding(
|
||||
padding: EdgeInsets.symmetric(horizontal: 16.w, vertical: 8.w),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
title.text
|
||||
.size(select ? 36.sp : 32.sp)
|
||||
.fontWeight(select ? FontWeight.bold : FontWeight.normal)
|
||||
.color(Colors.black.withOpacity(select ? 0.85 : 0.65))
|
||||
.make(),
|
||||
8.w.heightBox,
|
||||
select ? TabIndicator() : 10.w.heightBox,
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
import 'package:aku_new_community/widget/painter/tab_indicator_parinter.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
|
||||
class TabIndicator extends StatelessWidget {
|
||||
final double? width;
|
||||
final double? height;
|
||||
|
||||
const TabIndicator({Key? key, this.width, this.height}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return SizedBox(
|
||||
width: width ?? 40.w,
|
||||
height: height ?? 10.w,
|
||||
child: CustomPaint(
|
||||
painter: TabIndicatorPainter(),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
import 'package:aku_new_community/base/base_style.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class TabIndicatorPainter extends CustomPainter {
|
||||
@override
|
||||
void paint(Canvas canvas, Size size) {
|
||||
Paint paint = Paint()
|
||||
..color = kPrimaryColor
|
||||
..strokeCap = StrokeCap.round
|
||||
..strokeWidth = 2
|
||||
..style = PaintingStyle.stroke;
|
||||
Path path = Path();
|
||||
path.moveTo(0, 0);
|
||||
path.quadraticBezierTo(size.width / 2, size.height, size.width, 0);
|
||||
canvas.drawPath(path, paint);
|
||||
}
|
||||
|
||||
@override
|
||||
bool shouldRebuildSemantics(covariant CustomPainter oldDelegate) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@override
|
||||
bool shouldRepaint(covariant CustomPainter oldDelegate) {
|
||||
return false;
|
||||
}
|
||||
}
|
Loading…
Reference in new issue