工单管理 接单人模块

master
张萌 3 years ago
parent ddc0dd448f
commit b5f1320f84

@ -25,9 +25,9 @@ class UrgeDialog extends StatelessWidget {
120.w.heightBox,
title.text.size(36.sp).black.bold.isIntrinsic.make(),
40.w.heightBox,
content.text.size(28.sp).isIntrinsic.make(),
content.text.size(28.sp).align(TextAlign.center).isIntrinsic.make(),
150.w.heightBox,
BeeLongButton(onPressed: onConfirm, text: '确认提醒')
BeeLongButton(onPressed: onConfirm, text: '确认')
],
),
);

@ -152,9 +152,23 @@ class DistributorCard extends StatelessWidget {
Widget getCardBottomButton() {
switch (model.status) {
case 1:
return SizedBox.shrink();
return CardBottomButton.yellow(
text: '加入工单池',
onPressed: () async {
var re = await WorkOrderFuc.joinOrderPool(model.id);
if (re) {
refresh();
}
});
case 2:
return SizedBox.shrink();
return CardBottomButton.yellow(
text: '移至待分配',
onPressed: () async {
var re = await WorkOrderFuc.moveToAssignment(model.id);
if (re) {
refresh();
}
});
case 3:
return CardBottomButton.yellow(
text: '提醒处理',
@ -192,11 +206,8 @@ class DistributorCard extends StatelessWidget {
}
});
case 7:
return CardBottomButton.yellow(text: '去评价', onPressed: () {});
case 8:
return CardBottomButton.yellow(text: '查看评价', onPressed: () {});
case 9:
case 10:
default:
return SizedBox.shrink();
}

@ -126,6 +126,14 @@ class _DistributorDetailPageState extends State<DistributorDetailPage> {
padding:
EdgeInsets.only(top: 120.w, left: 32.w, right: 32.w),
children: [
Offstage(
offstage: _model!.status < 5,
child: Column(
children: [
_historyReport(),
24.w.heightBox,
],
)),
Offstage(
offstage: _model!.servicePersonnelImgList == null ||
_model!.servicePersonnelImgList!.isEmpty,

@ -20,7 +20,17 @@ class WorkOrderDistributorPage extends StatefulWidget {
class _WorkOrderDistributorPageState extends State<WorkOrderDistributorPage>
with SingleTickerProviderStateMixin {
List<String> _tabs = ['全部', '待分配', '工单池', '已接单', '处理中', '待确认', '已完成', ''];
List<String> _tabs = [
'全部',
'待分配',
'工单池',
'已接单',
'处理中',
'待确认',
'已完成',
'已评价',
'已取消'
];
late TabController _tabController;
EasyRefreshController _refreshController = EasyRefreshController();
int _page = 1;

@ -0,0 +1,214 @@
import 'package:aku_new_community_manager/gen/assets.gen.dart';
import 'package:aku_new_community_manager/new_ui/work_order/distributor/distributor_card.dart';
import 'package:aku_new_community_manager/new_ui/work_order/distributor/distributor_detail_page.dart';
import 'package:aku_new_community_manager/saas_models/work_order/work_order_list_model.dart';
import 'package:aku_new_community_manager/style/app_style.dart';
import 'package:aku_new_community_manager/ui/widgets/common/bee_hor_image_view.dart';
import 'package:aku_new_community_manager/ui/widgets/common/car_bottom_button.dart';
import 'package:aku_new_community_manager/utils/bee_date_util.dart';
import 'package:common_utils/common_utils.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:velocity_x/velocity_x.dart';
import '../work_order_func.dart';
import '../work_order_map.dart';
class ReceiverCard extends StatelessWidget {
final WorkOrderListModel model;
final VoidCallback refresh;
const ReceiverCard({Key? key, required this.model, required this.refresh})
: super(key: key);
@override
Widget build(BuildContext context) {
return Stack(
children: [
Positioned(
top: 9.35.w,
right: 0,
child: Container(
width: 160.w,
height: 60.w,
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.bottomLeft,
end: Alignment.topRight,
colors: [
Color(0xFFFAC058),
Color(0xFFFFD589),
]),
color: kPrimaryColor,
borderRadius:
BorderRadius.only(topRight: Radius.circular(12.w)),
),
alignment: Alignment.center,
child: Text(
'${WorkOrderMap.orderStatus[model.status]}',
style: TextStyle(
fontSize: 26.sp,
color: Colors.black,
),
),
)),
GestureDetector(
onTap: () {
Get.to(() => DistributorDetailPage(
id: model.id,
));
},
child: ClipPath(
clipper: WorkOrderCardClip(),
child: Container(
padding: EdgeInsets.all(24.w),
width: double.infinity,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(12.w),
bottomLeft: Radius.circular(12.w),
bottomRight: Radius.circular(12.w)),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
Container(
padding: EdgeInsets.symmetric(
vertical: 8.w, horizontal: 16.w),
decoration: BoxDecoration(
color: Color(0xFFFFFBE6),
borderRadius: BorderRadius.circular(8.w),
),
child: '${model.workOrderTypeName}'
.text
.size(24.sp)
.color(Color(0xFFD48806))
.make(),
),
],
),
16.w.heightBox,
Row(
children: [
Assets.icons.alarmClock.image(width: 40.w, height: 40.w),
24.w.widthBox,
'${model.updateDate}'
.text
.size(24.sp)
.color(Colors.black.withOpacity(0.45))
.make(),
],
),
16.w.heightBox,
Row(
children: [
Assets.icons.taskLocation
.image(width: 40.w, height: 40.w),
24.w.widthBox,
'${model.reserveAddress}'
.text
.size(24.sp)
.color(Colors.black.withOpacity(0.45))
.make(),
],
),
60.w.heightBox,
'${model.content}'
.text
.size(28.sp)
.color(Colors.black.withOpacity(0.65))
.make(),
24.w.heightBox,
BeeHorImageView(
maxCount: 4,
imgs: model.imgList ?? [],
imgWidth: 146.w,
imgHeight: 146.w),
24.w.heightBox,
Row(
children: [
BeeDateUtil(DateUtil.getDateTime(model.createDate))
.timeAgo
.text
.size(24.sp)
.color(Colors.black.withOpacity(0.45))
.make(),
Spacer(),
],
),
],
),
),
),
)
],
);
}
Widget getCardBottomButton() {
switch (model.status) {
case 1:
return CardBottomButton.yellow(
text: '领取任务',
onPressed: () async {
var re = await WorkOrderFuc.receiveTask(model.id);
if (re) {
refresh();
}
});
case 2:
return CardBottomButton.yellow(
text: '开始服务',
onPressed: () async {
var re = await WorkOrderFuc.startService(model.id);
if (re) {
refresh();
}
});
case 3:
return Row(
mainAxisSize: MainAxisSize.min,
children: [
CardBottomButton.yellow(text: '提交报告', onPressed: () async {}),
CardBottomButton.yellow(
text: '完成工单',
onPressed: () async {
var re = await WorkOrderFuc.reminderProcessing(model.id);
if (re) {
refresh();
}
}),
],
);
case 4:
return CardBottomButton.yellow(
text: '提醒确认',
onPressed: () async {
var re = await WorkOrderFuc.reminderConfirm(model.id);
if (re) {
refresh();
}
});
case 5:
return CardBottomButton.yellow(
text: '提醒支付',
onPressed: () async {
var re = await WorkOrderFuc.reminderPay(model.id);
if (re) {
refresh();
}
});
case 6:
case 7:
case 8:
return CardBottomButton.yellow(text: '查看评价', onPressed: () {});
case 9:
case 10:
default:
return SizedBox.shrink();
}
}
}

@ -0,0 +1,550 @@
import 'package:aku_new_community_manager/const/saas_api.dart';
import 'package:aku_new_community_manager/gen/assets.gen.dart';
import 'package:aku_new_community_manager/new_ui/work_order/dialog/urge_dialog.dart';
import 'package:aku_new_community_manager/saas_models/work_order/work_order_detail_model.dart';
import 'package:aku_new_community_manager/ui/widgets/app_widgets/bee_grid_image_view.dart';
import 'package:aku_new_community_manager/ui/widgets/app_widgets/bee_image_network.dart';
import 'package:aku_new_community_manager/ui/widgets/common/aku_scaffold.dart';
import 'package:aku_new_community_manager/ui/widgets/common/bee_divider.dart';
import 'package:aku_new_community_manager/ui/widgets/common/bee_long_button.dart';
import 'package:aku_new_community_manager/ui/widgets/common/bottom_plural_button_widget.dart';
import 'package:aku_new_community_manager/ui/widgets/common/stack_avatar.dart';
import 'package:aku_new_community_manager/utils/network/net_util.dart';
import 'package:bot_toast/bot_toast.dart';
import 'package:common_utils/common_utils.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_easyrefresh/easy_refresh.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:url_launcher/url_launcher.dart';
import 'package:velocity_x/src/extensions/num_ext.dart';
import 'package:velocity_x/src/extensions/string_ext.dart';
import '../team_list_page.dart';
import '../work_order_func.dart';
import '../work_order_map.dart';
class ReceiverDetailPage extends StatefulWidget {
final int id;
const ReceiverDetailPage({
Key? key,
required this.id,
}) : super(key: key);
@override
_ReceiverDetailPageState createState() => _ReceiverDetailPageState();
}
class _ReceiverDetailPageState extends State<ReceiverDetailPage> {
WorkOrderDetailModel? _model;
EasyRefreshController _refreshController = EasyRefreshController();
@override
void dispose() {
_refreshController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return AkuScaffold(
title: '',
extendBody: true,
body: Stack(
children: [
_model == null
? Container()
: Container(
width: double.infinity,
height: 380.w,
decoration: BoxDecoration(
gradient: _getLiner,
),
child: Column(
children: [
150.w.heightBox,
Row(
children: [
Padding(
padding: EdgeInsets.symmetric(horizontal: 32.w),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
GestureDetector(
onTap: () async {},
child: Material(
color: Colors.transparent,
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
'${WorkOrderMap.orderStatus[_model?.status] ?? ''}'
.text
.size(40.sp)
.color(Colors.black)
.bold
.make(),
16.w.widthBox,
Icon(
CupertinoIcons.chevron_right,
size: 32.w,
color: Colors.black.withOpacity(0.65),
)
],
),
),
),
'${WorkOrderMap.subStatusString[_model?.status] ?? ''}'
.text
.size(24.sp)
.color(Colors.black.withOpacity(0.45))
.make(),
],
),
),
Spacer(),
],
),
],
),
),
SafeArea(
child: EasyRefresh(
firstRefresh: true,
header: MaterialHeader(),
onRefresh: () async {
var base = await NetUtil().get(SAASAPI.workOrder.findById,
params: {'workOrderId': widget.id});
if (base.success) {
_model = WorkOrderDetailModel.fromJson(base.data);
setState(() {});
}
},
child: _model == null
? Container()
: ListView(
padding:
EdgeInsets.only(top: 120.w, left: 32.w, right: 32.w),
children: [
Offstage(
offstage: _model!.status < 5,
child: Column(
children: [
_historyReport(),
24.w.heightBox,
],
)),
Offstage(
offstage: _model!.servicePersonnelImgList == null ||
_model!.servicePersonnelImgList!.isEmpty,
child: Column(
children: [
_servicePeople(),
24.w.heightBox,
],
)),
_head(),
24.w.heightBox,
_content(),
24.w.heightBox,
_taskInfo(),
],
),
)),
],
),
bottom: Padding(
padding: EdgeInsets.only(
left: 32.w,
right: 32.w,
bottom: MediaQuery.of(context).padding.bottom + 32.w),
child: _getBottomButton()),
);
}
LinearGradient get _getLiner {
switch (_model?.status) {
case 7:
case 8:
return LinearGradient(
begin: Alignment.centerLeft,
end: Alignment.centerRight,
colors: [
Color(0xFFA5A5A6).withOpacity(0),
Color(0xFFE0DDDE),
]);
case 9:
return LinearGradient(
begin: Alignment.centerLeft,
end: Alignment.centerRight,
colors: [
Color(0xFFFF0000).withOpacity(0),
Color(0xFFFC5757),
]);
default:
return LinearGradient(
begin: Alignment.centerLeft,
end: Alignment.centerRight,
colors: [
Color(0xFFFFD589).withOpacity(0),
Color(0xFFFAC058),
]);
}
}
Widget _getBottomButton() {
switch (_model?.status) {
case 1:
return BeeLongButton(
onPressed: () async {
var re = await WorkOrderFuc.receiveTask(widget.id);
if (re) {
_refreshController.callRefresh();
}
},
text: '领取任务');
case 2:
return BeeLongButton(
onPressed: () async {
Get.bottomSheet(UrgeDialog(
onConfirm: () async {
var re = await WorkOrderFuc.startService(widget.id);
if (re) {
_refreshController.callRefresh();
}
},
title: '确认开始服务?',
content: '建议事前前往现场确认情况\n并与申请人充分沟通后再点击开始处理'));
},
text: '开始服务');
case 3:
return BottomPluralButtonWidget(
onLeftTap: () {},
onRightTap: () {},
leftTitle: '提交报告',
rightTitle: '完成工单');
case 4:
return BeeLongButton(
onPressed: () async {
var re = await WorkOrderFuc.reminderConfirm(widget.id);
if (re) {
_refreshController.callRefresh();
}
},
text: '提醒用户确认');
case 5:
return BeeLongButton(
onPressed: () async {
var re = await WorkOrderFuc.reminderPay(widget.id);
if (re) {
_refreshController.callRefresh();
}
},
text: '提醒用户支付');
case 6:
case 7:
case 8:
return SizedBox.shrink();
case 9:
return SizedBox.shrink();
default:
return SizedBox.shrink();
}
}
Widget _historyReport() {
return GestureDetector(
onTap: () {},
child: Material(
color: Colors.transparent,
child: Container(
width: double.infinity,
decoration: BoxDecoration(
color: Colors.white, borderRadius: BorderRadius.circular(16.w)),
padding: EdgeInsets.symmetric(horizontal: 32.w, vertical: 32.w),
child: Row(
children: [
'历史报告'
.text
.size(28.sp)
.color(Colors.black.withOpacity(0.85))
.make(),
Spacer(),
'点击查看'
.text
.size(24.sp)
.color(Colors.black.withOpacity(0.45))
.make(),
24.w.widthBox,
Icon(
CupertinoIcons.chevron_right,
size: 24.w,
color: Colors.black.withOpacity(0.45),
),
],
),
),
),
);
}
Widget _servicePeople() {
return Container(
padding: EdgeInsets.all(24.w),
width: double.infinity,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(12.w),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
'处理人员名单'
.text
.size(28.sp)
.color(Colors.black.withOpacity(0.85))
.make(),
24.w.heightBox,
BeeDivider.horizontal(),
24.w.heightBox,
GestureDetector(
onTap: () {
Get.to(() => TeamListPage(
workOderId: _model!.id,
));
},
child: Material(
color: Colors.transparent,
child: Row(
children: [
StackAvatar(
avatars: (_model!.servicePersonnelImgList ?? [])
.map((e) => e.url)
.toList()),
Spacer(),
'点击查看'
.text
.size(28.sp)
.color(Colors.black.withOpacity(0.65))
.make(),
Icon(
CupertinoIcons.chevron_right,
size: 24.w,
)
],
),
),
)
],
),
);
}
Widget _head() {
return Container(
padding: EdgeInsets.all(24.w),
width: double.infinity,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(12.w),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
Container(
padding: EdgeInsets.symmetric(vertical: 8.w, horizontal: 16.w),
decoration: BoxDecoration(
color: Color(0xFFFFFBE6),
borderRadius: BorderRadius.circular(8.w),
),
child: '${_model!.workOrderTypeName}'
.text
.size(24.sp)
.color(Color(0xFFD48806))
.make(),
),
Spacer(),
Offstage(
offstage: _model!.status < 6,
child: '¥${_model!.totalCost ?? 0}'
.text
.size(24.sp)
.color(Color(0xFFF5222D))
.make(),
)
],
),
16.w.heightBox,
Row(
children: [
Assets.icons.alarmClock.image(width: 40.w, height: 40.w),
24.w.widthBox,
'${DateUtil.formatDateStr(_model!.reserveDate)}'
.text
.size(24.sp)
.color(Colors.black.withOpacity(0.45))
.make(),
],
),
16.w.heightBox,
Row(
children: [
Assets.icons.taskLocation.image(width: 40.w, height: 40.w),
24.w.widthBox,
'${_model!.reserveAddress}'
.text
.size(24.sp)
.color(Colors.black.withOpacity(0.45))
.make(),
],
),
24.w.heightBox,
Container(
padding: EdgeInsets.symmetric(horizontal: 16.w, vertical: 24.w),
child: Column(
children: [
'申请人'
.text
.size(28.sp)
.color(Colors.black.withOpacity(0.25))
.make(),
24.w.heightBox,
Row(
children: [
ClipOval(
child: BeeImageNetwork(
width: 108.w,
height: 108.w,
imgs: _model!.applicantImgList,
),
),
16.w.widthBox,
Expanded(
child: Column(
children: [
_model!.applicantName.text
.size(28.sp)
.color(Colors.black.withOpacity(0.85))
.make(),
8.w.heightBox,
'${_model!.identity == 1 ? '住户' : '物业'}${_model!.buildingName}${_model!.unitName}${_model!.estateName}'
.text
.size(28.sp)
.color(Colors.black.withOpacity(0.45))
.make(),
GestureDetector(
onTap: () {
launch('tel:${_model!.applicantTel}');
},
child: Assets.icons.phoneCircle
.image(width: 40.w, height: 40.w)),
],
)),
],
)
],
),
),
24.w.heightBox,
],
),
);
}
Widget _content() {
return Container(
padding: EdgeInsets.all(24.w),
width: double.infinity,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(12.w),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
'${_model!.content}'
.text
.size(28.sp)
.color(Colors.black.withOpacity(0.65))
.make(),
24.w.heightBox,
BeeGridImageView(
urls: (_model!.imgList ?? []).map((e) => e.url).toList(),
),
24.w.heightBox,
],
),
);
}
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(_model!.createDate)}'
.text
.size(24.sp)
.color(Colors.black.withOpacity(0.45))
.make(),
64.w.widthBox,
],
),
24.w.heightBox,
Row(
children: [
'工单编号'
.text
.size(24.sp)
.color(Colors.black.withOpacity(0.45))
.make(),
Spacer(),
'${_model!.code}'
.text
.size(24.sp)
.color(Colors.black.withOpacity(0.45))
.make(),
24.w.widthBox,
GestureDetector(
onTap: () async {
await Clipboard.setData(ClipboardData(text: _model!.code));
BotToast.showText(text: '已复制到粘贴板');
},
child: Assets.icons.copy.image(width: 40.w, height: 40.w)),
],
)
],
),
);
}
}

@ -0,0 +1,111 @@
import 'package:aku_new_community_manager/const/saas_api.dart';
import 'package:aku_new_community_manager/new_ui/work_order/distributor/distributor_card.dart';
import 'package:aku_new_community_manager/saas_models/work_order/work_order_list_model.dart';
import 'package:aku_new_community_manager/ui/widgets/common/aku_scaffold.dart';
import 'package:aku_new_community_manager/ui/widgets/inner/aku_tab_bar.dart';
import 'package:aku_new_community_manager/utils/network/net_util.dart';
import 'package:flutter/cupertino.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 WorkOrderReceiverPage extends StatefulWidget {
const WorkOrderReceiverPage({Key? key}) : super(key: key);
@override
_WorkOrderReceiverPageState createState() => _WorkOrderReceiverPageState();
}
class _WorkOrderReceiverPageState extends State<WorkOrderReceiverPage>
with SingleTickerProviderStateMixin {
List<String> _tabs = ['全部', '工单池', '已接单', '处理中', '待确认', '已完成', '已评价', '已取消'];
late TabController _tabController;
EasyRefreshController _refreshController = EasyRefreshController();
int _page = 1;
int _size = 10;
List<WorkOrderListModel> _models = [];
@override
void initState() {
_tabController = TabController(length: _tabs.length, vsync: this);
super.initState();
}
@override
void dispose() {
_refreshController.dispose();
_tabController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return AkuScaffold(
title: '工单管理',
actions: [
IconButton(
onPressed: () {},
icon: Icon(
CupertinoIcons.plus_circle,
size: 40.w,
))
],
appBarBottom: PreferredSize(
preferredSize: Size.fromHeight(88.w),
child: AkuTabBar(
tabs: _tabs,
controller: _tabController,
),
),
body: TabBarView(
controller: _tabController,
children:
_tabs.mapIndexed((e, index) => _getOrderView(index)).toList()),
);
}
Widget _getOrderView(int index) {
return EasyRefresh(
firstRefresh: true,
header: MaterialHeader(),
onRefresh: () async {
_page = 1;
var base = await NetUtil().getList(SAASAPI.workOrder.list, params: {
'pageNum': _page,
'size': _size,
'status': index == 0 ? null : index + 1,
});
_models =
base.rows.map((e) => WorkOrderListModel.fromJson(e)).toList();
setState(() {});
},
onLoad: () async {
_page++;
var base = await NetUtil().getList(SAASAPI.workOrder.list, params: {
'pageNum': _page,
'size': _size,
'status': index == 0 ? null : index + 1,
});
if (_models.length < base.total) {
_models.addAll(
base.rows.map((e) => WorkOrderListModel.fromJson(e)).toList());
setState(() {});
} else {
_refreshController.finishLoad();
}
},
child: ListView.separated(
padding: EdgeInsets.all(24.w),
itemBuilder: (context, index) {
return DistributorCard(
model: _models[index],
refresh: _refreshController.callRefresh,
);
},
separatorBuilder: (context, index) {
return 24.w.heightBox;
},
itemCount: _models.length));
}
}

@ -0,0 +1,68 @@
import 'package:aku_new_community_manager/style/app_style.dart';
import 'package:flutter/material.dart';
class BottomPluralButtonWidget extends StatelessWidget {
const BottomPluralButtonWidget({
Key? key,
required this.onLeftTap,
required this.onRightTap,
required this.leftTitle,
required this.rightTitle,
this.padding = false,
}) : super(key: key);
final VoidCallback onLeftTap;
final VoidCallback onRightTap;
final String leftTitle;
final String rightTitle;
final bool padding;
@override
Widget build(BuildContext context) {
return Container(
padding: padding
? EdgeInsets.only(
left: 32.w,
top: 32.w,
bottom: 32.w + MediaQuery.of(context).padding.bottom,
right: 32.w)
: EdgeInsets.zero,
color: padding ? Colors.white : Colors.transparent,
child: Row(
children: [
MaterialButton(
onPressed: onLeftTap,
minWidth: 330.w,
height: 80.w,
elevation: 0,
color: Colors.white,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(40.w),
side: BorderSide(color: Colors.black.withOpacity(0.25)),
),
child: Text(
leftTitle,
style: TextStyle(
fontSize: 28.sp, color: Colors.black.withOpacity(0.65)),
),
),
Spacer(),
MaterialButton(
onPressed: onRightTap,
minWidth: 330.w,
height: 80.w,
elevation: 0,
color: kPrimaryColor,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(40.w),
),
child: Text(
rightTitle,
style: TextStyle(
fontSize: 28.sp, color: Colors.black.withOpacity(0.85)),
),
)
],
),
);
}
}
Loading…
Cancel
Save