parent
dd6c988683
commit
f5b484d3bb
@ -1,3 +0,0 @@
|
||||
// class AppValues {
|
||||
// static const String plotName = '人才公寓智慧小区';
|
||||
// }
|
@ -1,136 +0,0 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:get/get.dart';
|
||||
import 'package:velocity_x/velocity_x.dart';
|
||||
|
||||
import 'package:akuCommunity/routers/page_routers.dart';
|
||||
import 'package:akuCommunity/utils/headers.dart';
|
||||
import 'package:akuCommunity/widget/bee_scaffold.dart';
|
||||
import 'widget/address_edit_item.dart';
|
||||
|
||||
class AddressEditPage extends StatefulWidget {
|
||||
final Bundle bundle;
|
||||
AddressEditPage({Key key, this.bundle}) : super(key: key);
|
||||
|
||||
@override
|
||||
_AddressEditPageState createState() => _AddressEditPageState();
|
||||
}
|
||||
|
||||
class _AddressEditPageState extends State<AddressEditPage> {
|
||||
GlobalKey _formKey = new GlobalKey<FormState>();
|
||||
bool isDefault = false;
|
||||
|
||||
Widget _containerSelectDefault() {
|
||||
return Container(
|
||||
color: Colors.white,
|
||||
height: 96.w,
|
||||
padding: EdgeInsets.symmetric(
|
||||
vertical: 28.w,
|
||||
horizontal: 32.w,
|
||||
),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(
|
||||
'设为默认地址',
|
||||
style: TextStyle(
|
||||
fontSize: 28.sp,
|
||||
color: Color(0xff333333),
|
||||
),
|
||||
),
|
||||
InkWell(
|
||||
onTap: () {
|
||||
setState(() {
|
||||
isDefault = !isDefault;
|
||||
});
|
||||
},
|
||||
child: CupertinoSwitch(
|
||||
value: isDefault,
|
||||
activeColor: Color(0xffffc40c), // 激活时原点颜色
|
||||
onChanged: (bool val) {
|
||||
setState(() {
|
||||
isDefault = !isDefault;
|
||||
});
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _containerDelete() {
|
||||
return InkWell(
|
||||
onTap: () {},
|
||||
child: Container(
|
||||
color: Colors.white,
|
||||
height: 96.w,
|
||||
padding: EdgeInsets.symmetric(
|
||||
vertical: 28.w,
|
||||
horizontal: 32.w,
|
||||
),
|
||||
alignment: Alignment.center,
|
||||
child: Text(
|
||||
'删除地址',
|
||||
style: TextStyle(
|
||||
fontSize: 28.sp,
|
||||
color: Color(0xffe60e0e),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return BeeScaffold(
|
||||
title: '${widget.bundle.getMap('details')['title']}',
|
||||
actions: [
|
||||
InkWell(
|
||||
onTap: () {
|
||||
Get.back();
|
||||
},
|
||||
child: Container(
|
||||
height: 98.w,
|
||||
width: 48.w + 32.w * 2,
|
||||
alignment: Alignment.center,
|
||||
child: '保存'.text.color(Color(0xFFFFC40C)).size(24.sp).make()),
|
||||
)
|
||||
],
|
||||
body: SingleChildScrollView(
|
||||
physics: NeverScrollableScrollPhysics(),
|
||||
child: Container(
|
||||
child: GestureDetector(
|
||||
behavior: HitTestBehavior.opaque,
|
||||
onTap: () {
|
||||
FocusScope.of(context).requestFocus(FocusNode());
|
||||
},
|
||||
child: Column(
|
||||
children: [
|
||||
Form(
|
||||
key: _formKey,
|
||||
child: Column(
|
||||
children: [
|
||||
AddressEditItem(addressInfo: {
|
||||
'name': widget.bundle.getMap('details')['name'],
|
||||
'phone': widget.bundle.getMap('details')['phone'],
|
||||
'address': widget.bundle.getMap('details')['address']
|
||||
}),
|
||||
],
|
||||
),
|
||||
),
|
||||
SizedBox(height: 66.w),
|
||||
_containerSelectDefault(),
|
||||
SizedBox(height: 66.w),
|
||||
widget.bundle.getMap('details')['isDelete']
|
||||
? _containerDelete()
|
||||
: SizedBox(),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,60 +0,0 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:velocity_x/velocity_x.dart';
|
||||
|
||||
import 'package:akuCommunity/widget/bee_scaffold.dart';
|
||||
import 'widget/address_item.dart';
|
||||
|
||||
class AddressPage extends StatefulWidget {
|
||||
AddressPage({Key key}) : super(key: key);
|
||||
|
||||
@override
|
||||
_AddressPageState createState() => _AddressPageState();
|
||||
}
|
||||
|
||||
class _AddressPageState extends State<AddressPage> {
|
||||
List _addressInfoList = [
|
||||
{
|
||||
'name': '马泽鹏',
|
||||
'phone': '18868741879',
|
||||
'address': '广东省深圳市福田区福华路8号',
|
||||
'isDefualt': true
|
||||
},
|
||||
{
|
||||
'name': '王珂',
|
||||
'phone': '13868741123',
|
||||
'address': '广东省深圳市福田区红荔西路8007号',
|
||||
'isDefualt': false
|
||||
},
|
||||
{
|
||||
'name': '叶一样',
|
||||
'phone': '13944743213',
|
||||
'address': '广东省深圳市布吉街道布沙路大芬油画村对面',
|
||||
'isDefualt': false
|
||||
},
|
||||
];
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return BeeScaffold(
|
||||
title: '我的收货地址',
|
||||
actions: [
|
||||
InkWell(
|
||||
onTap: () {},
|
||||
child: '添加新地址'.text.black.size(24.sp).make(),
|
||||
)
|
||||
],
|
||||
body: ListView.builder(
|
||||
itemBuilder: (BuildContext context, int index) => AddressItem(
|
||||
name: _addressInfoList[index]['name'],
|
||||
phone: _addressInfoList[index]['phone'],
|
||||
address: _addressInfoList[index]['address'],
|
||||
isDefualt: _addressInfoList[index]['isDefualt'],
|
||||
),
|
||||
itemCount: _addressInfoList.length,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,103 +0,0 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
|
||||
import 'package:akuCommunity/utils/headers.dart';
|
||||
|
||||
class AddressEditItem extends StatefulWidget {
|
||||
final Map addressInfo;
|
||||
AddressEditItem({Key key, this.addressInfo}) : super(key: key);
|
||||
|
||||
@override
|
||||
_AddressEditItemState createState() => _AddressEditItemState();
|
||||
}
|
||||
|
||||
class _AddressEditItemState extends State<AddressEditItem> {
|
||||
TextEditingController _userName = new TextEditingController();
|
||||
TextEditingController _userPhone = new TextEditingController();
|
||||
TextEditingController _userAddress = new TextEditingController();
|
||||
TextEditingController _userAddressDetail = new TextEditingController();
|
||||
RegExp phoneReg = RegExp(
|
||||
'^((13[0-9])|(15[^4])|(16[0-9])|(17[0-9])|(18[0-9])|(19[8-9])|(147,145))\\d{8}\$');
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_userName = new TextEditingController(text: widget.addressInfo['name']);
|
||||
_userPhone = new TextEditingController(text: widget.addressInfo['phone']);
|
||||
_userAddress =
|
||||
new TextEditingController(text: widget.addressInfo['address']);
|
||||
_userAddressDetail =
|
||||
new TextEditingController(text: widget.addressInfo['address']);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
List<Map<String, dynamic>> _listTextField = [
|
||||
{'title': '收货人', 'hintText': '请输入', 'controller': _userName},
|
||||
{'title': '手机号码', 'hintText': '请输入', 'controller': _userPhone},
|
||||
{'title': '所在地区', 'hintText': '请输入', 'controller': _userAddress},
|
||||
{
|
||||
'title': '详细地址',
|
||||
'hintText': '比如街道、门牌号、小区、楼栋号',
|
||||
'controller': _userAddressDetail
|
||||
},
|
||||
];
|
||||
List<Widget> _listTextFieldView() {
|
||||
return _listTextField
|
||||
.map((item) => TextFormField(
|
||||
inputFormatters: item['title'] == '手机号码'
|
||||
? [
|
||||
LengthLimitingTextInputFormatter(11),
|
||||
FilteringTextInputFormatter.digitsOnly
|
||||
]
|
||||
: [],
|
||||
keyboardType: item['title'] == '手机号码'
|
||||
? TextInputType.number
|
||||
: TextInputType.name,
|
||||
cursorColor: Color(0xffffc40c),
|
||||
style: TextStyle(fontSize: 28.sp),
|
||||
controller: item['controller'],
|
||||
onChanged: (String value) {},
|
||||
maxLines: item['title'] == '详细地址' ? 5 : 1,
|
||||
decoration: InputDecoration(
|
||||
contentPadding: EdgeInsets.only(
|
||||
right: 32.w,
|
||||
top: 28.w,
|
||||
bottom: 28.w,
|
||||
),
|
||||
hintText: item['hintText'],
|
||||
border: InputBorder.none, //去掉输入框的下滑线
|
||||
fillColor: Colors.white,
|
||||
filled: true,
|
||||
hintStyle:
|
||||
TextStyle(color: Color(0xff999999), fontSize: 28.sp),
|
||||
prefixIcon: Padding(
|
||||
padding: EdgeInsets.only(
|
||||
left: 32.w,
|
||||
right: (item['title'] == '收货人' ? 88 : 60).w,
|
||||
top: 28.w,
|
||||
bottom: (item['title'] == '详细地址' ? 158 : 28).w,
|
||||
),
|
||||
child: Text(
|
||||
item['title'],
|
||||
style: TextStyle(
|
||||
color: Color(0xff333333),
|
||||
fontSize: 28.sp,
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
))
|
||||
.toList();
|
||||
}
|
||||
|
||||
return Container(
|
||||
color: Colors.white,
|
||||
child: Column(
|
||||
children: _listTextFieldView(),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,181 +0,0 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:extended_text/extended_text.dart';
|
||||
import 'package:flutter_icons/flutter_icons.dart';
|
||||
|
||||
import 'package:akuCommunity/pages/address_page/address_edit_page.dart';
|
||||
import 'package:akuCommunity/routers/page_routers.dart';
|
||||
import 'package:akuCommunity/utils/headers.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
class AddressItem extends StatelessWidget {
|
||||
final String name, phone, address;
|
||||
final bool isDefualt;
|
||||
AddressItem({Key key, this.name, this.phone, this.address, this.isDefualt})
|
||||
: super(key: key);
|
||||
|
||||
Widget _containerImage() {
|
||||
return Container(
|
||||
alignment: Alignment.center,
|
||||
width: 76.w,
|
||||
height: 76.w,
|
||||
margin: EdgeInsets.only(
|
||||
right: 20.w,
|
||||
),
|
||||
padding: EdgeInsets.symmetric(vertical: 12.w),
|
||||
decoration: BoxDecoration(
|
||||
gradient: LinearGradient(
|
||||
begin: Alignment.centerLeft,
|
||||
end: Alignment.centerRight,
|
||||
colors: isDefualt
|
||||
? [Color(0xffffd000), Color(0xffff8500)]
|
||||
: [Color(0xffd8d8d8), Color(0xffd8d8d8)],
|
||||
),
|
||||
borderRadius: BorderRadius.all(Radius.circular(76.w)),
|
||||
),
|
||||
child: Icon(SimpleLineIcons.location_pin, color: Colors.white),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _containerColumn() {
|
||||
return Container(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
Text(
|
||||
name,
|
||||
style: TextStyle(
|
||||
fontSize: 28.sp,
|
||||
color: Color(0xff333333),
|
||||
),
|
||||
),
|
||||
SizedBox(width: 20.w),
|
||||
Text(
|
||||
phone,
|
||||
style: TextStyle(
|
||||
fontSize: 24.sp,
|
||||
color: Color(0xff999999),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 12.w),
|
||||
Container(
|
||||
width: 432.w,
|
||||
child: ExtendedText.rich(
|
||||
TextSpan(
|
||||
children: [
|
||||
isDefualt
|
||||
? ExtendedWidgetSpan(
|
||||
child: Container(
|
||||
margin: EdgeInsets.only(right: 16.w),
|
||||
decoration: BoxDecoration(
|
||||
color: Color(0xfffff7d2),
|
||||
border: Border.all(
|
||||
color: Color(0xffffd000), width: 0.5),
|
||||
borderRadius:
|
||||
BorderRadius.all(Radius.circular(4))),
|
||||
padding: EdgeInsets.symmetric(
|
||||
horizontal: 20.w,
|
||||
vertical: 4.w,
|
||||
),
|
||||
child: Text(
|
||||
'默认',
|
||||
style: TextStyle(
|
||||
fontSize: 24.sp,
|
||||
color: Color(0xff333333),
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
: ExtendedWidgetSpan(child: SizedBox()),
|
||||
TextSpan(
|
||||
text: address,
|
||||
style: TextStyle(
|
||||
fontSize: 24.sp, color: Color(0xff999999), height: 1.5),
|
||||
)
|
||||
],
|
||||
),
|
||||
maxLines: 2,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _positionedEdit(BuildContext context) {
|
||||
return Positioned(
|
||||
right: 0,
|
||||
top: 55.w,
|
||||
child: InkWell(
|
||||
onTap: () {
|
||||
Get.to(() => AddressEditPage(
|
||||
bundle: Bundle()
|
||||
..putMap('details', {
|
||||
'title': '编辑地址',
|
||||
'name': name,
|
||||
'phone': phone,
|
||||
'address': address,
|
||||
'isDelete': true
|
||||
}),
|
||||
));
|
||||
},
|
||||
child: Row(
|
||||
children: [
|
||||
SizedBox(width: 13.w),
|
||||
SizedBox(
|
||||
width: 1,
|
||||
height: 30.w,
|
||||
child: DecoratedBox(
|
||||
decoration: BoxDecoration(color: Color(0xffd8d8d8)),
|
||||
),
|
||||
),
|
||||
SizedBox(width: 13.w),
|
||||
Text(
|
||||
'编辑',
|
||||
style: TextStyle(
|
||||
fontSize: 24.sp,
|
||||
color: Color(0xff999999),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white,
|
||||
borderRadius: BorderRadius.all(Radius.circular(8)),
|
||||
),
|
||||
margin: EdgeInsets.only(
|
||||
left: 32.w,
|
||||
right: 32.w,
|
||||
top: 20.w,
|
||||
),
|
||||
padding: EdgeInsets.symmetric(
|
||||
horizontal: 20.w,
|
||||
vertical: 32.w,
|
||||
),
|
||||
child: Stack(
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
_containerImage(),
|
||||
_containerColumn(),
|
||||
],
|
||||
),
|
||||
_positionedEdit(context),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,38 +0,0 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:akuCommunity/routers/page_routers.dart';
|
||||
import 'package:akuCommunity/utils/headers.dart';
|
||||
import 'package:akuCommunity/widget/bee_scaffold.dart';
|
||||
import 'widget/confirm_address.dart';
|
||||
import 'widget/confirm_bottom_bar.dart';
|
||||
import 'widget/confirm_content.dart';
|
||||
|
||||
class ConfirmOrderPage extends StatelessWidget {
|
||||
final Bundle bundle;
|
||||
ConfirmOrderPage({Key key, this.bundle}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return BeeScaffold(
|
||||
title: '确认订单',
|
||||
body: Stack(
|
||||
children: [
|
||||
ListView(
|
||||
padding: EdgeInsets.only(bottom: 98.w),
|
||||
children: [
|
||||
SizedBox(height: 20.w),
|
||||
ConfirmAddress(),
|
||||
SizedBox(height: 20.w),
|
||||
ConfirmContent(cartMap: bundle.getMap('cartMap')),
|
||||
],
|
||||
),
|
||||
Positioned(
|
||||
bottom: 0,
|
||||
child: ConfirmBottomBar(cartMap: bundle.getMap('cartMap')),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,160 +0,0 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:flutter_icons/flutter_icons.dart';
|
||||
|
||||
import 'package:akuCommunity/base/assets_image.dart';
|
||||
import 'package:akuCommunity/routers/page_routers.dart';
|
||||
import 'package:akuCommunity/utils/headers.dart';
|
||||
import 'package:akuCommunity/widget/bee_scaffold.dart';
|
||||
|
||||
class PayOrderPage extends StatelessWidget {
|
||||
final Bundle bundle;
|
||||
PayOrderPage({Key key, this.bundle}) : super(key: key);
|
||||
|
||||
final List<Map<String, dynamic>> _listPay = [
|
||||
{
|
||||
'title': '支付宝支付',
|
||||
'widget': Icon(
|
||||
AntDesign.alipay_circle,
|
||||
color: Color(0xff06b4fd),
|
||||
size: 50.w,
|
||||
),
|
||||
'id': 'alipay',
|
||||
'isCheck': true
|
||||
},
|
||||
{
|
||||
'title': '微信支付',
|
||||
'widget': Image.asset(
|
||||
AssetsImage.WXPAY,
|
||||
height: 60.w,
|
||||
width: 60.w,
|
||||
),
|
||||
'id': 'wxpay',
|
||||
'isCheck': false
|
||||
}
|
||||
];
|
||||
Widget fadeAlertAnimation(BuildContext context, Animation<double> animation,
|
||||
Animation<double> secondaryAnimation, Widget child) {
|
||||
return Align(
|
||||
child: FadeTransition(
|
||||
opacity: animation,
|
||||
child: child,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
InkWell _payMode(BuildContext context, Widget widget, String title) {
|
||||
return InkWell(
|
||||
onTap: () {
|
||||
// Alert(
|
||||
// context: context,
|
||||
// title: "支付成功!~",
|
||||
// image: Container(
|
||||
// margin: EdgeInsets.only(top: 40.w),
|
||||
// height: 200.w,
|
||||
// width: 200.w,
|
||||
// alignment: Alignment.center,
|
||||
// decoration: BoxDecoration(
|
||||
// gradient: LinearGradient(
|
||||
// begin: Alignment.topCenter,
|
||||
// end: Alignment.bottomCenter,
|
||||
// colors: [Color(0xffffe16b), Color(0xffffc40d)],
|
||||
// ),
|
||||
// borderRadius: BorderRadius.all(Radius.circular(200.w)),
|
||||
// ),
|
||||
// child: Icon(
|
||||
// Icons.check,
|
||||
// color: Colors.white,
|
||||
// size: 150.w,
|
||||
// ),
|
||||
// ),
|
||||
// style: alertStyle,
|
||||
// alertAnimation: fadeAlertAnimation,
|
||||
// buttons: [
|
||||
// DialogButton(
|
||||
// child: Text(
|
||||
// "确认",
|
||||
// style: TextStyle(color: Colors.white, fontSize: 20),
|
||||
// ),
|
||||
// onPressed: () => Get.back(),
|
||||
// color: Color(0xffffc40d),
|
||||
// radius: BorderRadius.circular(8.w),
|
||||
// ),
|
||||
// ],
|
||||
// ).show();
|
||||
},
|
||||
child: Container(
|
||||
padding: EdgeInsets.only(
|
||||
bottom: 27.w,
|
||||
top: 28.w,
|
||||
),
|
||||
decoration: BoxDecoration(
|
||||
border:
|
||||
Border(bottom: BorderSide(color: Color(0xffd8d8d8), width: 0.5)),
|
||||
),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
widget,
|
||||
SizedBox(width: 24.w),
|
||||
Text(
|
||||
title,
|
||||
style: TextStyle(fontSize: 28.sp, color: Color(0xff333333)),
|
||||
),
|
||||
],
|
||||
),
|
||||
Icon(
|
||||
AntDesign.right,
|
||||
color: Color(0xff999999),
|
||||
size: 32.w,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return BeeScaffold(
|
||||
title: '付款方式',
|
||||
body: Container(
|
||||
color: Colors.white,
|
||||
child: ListView(
|
||||
children: [
|
||||
Container(
|
||||
margin: EdgeInsets.only(
|
||||
top: 130.w,
|
||||
bottom: 130.w,
|
||||
),
|
||||
alignment: Alignment.center,
|
||||
child: Text(
|
||||
'¥${(double.parse(bundle.getMap('cartMap')["itemprice"]) * bundle.getMap('cartMap')["count"]).toStringAsFixed(2)}',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w600,
|
||||
fontSize: 48.sp,
|
||||
color: Color(0xffe60e0e),
|
||||
),
|
||||
),
|
||||
),
|
||||
Container(
|
||||
margin: EdgeInsets.symmetric(horizontal: 32.w),
|
||||
child: Column(
|
||||
children: List.generate(
|
||||
_listPay.length,
|
||||
(index) => _payMode(
|
||||
context,
|
||||
_listPay[index]['widget'],
|
||||
_listPay[index]['title'],
|
||||
)),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,117 +0,0 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:flutter_icons/flutter_icons.dart';
|
||||
|
||||
import 'package:akuCommunity/base/assets_image.dart';
|
||||
import 'package:akuCommunity/utils/headers.dart';
|
||||
|
||||
class ConfirmAddress extends StatefulWidget {
|
||||
ConfirmAddress({Key key}) : super(key: key);
|
||||
|
||||
@override
|
||||
_ConfirmAddressState createState() => _ConfirmAddressState();
|
||||
}
|
||||
|
||||
class _ConfirmAddressState extends State<ConfirmAddress> {
|
||||
Container _containerImage() {
|
||||
return Container(
|
||||
padding: EdgeInsets.symmetric(vertical: 12.w),
|
||||
child: Image.asset(
|
||||
AssetsImage.LOCATION,
|
||||
height: 54.w,
|
||||
width: 54.w,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Container _containerContent() {
|
||||
return Container(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
Text(
|
||||
'周玲慧',
|
||||
style: TextStyle(
|
||||
fontSize: 28.sp,
|
||||
color: Color(0xff333333),
|
||||
),
|
||||
),
|
||||
SizedBox(width: 20.w),
|
||||
Text(
|
||||
'18868945727',
|
||||
style: TextStyle(
|
||||
fontSize: 24.sp,
|
||||
color: Color(0xff999999),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 6.w),
|
||||
Text(
|
||||
'浙江省 宁波市 江北区 工程学院阿库旅游f6',
|
||||
maxLines: 1,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
style: TextStyle(
|
||||
fontSize: 24.sp,
|
||||
color: Color(0xff999999),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Positioned _positionedIcon() {
|
||||
return Positioned(
|
||||
bottom: 58.w,
|
||||
right: 0,
|
||||
child: Icon(
|
||||
AntDesign.right,
|
||||
size: 34.sp,
|
||||
color: Color(0xff999999),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return InkWell(
|
||||
onTap: () {
|
||||
// Get.to(CommonPage(
|
||||
// bundle: Bundle()
|
||||
// ..putMap('commentMap', {'title': '我的地址', 'isActions': true}),
|
||||
// ));
|
||||
},
|
||||
child: Container(
|
||||
margin: EdgeInsets.symmetric(horizontal: 32.w),
|
||||
padding: EdgeInsets.symmetric(horizontal: 18.w),
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white,
|
||||
borderRadius: BorderRadius.all(Radius.circular(8)),
|
||||
),
|
||||
child: Stack(
|
||||
children: [
|
||||
Padding(
|
||||
padding: EdgeInsets.symmetric(
|
||||
horizontal: 18.w,
|
||||
vertical: 32.w,
|
||||
),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
_containerImage(),
|
||||
SizedBox(width: 18.w),
|
||||
_containerContent(),
|
||||
],
|
||||
),
|
||||
),
|
||||
_positionedIcon()
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,83 +0,0 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:akuCommunity/base/base_style.dart';
|
||||
import 'package:akuCommunity/pages/confirm_order_page/pay_order_page.dart';
|
||||
import 'package:akuCommunity/utils/headers.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
class ConfirmBottomBar extends StatelessWidget {
|
||||
final Map cartMap;
|
||||
ConfirmBottomBar({Key key, this.cartMap}) : super(key: key);
|
||||
|
||||
Widget _countPrice() {
|
||||
return Row(
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
children: [
|
||||
Text(
|
||||
'共计${cartMap["count"]}件',
|
||||
style: TextStyle(
|
||||
color: BaseStyle.color999999,
|
||||
fontSize: BaseStyle.fontSize24,
|
||||
),
|
||||
),
|
||||
SizedBox(width: 10.w),
|
||||
Text(
|
||||
'合计:¥${(double.parse(cartMap["itemprice"]) * cartMap["count"]).toStringAsFixed(2)}',
|
||||
style: TextStyle(
|
||||
color: Color(0xffe60e0e),
|
||||
fontSize: BaseStyle.fontSize28,
|
||||
),
|
||||
)
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
Widget _submit(BuildContext context) {
|
||||
return InkWell(
|
||||
onTap: () {
|
||||
Get.to(()=>PayOrderPage());
|
||||
},
|
||||
child: Container(
|
||||
decoration: BoxDecoration(
|
||||
color: BaseStyle.colorffc40c,
|
||||
borderRadius: BorderRadius.all(Radius.circular(33)),
|
||||
),
|
||||
padding: EdgeInsets.symmetric(
|
||||
horizontal: 39.w,
|
||||
vertical: 12.w,
|
||||
),
|
||||
child: Text(
|
||||
'提交订单',
|
||||
style: TextStyle(
|
||||
fontSize: BaseStyle.fontSize30,
|
||||
color: ktextPrimary,
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
color: Colors.white,
|
||||
width: MediaQuery.of(context).size.width,
|
||||
height: 98.w,
|
||||
padding: EdgeInsets.only(
|
||||
top: 15.w,
|
||||
bottom: 17.w,
|
||||
right: 34.w,
|
||||
),
|
||||
child: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
children: [
|
||||
_countPrice(),
|
||||
SizedBox(width: 12.w),
|
||||
_submit(context),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,259 +0,0 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:flutter_icons/flutter_icons.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import 'package:akuCommunity/pages/invoice/invoice_page.dart';
|
||||
import 'package:akuCommunity/routers/page_routers.dart';
|
||||
import 'package:akuCommunity/utils/headers.dart';
|
||||
import 'package:akuCommunity/widget/cached_image_wrapper.dart';
|
||||
|
||||
// import 'package:akuCommunity/widget/cart_count.dart';
|
||||
|
||||
class ConfirmContent extends StatelessWidget {
|
||||
final Map cartMap;
|
||||
ConfirmContent({Key key, this.cartMap}) : super(key: key);
|
||||
|
||||
Widget _cartHeader() {
|
||||
return Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
CachedImageWrapper(
|
||||
url: cartMap["itempic"],
|
||||
height: 210.w,
|
||||
width: 210.w,
|
||||
),
|
||||
SizedBox(width: 20.w),
|
||||
Column(
|
||||
children: [
|
||||
Container(
|
||||
width: 288.w,
|
||||
child: Text(
|
||||
cartMap["itemtitle"],
|
||||
overflow: TextOverflow.ellipsis,
|
||||
maxLines: 2,
|
||||
style: TextStyle(
|
||||
fontSize: 24.sp,
|
||||
color: Color(0xff333333),
|
||||
),
|
||||
),
|
||||
),
|
||||
SizedBox(height: 10.w),
|
||||
Container(
|
||||
width: 280.w,
|
||||
padding: EdgeInsets.all(10.w),
|
||||
decoration: BoxDecoration(
|
||||
color: Color(0xfff0f0f0),
|
||||
borderRadius: BorderRadius.all(Radius.circular(2)),
|
||||
boxShadow: [
|
||||
BoxShadow(
|
||||
color: Color(0xfff0f0f0),
|
||||
offset: Offset(1, 1),
|
||||
),
|
||||
],
|
||||
),
|
||||
child: Text(
|
||||
cartMap["itemtitle"],
|
||||
overflow: TextOverflow.ellipsis,
|
||||
maxLines: 2,
|
||||
style: TextStyle(
|
||||
fontSize: 20.sp,
|
||||
color: Color(0xff666666),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
Widget _cartFooter() {
|
||||
return Positioned(
|
||||
right: 0,
|
||||
bottom: 0,
|
||||
child: Row(
|
||||
children: [
|
||||
Text(
|
||||
'共计${cartMap["count"]}件',
|
||||
style: TextStyle(
|
||||
fontSize: 24.sp,
|
||||
color: Color(0xff999999),
|
||||
),
|
||||
),
|
||||
SizedBox(width: 10.w),
|
||||
Text(
|
||||
'合计:¥${(double.parse(cartMap["itemprice"]) * cartMap["count"]).toStringAsFixed(2)}',
|
||||
style: TextStyle(
|
||||
fontSize: 24.sp,
|
||||
color: Color(0xffe60e0e),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _cartPrice() {
|
||||
return Positioned(
|
||||
right: 0,
|
||||
top: 0,
|
||||
child: Container(
|
||||
child: Text(
|
||||
'¥${cartMap["itemprice"]}',
|
||||
style: TextStyle(
|
||||
fontSize: 24.sp,
|
||||
color: Color(0xffe60e0e),
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _cartNum() {
|
||||
return Positioned(
|
||||
right: 0,
|
||||
top: 38.w,
|
||||
child: Container(
|
||||
child: Text(
|
||||
'x${cartMap["count"]}',
|
||||
style: TextStyle(
|
||||
fontSize: 20.sp,
|
||||
color: Color(0xff999999),
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white,
|
||||
borderRadius: BorderRadius.all(Radius.circular(8)),
|
||||
),
|
||||
margin: EdgeInsets.symmetric(horizontal: 32.w),
|
||||
padding: EdgeInsets.symmetric(
|
||||
horizontal: 20.w,
|
||||
vertical: 32.w,
|
||||
),
|
||||
child: Stack(
|
||||
children: [
|
||||
Column(
|
||||
children: [
|
||||
_cartHeader(),
|
||||
Container(
|
||||
color: Colors.white,
|
||||
padding: EdgeInsets.only(
|
||||
left: 30.w,
|
||||
right: 12.w,
|
||||
),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Container(
|
||||
margin: EdgeInsets.only(
|
||||
top: 56.w,
|
||||
),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
'配送方式',
|
||||
style: TextStyle(
|
||||
fontSize: 28.sp, color: Color(0xff333333)),
|
||||
),
|
||||
SizedBox(width: 26.w),
|
||||
Text(
|
||||
'普通配送',
|
||||
style: TextStyle(
|
||||
fontSize: 28.sp, color: Color(0xff999999)),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
Container(
|
||||
margin: EdgeInsets.only(
|
||||
top: 56.w,
|
||||
),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(
|
||||
'开具发票',
|
||||
style: TextStyle(
|
||||
fontSize: 28.sp, color: Color(0xff333333)),
|
||||
),
|
||||
InkWell(
|
||||
onTap: () {
|
||||
Get.to(() => InvoicePage(
|
||||
bundle: Bundle()
|
||||
..putString('title', '1123123123123'),
|
||||
));
|
||||
},
|
||||
child: Row(
|
||||
children: [
|
||||
Container(
|
||||
height: 80.w,
|
||||
width: 353.w,
|
||||
child: Text(
|
||||
'增值税电子普通发票-明显-企业-宁波阿库旅游有限公司',
|
||||
maxLines: 2,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
style: TextStyle(
|
||||
fontSize: 28.sp,
|
||||
color: Color(0xff999999),
|
||||
),
|
||||
),
|
||||
),
|
||||
SizedBox(width: 10.w),
|
||||
Icon(
|
||||
AntDesign.right,
|
||||
size: 30.sp,
|
||||
color: Color(0xff999999),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
Container(
|
||||
margin: EdgeInsets.only(
|
||||
top: 56.w,
|
||||
),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
'订单备注',
|
||||
style: TextStyle(
|
||||
fontSize: 28.sp, color: Color(0xff333333)),
|
||||
),
|
||||
SizedBox(width: 14.w),
|
||||
Text(
|
||||
'选填',
|
||||
style: TextStyle(
|
||||
fontSize: 28.sp, color: Color(0xff999999)),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
SizedBox(height: 104.w),
|
||||
],
|
||||
),
|
||||
_cartFooter(),
|
||||
_cartPrice(),
|
||||
_cartNum(),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,83 +0,0 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:akuCommunity/pages/goods_details/view_comments_page.dart';
|
||||
import 'package:akuCommunity/routers/page_routers.dart';
|
||||
import 'package:akuCommunity/utils/headers.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'widget/goods_app_bar.dart';
|
||||
import 'widget/goods_details_bottom_bar.dart';
|
||||
import 'widget/product_content.dart';
|
||||
import 'widget/product_detail.dart';
|
||||
import 'widget/product_evaluate.dart';
|
||||
import 'widget/product_service.dart';
|
||||
import 'widget/product_swiper.dart';
|
||||
|
||||
class GoodsDetailsPage extends StatefulWidget {
|
||||
final Bundle bundle;
|
||||
GoodsDetailsPage({Key key, this.bundle}) : super(key: key);
|
||||
|
||||
@override
|
||||
_GoodsDetailsPageState createState() => _GoodsDetailsPageState();
|
||||
}
|
||||
|
||||
class _GoodsDetailsPageState extends State<GoodsDetailsPage> {
|
||||
Map<String, dynamic> shopInfo = {};
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
shopInfo = json.decode(widget.bundle.getString('shoplist'));
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final List<String> params = shopInfo["taobao_image"].split(',');
|
||||
return Scaffold(
|
||||
appBar: PreferredSize(
|
||||
child: GoodsAppBar(
|
||||
shareImg: params.first,
|
||||
title: shopInfo["itemtitle"],
|
||||
),
|
||||
preferredSize: Size.fromHeight(kToolbarHeight),
|
||||
),
|
||||
body: Stack(
|
||||
children: [
|
||||
ListView(
|
||||
padding: EdgeInsets.only(bottom: 100.w),
|
||||
children: [
|
||||
ProductSwiper(imageUrl: params),
|
||||
ProductContent(
|
||||
itemprice: shopInfo["itemprice"],
|
||||
itemtitle: shopInfo["itemtitle"],
|
||||
itemshorttitle: shopInfo["itemshorttitle"],
|
||||
itemdesc: shopInfo["itemdesc"],
|
||||
),
|
||||
ProductService(),
|
||||
// ProductSpecs(),
|
||||
ProductEvaluate(
|
||||
fun: () {
|
||||
Get.to(() => ViewCommentsPage());
|
||||
},
|
||||
),
|
||||
ProductDetail(
|
||||
picDesc: shopInfo["itempic_copy"],
|
||||
),
|
||||
],
|
||||
),
|
||||
Positioned(
|
||||
bottom: 0,
|
||||
child: GoodsDetailsBottomBar(
|
||||
itemid: shopInfo["itemid"],
|
||||
itemtitle: shopInfo["itemtitle"],
|
||||
itemprice: shopInfo["itemprice"],
|
||||
itempic: shopInfo["itempic"],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,247 +0,0 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:akuCommunity/base/base_style.dart';
|
||||
import 'package:akuCommunity/utils/headers.dart';
|
||||
import 'widget/goods_app_bar.dart';
|
||||
import 'widget/goods_comments_card.dart';
|
||||
|
||||
final List<String> imageUrl = [
|
||||
'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1599023251944&di=59dc4c919525b21567da91d7564b250b&imgtype=0&src=http%3A%2F%2Fku.90sjimg.com%2Felement_origin_min_pic%2F16%2F11%2F13%2Fd6882b6abd40c900655c87ebfc8dee0a.jpg',
|
||||
'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1599023251944&di=114f065583b0fb949c2621df5eb2aeb0&imgtype=0&src=http%3A%2F%2Fwww.track-roller.com%2Fimg%2Ftk9912701.jpg',
|
||||
'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1599023251943&di=2208befacee137736dced7bec5fc71a5&imgtype=0&src=http%3A%2F%2F5b0988e595225.cdn.sohucs.com%2Fimages%2F20170921%2F0ebcc71a45f24904a0f89ae90d65787e.jpeg'
|
||||
];
|
||||
|
||||
class ViewCommentsPage extends StatefulWidget {
|
||||
ViewCommentsPage({Key key}) : super(key: key);
|
||||
|
||||
@override
|
||||
_ViewCommentsPageState createState() => _ViewCommentsPageState();
|
||||
}
|
||||
|
||||
class _ViewCommentsPageState extends State<ViewCommentsPage> {
|
||||
List<Map<String, dynamic>> _commentsClassList = [
|
||||
{'title': "全部", 'isSelect': true},
|
||||
{'title': "好评(23)", 'isSelect': false},
|
||||
{'title': "差评(0)", 'isSelect': false},
|
||||
{'title': "中评(0)", 'isSelect': false},
|
||||
{'title': "追加(24)", 'isSelect': false},
|
||||
];
|
||||
|
||||
List<Map<String, dynamic>> _commentsCardList = [
|
||||
{
|
||||
'imagePath':
|
||||
"https://dss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=1812993978,4158651947&fm=26&gp=0.jpg",
|
||||
'name': '就是安安啊',
|
||||
'subtitle': "4天前 尺码[170-185cm] 颜色分类:黑色",
|
||||
'content': '面料和版型都不错,会回购',
|
||||
'contentImageList': imageUrl,
|
||||
'viewNum': '5',
|
||||
},
|
||||
{
|
||||
'imagePath':
|
||||
"https://dss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=2690587153,2643787055&fm=26&gp=0.jpg",
|
||||
'name': '马泽鹏',
|
||||
'subtitle': "47天前 尺码[170-185cm] 颜色分类:黑色",
|
||||
'content': '太好蓝了,现在天气有点热,赶快到秋天',
|
||||
'contentImageList': [
|
||||
'https://img.alicdn.com/imgextra/i3/409405727/O1CN01yNXzbp1sB0pPy06vu_!!409405727.jpg',
|
||||
'https://img.alicdn.com/imgextra/i3/409405727/O1CN01yNXzbp1sB0pPy06vu_!!409405727.jpg',
|
||||
'https://img.alicdn.com/imgextra/i2/409405727/O1CN01oaedss1sB0pPDo1JB_!!409405727.jpg'
|
||||
],
|
||||
'viewNum': '532',
|
||||
},
|
||||
{
|
||||
'imagePath':
|
||||
"https://dss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=3095823371,2737858048&fm=26&gp=0.jpg",
|
||||
'name': '王珂珂',
|
||||
'subtitle': "4天前 尺码[170-185cm] 颜色分类:黑色",
|
||||
'content': '面料和版型都不错,会回购',
|
||||
'contentImageList': [
|
||||
'https://img.alicdn.com/bao/uploaded/i4/O1CN01XIzuhk1FdADbW7Cwf_!!0-rate.jpg_400x400.jpg',
|
||||
'https://img.alicdn.com/bao/uploaded/i1/O1CN01KNMhVC242YySXXE4f_!!0-rate.jpg_400x400.jpg',
|
||||
'https://img.alicdn.com/bao/uploaded/i4/O1CN01A2q4Bb2LhBZJ5elrj_!!0-rate.jpg_400x400.jpg',
|
||||
],
|
||||
'viewNum': '235',
|
||||
},
|
||||
];
|
||||
|
||||
// RefreshController _refreshController =
|
||||
// RefreshController(initialRefresh: false);
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
}
|
||||
|
||||
void _onRefresh() async {
|
||||
await Future.delayed(Duration(milliseconds: 1500));
|
||||
|
||||
// _refreshController.refreshCompleted();
|
||||
}
|
||||
|
||||
void _onLoading() async {
|
||||
await Future.delayed(Duration(milliseconds: 1500));
|
||||
_commentsCardList.add({
|
||||
'imagePath':
|
||||
"https://dss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=3095823371,2737858048&fm=26&gp=0.jpg",
|
||||
'name': '王珂珂',
|
||||
'subtitle': "4天前 尺码[170-185cm] 颜色分类:黑色",
|
||||
'content': '面料和版型都不错,会回购',
|
||||
'contentImageList': imageUrl,
|
||||
'viewNum': '235',
|
||||
});
|
||||
if (mounted) setState(() {});
|
||||
// _refreshController.loadComplete();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
super.dispose();
|
||||
// _refreshController.dispose();
|
||||
}
|
||||
|
||||
Container _commentsClass() {
|
||||
return Container(
|
||||
color: Colors.white,
|
||||
padding: EdgeInsets.only(
|
||||
top: 29.w,
|
||||
left: 32.w,
|
||||
bottom: 40.w,
|
||||
),
|
||||
width: MediaQuery.of(context).size.width,
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Container(
|
||||
margin: EdgeInsets.only(bottom: 25.w),
|
||||
child: Text(
|
||||
'按分类评价',
|
||||
style: TextStyle(
|
||||
fontSize: BaseStyle.fontSize28,
|
||||
color: BaseStyle.color999999,
|
||||
),
|
||||
),
|
||||
),
|
||||
Wrap(
|
||||
spacing: 10.w,
|
||||
runSpacing: 20.w,
|
||||
children: _commentsClassList
|
||||
.map((item) => InkWell(
|
||||
onTap: () {
|
||||
_commentsClassList.forEach((item) {
|
||||
item['isSelect'] = false;
|
||||
});
|
||||
setState(() {
|
||||
item['isSelect'] = true;
|
||||
});
|
||||
},
|
||||
child: ClipRRect(
|
||||
borderRadius: BorderRadius.all(Radius.circular(24)),
|
||||
child: Container(
|
||||
padding: EdgeInsets.only(
|
||||
left: 24.w,
|
||||
right: 23.w,
|
||||
top: 9.w,
|
||||
bottom: 10.w,
|
||||
),
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.all(Radius.circular(24)),
|
||||
color: item['isSelect']
|
||||
? Color(0xfffff6da)
|
||||
: Color(0xffededed),
|
||||
border: Border.all(
|
||||
color: item['isSelect']
|
||||
? Color(0xffffc40c)
|
||||
: Colors.transparent,
|
||||
width: 0.5),
|
||||
),
|
||||
child: Text(
|
||||
item['title'],
|
||||
style: TextStyle(
|
||||
fontSize: BaseStyle.fontSize24,
|
||||
color: ktextPrimary,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
))
|
||||
.toList(),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: PreferredSize(
|
||||
child: GoodsAppBar(),
|
||||
preferredSize: Size.fromHeight(kToolbarHeight),
|
||||
),
|
||||
body: Column(
|
||||
children: [
|
||||
_commentsClass(),
|
||||
Expanded(
|
||||
child: ListView.builder(
|
||||
padding: EdgeInsets.only(top: 30.w),
|
||||
itemBuilder: (BuildContext context, int index) => Container(
|
||||
color: Colors.white,
|
||||
child: GoodsCommentsCard(
|
||||
imagePath: _commentsCardList[index]['imagePath'],
|
||||
name: _commentsCardList[index]['name'],
|
||||
subtitle: _commentsCardList[index]['subtitle'],
|
||||
content: _commentsCardList[index]['content'],
|
||||
contentImageList: _commentsCardList[index]
|
||||
['contentImageList'],
|
||||
viewNum: _commentsCardList[index]['viewNum'],
|
||||
),
|
||||
),
|
||||
itemCount: _commentsCardList.length,
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
|
||||
// NestedScrollView(
|
||||
// headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {
|
||||
// return <Widget>[
|
||||
// SliverPersistentHeader(
|
||||
// pinned: true,
|
||||
// delegate: SliverAppBarDelegate(
|
||||
// minHeight: 200,
|
||||
// maxHeight: 200,
|
||||
// child: _commentsClass(),
|
||||
// ),
|
||||
// )
|
||||
// ];
|
||||
// },
|
||||
// body: RefreshConfiguration(
|
||||
// hideFooterWhenNotFull: true,
|
||||
// child: SmartRefresher(
|
||||
// controller: _refreshController,
|
||||
// header: WaterDropHeader(),
|
||||
// footer: ClassicFooter(),
|
||||
// onRefresh: _onRefresh,
|
||||
// onLoading: _onLoading,
|
||||
// enablePullUp: true,
|
||||
// child: ListView.builder(
|
||||
// itemBuilder: (BuildContext context, int index) => Text('data'),
|
||||
// itemCount: 6,
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
// children: [
|
||||
// Positioned(
|
||||
// top: 0,
|
||||
// left: 0,
|
||||
// right: 0,
|
||||
// child: _commentsClass(),
|
||||
// ),
|
||||
|
||||
// ],
|
||||
// ),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,96 +0,0 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:flutter_icons/flutter_icons.dart';
|
||||
import 'package:fluwx/fluwx.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import 'package:akuCommunity/base/base_style.dart';
|
||||
import 'package:akuCommunity/pages/market/market_cart_page/market_cart_page.dart';
|
||||
import 'package:akuCommunity/utils/headers.dart';
|
||||
|
||||
class GoodsAppBar extends StatefulWidget {
|
||||
final String shareImg;
|
||||
final String title;
|
||||
GoodsAppBar({Key key, this.shareImg, this.title}) : super(key: key);
|
||||
|
||||
@override
|
||||
_GoodsAppBarState createState() => _GoodsAppBarState();
|
||||
}
|
||||
|
||||
class _GoodsAppBarState extends State<GoodsAppBar> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return AppBar(
|
||||
elevation: 0,
|
||||
backgroundColor: Color(0xffffffff),
|
||||
titleSpacing: 0,
|
||||
leading: IconButton(
|
||||
icon: Icon(AntDesign.left, size: 40.sp),
|
||||
onPressed: () {
|
||||
Get.back();
|
||||
},
|
||||
),
|
||||
title: Container(
|
||||
padding: EdgeInsets.symmetric(
|
||||
horizontal: 40.w,
|
||||
vertical: 15.w,
|
||||
),
|
||||
decoration: BoxDecoration(
|
||||
color: Color(0xfff3f3f3),
|
||||
borderRadius: BorderRadius.all(Radius.circular(34)),
|
||||
boxShadow: <BoxShadow>[
|
||||
BoxShadow(color: Color(0xfff3f3f3), offset: Offset(1, 1)),
|
||||
],
|
||||
),
|
||||
child: InkWell(
|
||||
onTap: () {},
|
||||
child: Container(
|
||||
child: Row(children: [
|
||||
Icon(
|
||||
AntDesign.search1,
|
||||
size: BaseStyle.fontSize30,
|
||||
color: BaseStyle.color999999,
|
||||
),
|
||||
SizedBox(width: 5),
|
||||
Text(
|
||||
'搜索宝贝',
|
||||
style: TextStyle(
|
||||
fontSize: BaseStyle.fontSize28,
|
||||
color: BaseStyle.color999999,
|
||||
),
|
||||
)
|
||||
]),
|
||||
),
|
||||
),
|
||||
),
|
||||
actions: [
|
||||
IconButton(
|
||||
icon: Icon(
|
||||
SimpleLineIcons.share,
|
||||
size: 40.sp,
|
||||
color: Color(0xff666666),
|
||||
),
|
||||
onPressed: () {
|
||||
shareToWeChat(WeChatShareWebPageModel(
|
||||
'https://mobile.baidu.com/item?docid=27505288',
|
||||
thumbnail: WeChatImage.network(widget.shareImg),
|
||||
title: widget.title,
|
||||
description: '前往小蜜蜂智慧社区查看吧',
|
||||
));
|
||||
},
|
||||
),
|
||||
IconButton(
|
||||
icon: Icon(
|
||||
AntDesign.shoppingcart,
|
||||
size: 40.sp,
|
||||
color: Color(0xff666666),
|
||||
),
|
||||
onPressed: () {
|
||||
Get.to(() => MarketCartPage());
|
||||
},
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
@ -1,168 +0,0 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:flutter_icons/flutter_icons.dart';
|
||||
|
||||
import 'package:akuCommunity/base/base_style.dart';
|
||||
import 'package:akuCommunity/utils/headers.dart';
|
||||
import 'package:akuCommunity/widget/cached_image_wrapper.dart';
|
||||
import 'package:akuCommunity/widget/expandable_text.dart';
|
||||
import 'package:akuCommunity/widget/views/horizontal_image_view.dart';
|
||||
|
||||
class GoodsCommentsCard extends StatefulWidget {
|
||||
final String imagePath,
|
||||
name,
|
||||
subtitle,
|
||||
content,
|
||||
addTime,
|
||||
addContent,
|
||||
viewNum,
|
||||
usefulNum;
|
||||
final List<String> contentImageList, addContentImageList;
|
||||
GoodsCommentsCard(
|
||||
{Key key,
|
||||
this.imagePath,
|
||||
this.name,
|
||||
this.subtitle,
|
||||
this.content,
|
||||
this.addTime,
|
||||
this.addContent,
|
||||
this.viewNum,
|
||||
this.usefulNum,
|
||||
this.contentImageList,
|
||||
this.addContentImageList})
|
||||
: super(key: key);
|
||||
|
||||
@override
|
||||
_GoodsCommentsCardState createState() => _GoodsCommentsCardState();
|
||||
}
|
||||
|
||||
class _GoodsCommentsCardState extends State<GoodsCommentsCard> {
|
||||
Container _cardHeader(String imagePath, name, subtitle) {
|
||||
return Container(
|
||||
child: Row(
|
||||
children: [
|
||||
Container(
|
||||
margin: EdgeInsets.only(right: 12.w),
|
||||
child: ClipOval(
|
||||
child: CachedImageWrapper(
|
||||
url: imagePath,
|
||||
width: 50.w,
|
||||
height: 50.w,
|
||||
),
|
||||
),
|
||||
),
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
name,
|
||||
style: TextStyle(
|
||||
fontSize: BaseStyle.fontSize24,
|
||||
color: ktextPrimary,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 4.w),
|
||||
Text(
|
||||
subtitle,
|
||||
style: TextStyle(
|
||||
fontSize: BaseStyle.fontSize18,
|
||||
color: BaseStyle.color999999,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Container _cardContent(
|
||||
String content,
|
||||
List<String> contentImageList,
|
||||
) {
|
||||
return Container(
|
||||
margin: EdgeInsets.only(top: 15.w),
|
||||
padding: EdgeInsets.only(bottom: 20.w),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Container(
|
||||
margin: EdgeInsets.only(bottom: 20.w),
|
||||
child: ExpandableText(
|
||||
text: content,
|
||||
maxLines: 3,
|
||||
style: TextStyle(
|
||||
fontSize: BaseStyle.fontSize24,
|
||||
color: ktextPrimary,
|
||||
),
|
||||
expand: false,
|
||||
),
|
||||
),
|
||||
HorizontalImageView(contentImageList),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Container _cardFooter(String viewNum) {
|
||||
return Container(
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(
|
||||
'浏览$viewNum次',
|
||||
style: TextStyle(
|
||||
fontSize: BaseStyle.fontSize22,
|
||||
color: BaseStyle.color999999,
|
||||
),
|
||||
),
|
||||
InkWell(
|
||||
onTap: () {},
|
||||
child: Row(
|
||||
children: [
|
||||
Icon(
|
||||
Feather.triangle,
|
||||
size: BaseStyle.fontSize22,
|
||||
color: ktextPrimary,
|
||||
),
|
||||
SizedBox(width: 10.w),
|
||||
Text(
|
||||
'有用',
|
||||
style: TextStyle(
|
||||
fontSize: BaseStyle.fontSize22,
|
||||
color: ktextPrimary,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
margin: EdgeInsets.only(
|
||||
top: 32.w,
|
||||
left: 32.w,
|
||||
right: 32.w,
|
||||
),
|
||||
padding: EdgeInsets.only(bottom: 32.w),
|
||||
decoration: BoxDecoration(
|
||||
border:
|
||||
Border(bottom: BorderSide(color: Color(0xffd8d8d8), width: 0.5)),
|
||||
),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
_cardHeader(widget.imagePath, widget.name, widget.subtitle),
|
||||
_cardContent(widget.content, widget.contentImageList),
|
||||
_cardFooter(widget.viewNum),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,188 +0,0 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:flutter_icons/flutter_icons.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
import 'package:akuCommunity/pages/market/market_cart_page/market_cart_page.dart';
|
||||
import 'package:akuCommunity/provider/cart.dart';
|
||||
import 'package:akuCommunity/widget/goods_specs_sheet.dart';
|
||||
|
||||
class GoodsDetailsBottomBar extends StatefulWidget {
|
||||
final String itemid, itemtitle, itemprice, itempic;
|
||||
GoodsDetailsBottomBar(
|
||||
{Key key, this.itemid, this.itemtitle, this.itemprice, this.itempic})
|
||||
: super(key: key);
|
||||
|
||||
@override
|
||||
_GoodsDetailsBottomBarState createState() => _GoodsDetailsBottomBarState();
|
||||
}
|
||||
|
||||
class _GoodsDetailsBottomBarState extends State<GoodsDetailsBottomBar> {
|
||||
int count = 1;
|
||||
bool _isCollected = false;
|
||||
void _showModelBotoomSheet(String type) {
|
||||
showModalBottomSheet(
|
||||
// isScrollControlled: true,
|
||||
context: context,
|
||||
backgroundColor: Colors.white,
|
||||
builder: (context) {
|
||||
return GoodsSpecsSheet(
|
||||
itemid: widget.itemid,
|
||||
itemtitle: widget.itemtitle,
|
||||
itempic: widget.itempic,
|
||||
itemprice: widget.itemprice,
|
||||
type: type,
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Consumer<CartProvidde>(builder: (context, model, child) {
|
||||
return Container(
|
||||
decoration: BoxDecoration(
|
||||
color: Color(0xffffffff),
|
||||
boxShadow: <BoxShadow>[
|
||||
BoxShadow(
|
||||
color: Colors.black,
|
||||
offset: Offset(1.1, 1.1),
|
||||
),
|
||||
],
|
||||
),
|
||||
padding: EdgeInsets.only(
|
||||
left: 35.w,
|
||||
right: 35.w,
|
||||
top: 13.w,
|
||||
bottom: 47.w,
|
||||
),
|
||||
child: Row(
|
||||
children: [
|
||||
InkWell(
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
_isCollected
|
||||
? Icon(
|
||||
AntDesign.star,
|
||||
color: Colors.red,
|
||||
size: 38.sp,
|
||||
)
|
||||
: Icon(
|
||||
AntDesign.staro,
|
||||
color: Color(0xff000000),
|
||||
size: ScreenUtil().setSp(38),
|
||||
),
|
||||
SizedBox(height: 2),
|
||||
Text(
|
||||
'收藏',
|
||||
style: TextStyle(
|
||||
fontSize: ScreenUtil().setSp(18),
|
||||
color: Color(0xff999999)),
|
||||
)
|
||||
],
|
||||
),
|
||||
onTap: () {
|
||||
setState(() {
|
||||
_isCollected = !_isCollected;
|
||||
});
|
||||
},
|
||||
),
|
||||
SizedBox(width: 46.w),
|
||||
InkWell(
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
Icon(
|
||||
AntDesign.shoppingcart,
|
||||
color: Color(0xff000000),
|
||||
size: ScreenUtil().setSp(38),
|
||||
),
|
||||
SizedBox(height: 2),
|
||||
Text(
|
||||
'购物车',
|
||||
style: TextStyle(
|
||||
fontSize: ScreenUtil().setSp(18),
|
||||
color: Color(0xff999999)),
|
||||
)
|
||||
],
|
||||
),
|
||||
onTap: () {
|
||||
Get.to(() => MarketCartPage());
|
||||
},
|
||||
),
|
||||
SizedBox(width: 53.w),
|
||||
InkWell(
|
||||
child: Container(
|
||||
decoration: BoxDecoration(
|
||||
color: Color(0xff36373b),
|
||||
borderRadius: BorderRadius.all(Radius.circular(33)),
|
||||
boxShadow: <BoxShadow>[
|
||||
BoxShadow(
|
||||
color: Color(0xff36373b).withOpacity(0.3),
|
||||
offset: Offset(1, 1),
|
||||
),
|
||||
],
|
||||
),
|
||||
padding: EdgeInsets.symmetric(
|
||||
horizontal: 40.w,
|
||||
vertical: 12.w,
|
||||
),
|
||||
child: Text(
|
||||
'加入购物车',
|
||||
style: TextStyle(
|
||||
fontSize: ScreenUtil().setSp(30),
|
||||
color: Color(0xffffffff),
|
||||
),
|
||||
),
|
||||
),
|
||||
onTap: () {
|
||||
_showModelBotoomSheet('加入购物车');
|
||||
}
|
||||
|
||||
// () {
|
||||
// _showModelBotoomSheet();
|
||||
// // await model.save(widget.itemid, widget.itemtitle, count,
|
||||
// // widget.itemprice, widget.itempic);
|
||||
// } //_showModelBotoomSheet,
|
||||
),
|
||||
SizedBox(width: 24.w),
|
||||
InkWell(
|
||||
child: Container(
|
||||
decoration: BoxDecoration(
|
||||
color: Color(0xffffc40c),
|
||||
borderRadius: BorderRadius.all(Radius.circular(33)),
|
||||
boxShadow: <BoxShadow>[
|
||||
BoxShadow(
|
||||
color: Color(0xffffc40c),
|
||||
offset: Offset(1, 1),
|
||||
),
|
||||
],
|
||||
),
|
||||
padding: EdgeInsets.symmetric(
|
||||
horizontal: 55.w,
|
||||
vertical: 12.w,
|
||||
),
|
||||
child: Text(
|
||||
'立即购买',
|
||||
style: TextStyle(
|
||||
fontSize: ScreenUtil().setSp(30),
|
||||
color: Color(0xff333333),
|
||||
),
|
||||
),
|
||||
),
|
||||
onTap: () {
|
||||
_showModelBotoomSheet('立即购买');
|
||||
} //_showModelBotoomSheet,
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
@ -1,200 +0,0 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:flutter_icons/flutter_icons.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:fluwx/fluwx.dart';
|
||||
|
||||
class ProductContent extends StatelessWidget {
|
||||
final String itemprice, itemtitle, itemshorttitle, itemdesc;
|
||||
ProductContent(
|
||||
{Key key,
|
||||
this.itemprice,
|
||||
this.itemtitle,
|
||||
this.itemshorttitle,
|
||||
this.itemdesc})
|
||||
: super(key: key);
|
||||
|
||||
Row _rowPrice(String price) {
|
||||
return Row(
|
||||
children: [
|
||||
Text(
|
||||
'¥$price',
|
||||
style: TextStyle(
|
||||
fontSize: ScreenUtil().setSp(42),
|
||||
color: Color(0xff333333),
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
),
|
||||
SizedBox(width: 10.w),
|
||||
Text(
|
||||
'元',
|
||||
style: TextStyle(
|
||||
fontSize: ScreenUtil().setSp(20),
|
||||
color: Color(0xff333333),
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
Container _containerTitle(String title) {
|
||||
return Container(
|
||||
margin: EdgeInsets.only(
|
||||
top: 28.w,
|
||||
bottom: 18.w,
|
||||
right: 106.w,
|
||||
),
|
||||
child: Text(
|
||||
title,
|
||||
maxLines: 2,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
style: TextStyle(
|
||||
fontSize: ScreenUtil().setSp(30), color: Color(0xff333333)),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Container _containerSubtitle(String shortTitle) {
|
||||
return Container(
|
||||
margin: EdgeInsets.only(right: 286.w),
|
||||
child: Text(
|
||||
shortTitle,
|
||||
maxLines: 1,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
style: TextStyle(
|
||||
fontSize: ScreenUtil().setSp(24), color: Color(0xff666666)),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Container _containerRecommend(String desc) {
|
||||
return Container(
|
||||
decoration: BoxDecoration(
|
||||
color: Color(0xfff0f0f0),
|
||||
borderRadius: BorderRadius.all(Radius.circular(4)),
|
||||
boxShadow: <BoxShadow>[
|
||||
BoxShadow(color: Color(0xfff3f3f3), offset: Offset(1, 1)),
|
||||
],
|
||||
),
|
||||
margin: EdgeInsets.only(
|
||||
left: 72.w,
|
||||
right: 72.w,
|
||||
top: 58.w,
|
||||
),
|
||||
padding: EdgeInsets.symmetric(
|
||||
horizontal: 33.w,
|
||||
vertical: 11.w,
|
||||
),
|
||||
child: Text(
|
||||
desc,
|
||||
maxLines: 2,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
style: TextStyle(
|
||||
fontSize: ScreenUtil().setSp(20),
|
||||
color: Color(0xff666666),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Positioned _positionedShare() {
|
||||
return Positioned(
|
||||
right: 0,
|
||||
top: 169.w,
|
||||
child: InkWell(
|
||||
onTap: () {
|
||||
shareToWeChat(WeChatShareWebPageModel(
|
||||
'https://mobile.baidu.com/item?docid=27505288',
|
||||
title: itemtitle,
|
||||
description: '前往小蜜蜂智慧社区查看吧',
|
||||
));
|
||||
},
|
||||
child: Container(
|
||||
decoration: BoxDecoration(
|
||||
color: Color(0xfff0f0f0),
|
||||
borderRadius: BorderRadius.only(
|
||||
topLeft: Radius.circular(100),
|
||||
bottomLeft: Radius.circular(100),
|
||||
),
|
||||
boxShadow: <BoxShadow>[
|
||||
BoxShadow(color: Color(0xfff3f3f3), offset: Offset(1, 1)),
|
||||
],
|
||||
),
|
||||
padding: EdgeInsets.symmetric(
|
||||
horizontal: 14.w,
|
||||
vertical: 9.w,
|
||||
),
|
||||
child: Row(
|
||||
children: [
|
||||
Icon(
|
||||
SimpleLineIcons.share,
|
||||
size: ScreenUtil().setSp(20),
|
||||
),
|
||||
SizedBox(width: 12.w),
|
||||
Text(
|
||||
'分享',
|
||||
style: TextStyle(
|
||||
fontSize: ScreenUtil().setSp(20),
|
||||
color: Color(0xff666666),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Positioned _positionedRecommend() {
|
||||
return Positioned(
|
||||
right: 453.w,
|
||||
bottom: 100.w,
|
||||
child: Row(
|
||||
children: [
|
||||
Icon(
|
||||
AntDesign.hearto,
|
||||
color: Color(0xff999999),
|
||||
size: ScreenUtil().setSp(24),
|
||||
),
|
||||
SizedBox(width: 12.w),
|
||||
Text(
|
||||
'推荐理由',
|
||||
style: TextStyle(
|
||||
fontSize: ScreenUtil().setSp(20), color: Color(0xff999999)),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
color: Color(0xffffffff),
|
||||
child: Stack(
|
||||
children: [
|
||||
Padding(
|
||||
padding: EdgeInsets.only(
|
||||
left: 32.w,
|
||||
top: 25.w,
|
||||
bottom: 20.w,
|
||||
),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
_rowPrice(itemprice),
|
||||
_containerTitle(itemtitle),
|
||||
_containerSubtitle(itemshorttitle),
|
||||
_containerRecommend(itemdesc),
|
||||
],
|
||||
),
|
||||
),
|
||||
_positionedShare(),
|
||||
_positionedRecommend(),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,57 +0,0 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:akuCommunity/base/base_style.dart';
|
||||
import 'package:akuCommunity/utils/headers.dart';
|
||||
import 'package:akuCommunity/widget/cached_image_wrapper.dart';
|
||||
|
||||
class ProductDetail extends StatelessWidget {
|
||||
final String picDesc;
|
||||
ProductDetail({Key key, this.picDesc}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
color: Color(0xffffffff),
|
||||
margin: EdgeInsets.only(top: 30.w),
|
||||
padding: EdgeInsets.only(
|
||||
top: 20.w,
|
||||
left: 32.w,
|
||||
right: 32.w,
|
||||
bottom: 32.w,
|
||||
),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
'商品详情',
|
||||
style: TextStyle(
|
||||
fontSize: BaseStyle.fontSize30,
|
||||
color: Color(0xff333333),
|
||||
),
|
||||
),
|
||||
SizedBox(height: 12.w),
|
||||
Container(
|
||||
child: AspectRatio(
|
||||
aspectRatio: 1,
|
||||
child: CachedImageWrapper(
|
||||
url: picDesc.contains('http')
|
||||
? picDesc
|
||||
: 'http://img-haodanku-com.cdn.fudaiapp.com/' + picDesc,
|
||||
width: 1,
|
||||
height: 1,
|
||||
fit: BoxFit.fill,
|
||||
),
|
||||
),
|
||||
),
|
||||
// Container(
|
||||
// child: Image.asset(
|
||||
// picDesc,
|
||||
// fit: BoxFit.fill,
|
||||
// ),
|
||||
// ),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,111 +0,0 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:flutter_icons/flutter_icons.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
|
||||
class ProductEvaluate extends StatelessWidget {
|
||||
final Function fun;
|
||||
ProductEvaluate({Key key, this.fun}) : super(key: key);
|
||||
|
||||
Stack _stackEvaluateHeader() {
|
||||
return Stack(
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
Text(
|
||||
'宝贝评价(1239)',
|
||||
style: TextStyle(
|
||||
fontSize: ScreenUtil().setSp(30),
|
||||
color: Color(0xff333333),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
Positioned(
|
||||
right: 32.w,
|
||||
child: InkWell(
|
||||
onTap: () {
|
||||
fun();
|
||||
},
|
||||
child: Row(
|
||||
children: [
|
||||
Text(
|
||||
'查看全部',
|
||||
style: TextStyle(
|
||||
fontSize: ScreenUtil().setSp(28),
|
||||
color: Color(0xff999999),
|
||||
),
|
||||
),
|
||||
SizedBox(width: 20.w),
|
||||
Icon(
|
||||
AntDesign.right,
|
||||
size: ScreenUtil().setSp(34),
|
||||
color: Color(0xff999999),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
Column _columnEvaluateContent() {
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
ClipOval(
|
||||
child: Image.asset(
|
||||
'assets/example/touxiang1.png',
|
||||
height: 50.w,
|
||||
width: 50.w,
|
||||
fit: BoxFit.fill,
|
||||
),
|
||||
),
|
||||
SizedBox(width: 10.w),
|
||||
Text(
|
||||
'就是安安啊',
|
||||
style: TextStyle(
|
||||
fontSize: ScreenUtil().setSp(28),
|
||||
color: Color(0xff999999),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 12.w),
|
||||
Text(
|
||||
'面料和版型都不错,会回购',
|
||||
maxLines: 2,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
style: TextStyle(
|
||||
color: Color(0xff333333),
|
||||
fontSize: ScreenUtil().setSp(24),
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
color: Color(0xffffffff),
|
||||
margin: EdgeInsets.only(top: 30.w),
|
||||
padding: EdgeInsets.only(
|
||||
top: 20.w,
|
||||
left: 32.w,
|
||||
bottom: 32.w,
|
||||
),
|
||||
child: Column(
|
||||
children: [
|
||||
_stackEvaluateHeader(),
|
||||
SizedBox(height: 32.w),
|
||||
_columnEvaluateContent(),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,122 +0,0 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:flutter_icons/flutter_icons.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
|
||||
class ProductService extends StatelessWidget {
|
||||
const ProductService({Key key}) : super(key: key);
|
||||
|
||||
Row _rowDelivergoods() {
|
||||
return Row(
|
||||
children: [
|
||||
Text(
|
||||
'发货',
|
||||
style: TextStyle(
|
||||
fontSize: ScreenUtil().setSp(28),
|
||||
color: Color(0xff999999),
|
||||
),
|
||||
),
|
||||
SizedBox(width: 59.w),
|
||||
Row(
|
||||
children: [
|
||||
Icon(
|
||||
EvilIcons.location,
|
||||
size: ScreenUtil().setSp(34),
|
||||
color: Color(0xff666666),
|
||||
),
|
||||
SizedBox(
|
||||
width: 9.w,
|
||||
),
|
||||
Text(
|
||||
'浙江杭州',
|
||||
style: TextStyle(
|
||||
fontSize: ScreenUtil().setSp(28),
|
||||
color: Color(0xff333333),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(width: 38.w),
|
||||
Row(
|
||||
children: [
|
||||
Text(
|
||||
'快递:',
|
||||
style: TextStyle(
|
||||
fontSize: ScreenUtil().setSp(28),
|
||||
color: Color(0xff333333),
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
width: 9.w,
|
||||
),
|
||||
Text(
|
||||
'全国包邮',
|
||||
style: TextStyle(
|
||||
fontSize: ScreenUtil().setSp(28),
|
||||
color: Color(0xff333333),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
Row _rowService() {
|
||||
return Row(
|
||||
children: [
|
||||
Text(
|
||||
'服务',
|
||||
style: TextStyle(
|
||||
fontSize: ScreenUtil().setSp(28),
|
||||
color: Color(0xff999999),
|
||||
),
|
||||
),
|
||||
SizedBox(width: 59.w),
|
||||
Text(
|
||||
'品质保证',
|
||||
style: TextStyle(
|
||||
fontSize: ScreenUtil().setSp(28),
|
||||
color: Color(0xff333333),
|
||||
),
|
||||
),
|
||||
SizedBox(width: 16.w),
|
||||
SizedBox(
|
||||
width: 1,
|
||||
height: 24.w,
|
||||
child: DecoratedBox(
|
||||
decoration: BoxDecoration(color: Color(0xffd8d8d8)),
|
||||
),
|
||||
),
|
||||
SizedBox(width: 16.w),
|
||||
Text(
|
||||
'售后无忧',
|
||||
style: TextStyle(
|
||||
fontSize: ScreenUtil().setSp(28),
|
||||
color: Color(0xff333333),
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
color: Color(0xffffffff),
|
||||
margin: EdgeInsets.only(top: 30.w),
|
||||
padding: EdgeInsets.symmetric(
|
||||
vertical: 20.w,
|
||||
horizontal: 60.w,
|
||||
),
|
||||
child: Column(
|
||||
children: [
|
||||
_rowDelivergoods(),
|
||||
SizedBox(height: 39.w),
|
||||
_rowService(),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,74 +0,0 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:flutter_icons/flutter_icons.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
|
||||
import 'package:akuCommunity/widget/goods_specs_sheet.dart';
|
||||
|
||||
class ProductSpecs extends StatefulWidget {
|
||||
ProductSpecs({Key key}) : super(key: key);
|
||||
|
||||
@override
|
||||
_ProductSpecsState createState() => _ProductSpecsState();
|
||||
}
|
||||
|
||||
class _ProductSpecsState extends State<ProductSpecs> {
|
||||
void _showModelBotoomSheet() {
|
||||
showModalBottomSheet(
|
||||
isScrollControlled: true,
|
||||
context: context,
|
||||
backgroundColor: Colors.white,
|
||||
builder: (context) {
|
||||
return GoodsSpecsSheet();
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return InkWell(
|
||||
onTap: _showModelBotoomSheet,
|
||||
child: Container(
|
||||
color: Color(0xffffffff),
|
||||
margin: EdgeInsets.only(top: 30.w),
|
||||
padding: EdgeInsets.only(
|
||||
left: 60.w,
|
||||
top: 20.w,
|
||||
bottom: 20.w,
|
||||
),
|
||||
child: Stack(
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
Text(
|
||||
'规格',
|
||||
style: TextStyle(
|
||||
fontSize: ScreenUtil().setSp(28),
|
||||
color: Color(0xff999999),
|
||||
),
|
||||
),
|
||||
SizedBox(width: 59.w),
|
||||
Text(
|
||||
'请选择规格',
|
||||
style: TextStyle(
|
||||
fontSize: ScreenUtil().setSp(28),
|
||||
color: Color(0xff333333),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
Positioned(
|
||||
right: 32.w,
|
||||
child: Icon(
|
||||
AntDesign.right,
|
||||
size: ScreenUtil().setSp(34),
|
||||
color: Color(0xff999999),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,79 +0,0 @@
|
||||
import 'dart:math';
|
||||
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
// import 'package:flutter_swiper/flutter_swiper.dart';
|
||||
|
||||
import 'package:akuCommunity/utils/fade_route.dart';
|
||||
import 'package:akuCommunity/widget/gallery_photo_view_wrapper.dart';
|
||||
|
||||
class ProductSwiper extends StatelessWidget {
|
||||
final List<String> imageUrl;
|
||||
ProductSwiper({Key key, this.imageUrl}) : super(key: key);
|
||||
|
||||
final Random _random = new Random();
|
||||
int next(int min, int max) => min + _random.nextInt(max - min);
|
||||
List imageModel() {
|
||||
List imgList = List();
|
||||
for (int x = 0; x < imageUrl.length; x++) {
|
||||
GalleryExampleItem item = GalleryExampleItem();
|
||||
item.id = '${next(x + 100, x + 1000)}';
|
||||
item.resource = imageUrl[x];
|
||||
imgList.add(item);
|
||||
}
|
||||
|
||||
return imgList;
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
height: 500.w,
|
||||
// child: Swiper(
|
||||
// itemBuilder: (BuildContext context, int index) {
|
||||
// return AspectRatio(
|
||||
// aspectRatio: 1,
|
||||
// child: GalleryExampleItemThumbnail(
|
||||
// galleryExampleItem: imageModel()[index],
|
||||
// onTap: () {
|
||||
// Navigator.of(context).push(new FadeRoute(
|
||||
// page: GalleryPhotoViewWrapper(
|
||||
// galleryItems: imageModel(),
|
||||
// backgroundDecoration: const BoxDecoration(
|
||||
// color: Colors.black,
|
||||
// ),
|
||||
// initialIndex: index,
|
||||
// ),
|
||||
// ));
|
||||
// },
|
||||
// ),
|
||||
// );
|
||||
// },
|
||||
// itemCount: 3,
|
||||
// scrollDirection: Axis.horizontal,
|
||||
// autoplay: true,
|
||||
// duration: 600,
|
||||
// onTap: (index) {
|
||||
// debugPrint("点击了第:$index个");
|
||||
// },
|
||||
// controller: SwiperController(),
|
||||
// pagination: SwiperPagination(
|
||||
// // 分页指示器
|
||||
// alignment: Alignment.bottomCenter, // 位置 Alignment.bottomCenter 底部中间
|
||||
// margin: const EdgeInsets.fromLTRB(0, 0, 0, 5), // 距离调整
|
||||
// builder: DotSwiperPaginationBuilder(
|
||||
// activeColor: Color(0xffFEC200),
|
||||
// color: Colors.white,
|
||||
// size: 15.w,
|
||||
// activeSize: 25.w,
|
||||
// space: 10.w,
|
||||
// ),
|
||||
// ),
|
||||
// autoplayDelay: 5000,
|
||||
// autoplayDisableOnInteraction: true,
|
||||
// ),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,252 +0,0 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:flutter_icons/flutter_icons.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import 'package:akuCommunity/routers/page_routers.dart';
|
||||
import 'package:akuCommunity/utils/headers.dart';
|
||||
import 'package:akuCommunity/widget/bee_scaffold.dart';
|
||||
import 'package:akuCommunity/widget/round_check_box.dart';
|
||||
import 'widget/invoice_input.dart';
|
||||
|
||||
class InvoicePage extends StatefulWidget {
|
||||
final Bundle bundle;
|
||||
InvoicePage({Key key, this.bundle}) : super(key: key);
|
||||
|
||||
@override
|
||||
_InvoicePageState createState() => _InvoicePageState();
|
||||
}
|
||||
|
||||
class _InvoicePageState extends State<InvoicePage> {
|
||||
var _scaffoldKey = new GlobalKey<ScaffoldState>();
|
||||
GlobalKey _formKey = new GlobalKey<FormState>();
|
||||
bool _checkDetail = false;
|
||||
bool isEnterprise = false;
|
||||
List _checkRise = [true, false];
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
}
|
||||
|
||||
void checkDetail() {
|
||||
setState(() {
|
||||
_checkDetail = !_checkDetail;
|
||||
});
|
||||
}
|
||||
|
||||
Container _containerInvoiceDetailCheck() {
|
||||
return Container(
|
||||
color: Colors.white,
|
||||
height: 96.w,
|
||||
padding: EdgeInsets.symmetric(
|
||||
vertical: 28.w,
|
||||
horizontal: 32.w,
|
||||
),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
InkWell(
|
||||
onTap: () {},
|
||||
child: Row(
|
||||
children: [
|
||||
Text(
|
||||
'发票内容',
|
||||
style: TextStyle(
|
||||
fontSize: 28.sp,
|
||||
color: Color(0xff333333),
|
||||
),
|
||||
),
|
||||
SizedBox(width: 6.w),
|
||||
Icon(
|
||||
AntDesign.exclamationcircleo,
|
||||
size: 20.sp,
|
||||
color: Color(0xff999999),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
RoundCheckBox(
|
||||
value: _checkDetail,
|
||||
onChanged: checkDetail,
|
||||
title: '明细',
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
InkWell _containerSubmit() {
|
||||
return InkWell(
|
||||
onTap: () {},
|
||||
child: Container(
|
||||
color: Color(0xffffc40c),
|
||||
height: 85.w,
|
||||
margin: EdgeInsets.symmetric(
|
||||
horizontal: 43.w,
|
||||
),
|
||||
padding: EdgeInsets.symmetric(
|
||||
vertical: 20.w,
|
||||
),
|
||||
alignment: Alignment.center,
|
||||
child: Text(
|
||||
'确认',
|
||||
style: TextStyle(
|
||||
fontSize: 32.sp,
|
||||
color: Color(0xff333333),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
List<Map<String, dynamic>> _listHeader = [
|
||||
{
|
||||
'title': '发票类型',
|
||||
'rightWidget': Container(
|
||||
child: InkWell(
|
||||
onTap: () {},
|
||||
child: Row(
|
||||
children: [
|
||||
Text(
|
||||
'增值税电子普票',
|
||||
style: TextStyle(
|
||||
fontSize: 28.sp,
|
||||
color: Color(0xff333333),
|
||||
),
|
||||
),
|
||||
SizedBox(width: 12.w),
|
||||
Icon(
|
||||
AntDesign.right,
|
||||
size: 20.sp,
|
||||
color: Color(0xff333333),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
)
|
||||
},
|
||||
{
|
||||
'title': '抬头类型',
|
||||
'rightWidget': Container(
|
||||
child: Row(
|
||||
children: [
|
||||
RoundCheckBox(
|
||||
value: _checkRise[0],
|
||||
onChanged: () {
|
||||
setState(() {
|
||||
if (!_checkRise[0]) {
|
||||
isEnterprise = false;
|
||||
_checkRise = [true, false];
|
||||
}
|
||||
return;
|
||||
});
|
||||
},
|
||||
title: '个人/事业单位',
|
||||
),
|
||||
SizedBox(width: 12.w),
|
||||
RoundCheckBox(
|
||||
value: _checkRise[1],
|
||||
onChanged: () {
|
||||
setState(() {
|
||||
if (!_checkRise[1]) {
|
||||
isEnterprise = true;
|
||||
_checkRise = [false, true];
|
||||
}
|
||||
return;
|
||||
});
|
||||
},
|
||||
title: '企业',
|
||||
),
|
||||
],
|
||||
),
|
||||
)
|
||||
},
|
||||
];
|
||||
|
||||
Container _containerHeader() {
|
||||
return Container(
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white,
|
||||
border: Border(
|
||||
top: BorderSide(
|
||||
width: 0.5, //宽度
|
||||
color: Color(0xffd8d8d8), //边框颜色
|
||||
),
|
||||
),
|
||||
),
|
||||
child: Column(
|
||||
children: _listHeader
|
||||
.map((item) => Container(
|
||||
padding: EdgeInsets.only(
|
||||
left: 77.w,
|
||||
right: 32.w,
|
||||
top: 28.w,
|
||||
// bottom: 28.w,
|
||||
),
|
||||
child: Column(
|
||||
children: [
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(
|
||||
item['title'],
|
||||
style: TextStyle(
|
||||
fontSize: 28.sp,
|
||||
color: Color(0xff333333),
|
||||
),
|
||||
),
|
||||
item['rightWidget']
|
||||
],
|
||||
),
|
||||
SizedBox(height: 28.w),
|
||||
Divider(height: 1),
|
||||
],
|
||||
),
|
||||
))
|
||||
.toList(),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
return BeeScaffold(
|
||||
key: _scaffoldKey,
|
||||
title: '开具发票',
|
||||
leading: IconButton(
|
||||
icon: Icon(AntDesign.left, size: 40.sp),
|
||||
onPressed: () {
|
||||
Get.back();
|
||||
},
|
||||
),
|
||||
body: SingleChildScrollView(
|
||||
child: Container(
|
||||
height: 1334.w,
|
||||
child: GestureDetector(
|
||||
behavior: HitTestBehavior.opaque,
|
||||
onTap: () {
|
||||
FocusScope.of(context).requestFocus(FocusNode());
|
||||
},
|
||||
child: Column(
|
||||
children: [
|
||||
_containerHeader(),
|
||||
Form(
|
||||
key: _formKey,
|
||||
child: Column(
|
||||
children: [InvoiceInput(isEnterprise: isEnterprise)],
|
||||
),
|
||||
),
|
||||
SizedBox(height: 66.w),
|
||||
_containerInvoiceDetailCheck(),
|
||||
SizedBox(height: 92.w),
|
||||
_containerSubmit(),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,101 +0,0 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:akuCommunity/utils/headers.dart';
|
||||
|
||||
class InvoiceInput extends StatefulWidget {
|
||||
final bool isEnterprise;
|
||||
InvoiceInput({Key key, this.isEnterprise}) : super(key: key);
|
||||
|
||||
@override
|
||||
_InvoiceInputState createState() => _InvoiceInputState();
|
||||
}
|
||||
|
||||
class _InvoiceInputState extends State<InvoiceInput> {
|
||||
TextEditingController _userName = new TextEditingController();
|
||||
TextEditingController _userPhone = new TextEditingController();
|
||||
TextEditingController _userAddress = new TextEditingController();
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
List<Map<String, dynamic>> _listTextField = [
|
||||
{'title': '发票抬头', 'hintText': '请输入', 'controller': _userName},
|
||||
{'title': '税号', 'hintText': '请输入', 'controller': _userPhone},
|
||||
{'title': '开户银行', 'hintText': '选填', 'controller': _userAddress},
|
||||
{'title': '银行账号', 'hintText': '选填', 'controller': _userAddress},
|
||||
{'title': '企业地址', 'hintText': '选填', 'controller': _userAddress},
|
||||
{'title': '企业电话', 'hintText': '选填', 'controller': _userAddress},
|
||||
];
|
||||
List<Widget> _listTextFieldView(List listInput) {
|
||||
return listInput
|
||||
.map((item) => Container(
|
||||
padding: EdgeInsets.only(
|
||||
left: 77.w,
|
||||
right: 32.w,
|
||||
top: 28.w,
|
||||
// bottom: 28.w,
|
||||
),
|
||||
child: Column(
|
||||
children: [
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(
|
||||
item['title'],
|
||||
style: TextStyle(
|
||||
fontSize: 28.sp,
|
||||
color: Color(0xff333333),
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: TextFormField(
|
||||
// inputFormatters: item['title'] == '税号'
|
||||
// ? [
|
||||
// LengthLimitingTextInputFormatter(11),
|
||||
// ]
|
||||
// : [],
|
||||
cursorColor: Color(0xffffc40c),
|
||||
style: TextStyle(fontSize: 28.sp),
|
||||
controller: item['controller'],
|
||||
onChanged: (String value) {},
|
||||
textAlign: TextAlign.end,
|
||||
decoration: InputDecoration(
|
||||
isDense: true,
|
||||
contentPadding: EdgeInsets.only(
|
||||
top: 0.w,
|
||||
bottom: 0.w,
|
||||
),
|
||||
hintText: item['hintText'],
|
||||
border: InputBorder.none, //去掉输入框的下滑线
|
||||
fillColor: Colors.white,
|
||||
filled: true,
|
||||
hintStyle: TextStyle(
|
||||
color: Color(0xff999999), fontSize: 24.sp),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 28.w),
|
||||
Divider(height: 1),
|
||||
],
|
||||
),
|
||||
))
|
||||
.toList();
|
||||
}
|
||||
|
||||
return Container(
|
||||
color: Colors.white,
|
||||
child: Column(
|
||||
children: widget.isEnterprise
|
||||
? _listTextFieldView(_listTextField)
|
||||
: _listTextFieldView([_listTextField.first]),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,41 +0,0 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:akuCommunity/pages/life_pay/life_pay_bill_page/life_pay_bill_page.dart';
|
||||
import 'package:akuCommunity/routers/page_routers.dart';
|
||||
import 'package:akuCommunity/utils/headers.dart';
|
||||
import 'package:akuCommunity/widget/bee_scaffold.dart';
|
||||
import 'package:get/get.dart';
|
||||
import '../widget/submit_bar.dart';
|
||||
import 'widget/details_card.dart';
|
||||
|
||||
class LifePayInfoPage extends StatefulWidget {
|
||||
final Bundle bundle;
|
||||
LifePayInfoPage({Key key, this.bundle}) : super(key: key);
|
||||
|
||||
@override
|
||||
_LifePayInfoPageState createState() => _LifePayInfoPageState();
|
||||
}
|
||||
|
||||
class _LifePayInfoPageState extends State<LifePayInfoPage> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return BeeScaffold(
|
||||
title: ' ${widget.bundle.getMap('detailMap')['title']}明细',
|
||||
body: Stack(
|
||||
children: [
|
||||
ListView(
|
||||
padding: EdgeInsets.only(bottom: 130.w),
|
||||
children: [
|
||||
DetailsCard(fun: () => Get.to(() => LifePayBillPage())),
|
||||
],
|
||||
),
|
||||
Positioned(
|
||||
bottom: 0,
|
||||
child: SubmitBar(title: '选好了'),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,124 +0,0 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:flutter_icons/flutter_icons.dart';
|
||||
|
||||
import 'package:akuCommunity/base/base_style.dart';
|
||||
import 'package:akuCommunity/utils/headers.dart';
|
||||
|
||||
class DetailsCard extends StatefulWidget {
|
||||
final Function fun;
|
||||
DetailsCard({Key key, this.fun}) : super(key: key);
|
||||
|
||||
@override
|
||||
_DetailsCardState createState() => _DetailsCardState();
|
||||
}
|
||||
|
||||
class _DetailsCardState extends State<DetailsCard> {
|
||||
Container _detailHeader() {
|
||||
return Container(
|
||||
margin: EdgeInsets.only(
|
||||
top: 20.w,
|
||||
bottom: 18.w,
|
||||
),
|
||||
child: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(
|
||||
'公共能耗费',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w600,
|
||||
fontSize: BaseStyle.fontSize30,
|
||||
color: ktextPrimary,
|
||||
),
|
||||
),
|
||||
Text(
|
||||
'宁波华茂悦峰 1幢-1单元-702室',
|
||||
style: TextStyle(
|
||||
fontSize: BaseStyle.fontSize30,
|
||||
color: ktextPrimary,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
InkWell _detailContent(Function fun) {
|
||||
return InkWell(
|
||||
onTap: fun,
|
||||
child: Container(
|
||||
margin: EdgeInsets.only(top: 32.w),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
Icon(
|
||||
Icons.radio_button_unchecked,
|
||||
color: BaseStyle.color999999,
|
||||
size: 40.w,
|
||||
),
|
||||
SizedBox(width: 24.w),
|
||||
Text(
|
||||
'2019上半年',
|
||||
style: TextStyle(
|
||||
fontSize: BaseStyle.fontSize28,
|
||||
color: ktextPrimary,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
Text(
|
||||
'¥${50.90}',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w600,
|
||||
fontSize: BaseStyle.fontSize28,
|
||||
color: Color(0xfffc361d),
|
||||
),
|
||||
),
|
||||
SizedBox(width: 28.w),
|
||||
Icon(
|
||||
AntDesign.right,
|
||||
color: BaseStyle.color999999,
|
||||
size: 30.w,
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
margin: EdgeInsets.only(
|
||||
top: 32.w,
|
||||
left: 32.w,
|
||||
right: 32.w,
|
||||
),
|
||||
padding: EdgeInsets.only(
|
||||
left: 32.w,
|
||||
right: 32.w,
|
||||
bottom: 32.w,
|
||||
),
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white,
|
||||
borderRadius: BorderRadius.all(Radius.circular(6)),
|
||||
),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
_detailHeader(),
|
||||
_detailContent(widget.fun),
|
||||
_detailContent(widget.fun),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,438 +0,0 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:flutter_slidable/flutter_slidable.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
import 'package:akuCommunity/model/aku_shop_model.dart';
|
||||
import 'package:akuCommunity/provider/cart.dart';
|
||||
import 'package:akuCommunity/utils/headers.dart';
|
||||
import 'package:akuCommunity/widget/cached_image_wrapper.dart';
|
||||
import 'package:akuCommunity/widget/cart_count.dart';
|
||||
import 'widget/market_cart_app_bar.dart';
|
||||
|
||||
class MarketCartPage extends StatefulWidget {
|
||||
final AkuShopModel cartItem;
|
||||
|
||||
MarketCartPage({Key key, this.cartItem}) : super(key: key);
|
||||
|
||||
@override
|
||||
_MarketCartPageState createState() => _MarketCartPageState();
|
||||
}
|
||||
|
||||
class _MarketCartPageState extends State<MarketCartPage> {
|
||||
Widget _cardRadio(
|
||||
BuildContext context, AkuShopModel cartItem, CartProvidde model, index) {
|
||||
return InkWell(
|
||||
onTap: () {
|
||||
setState(() {
|
||||
cartItem.isCheck = !cartItem.isCheck;
|
||||
int _goods = shopList.indexWhere(
|
||||
(element) => element.itemid == _cartList[index].itemid);
|
||||
_goods > -1
|
||||
? shopList.removeAt(_goods)
|
||||
: shopList.add(_cartList[index]);
|
||||
print(shopList);
|
||||
});
|
||||
},
|
||||
child: Container(
|
||||
alignment: Alignment.center,
|
||||
child: Icon(
|
||||
Icons.check_circle,
|
||||
color: cartItem.isCheck ? Color(0xffdb0000) : Color(0xff999999),
|
||||
size: 36.w,
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _image(String imagePath) {
|
||||
return Container(
|
||||
margin: EdgeInsets.symmetric(horizontal: 20.w),
|
||||
child: ClipRRect(
|
||||
borderRadius: BorderRadius.all(Radius.circular(2)),
|
||||
child: CachedImageWrapper(
|
||||
url: imagePath,
|
||||
width: 180.w,
|
||||
height: 180.w,
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _content(String content, specs, price) {
|
||||
return Container(
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Container(
|
||||
width: 394.w,
|
||||
child: Text(
|
||||
content,
|
||||
maxLines: 2,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
style: TextStyle(
|
||||
fontSize: 24.sp,
|
||||
color: Color(0xff333333),
|
||||
),
|
||||
),
|
||||
),
|
||||
Container(
|
||||
margin: EdgeInsets.only(top: 40.w),
|
||||
child: Text(
|
||||
'¥$price',
|
||||
style: TextStyle(
|
||||
fontSize: 28.sp,
|
||||
color: Color(0xffe60e0e),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
// List<Map<String, dynamic>> _listGoods = [
|
||||
// {
|
||||
// 'imagePath':
|
||||
// 'http://img.alicdn.com/imgextra/i3/2113905378/O1CN01aH72RP1pbAf1n1amP_!!2113905378.jpg',
|
||||
// 'content': '2020很仙的开衫女春秋装韩版宽松加厚百搭外搭毛衣外套针织衫',
|
||||
// 'specs': '165/M',
|
||||
// 'price': 69.9,
|
||||
// 'goodsNum': 1,
|
||||
// 'isCheck': false
|
||||
// },
|
||||
// {
|
||||
// 'imagePath':
|
||||
// 'http://img.alicdn.com/imgextra/i3/2261315282/O1CN01FLPB6E1otCdaEw4OC_!!2261315282.jpg',
|
||||
// 'content': '微商爆款女士MCKZ阳离子秋冬柔软舒适打底衫高领针织螺纹棉上衣',
|
||||
// 'specs': '165/M',
|
||||
// 'price': 129.9,
|
||||
// 'goodsNum': 1,
|
||||
// 'isCheck': false
|
||||
// },
|
||||
// ];
|
||||
|
||||
// bool isAll = false;
|
||||
// double _currentPrice = 0;
|
||||
// int _currentGoodsNum = 0;
|
||||
|
||||
// void funAll() {
|
||||
// setState(() {
|
||||
// isAll = !isAll;
|
||||
// if (isAll) {
|
||||
// _currentPrice = 0;
|
||||
// _currentGoodsNum = 0;
|
||||
// }
|
||||
// _listGoods.forEach((item) {
|
||||
// item["isCheck"] = isAll;
|
||||
// if (item["isCheck"]) {
|
||||
// _currentPrice += item["price"] * item["goodsNum"];
|
||||
// _currentGoodsNum++;
|
||||
// } else {
|
||||
// _currentPrice -= item["price"] * item["goodsNum"];
|
||||
// _currentGoodsNum--;
|
||||
// }
|
||||
// });
|
||||
// });
|
||||
// }
|
||||
|
||||
// void funIsSelect(int index) {
|
||||
// setState(() {
|
||||
// _listGoods[index]["isCheck"] = !_listGoods[index]["isCheck"];
|
||||
// if (_listGoods[index]["isCheck"]) {
|
||||
// _currentPrice +=
|
||||
// _listGoods[index]["price"] * _listGoods[index]["goodsNum"];
|
||||
// _currentGoodsNum++;
|
||||
// } else {
|
||||
// _currentPrice -=
|
||||
// _listGoods[index]["price"] * _listGoods[index]["goodsNum"];
|
||||
// _currentGoodsNum--;
|
||||
// }
|
||||
// if (_listGoods.every((item) => item["isCheck"])) {
|
||||
// isAll = true;
|
||||
// } else {
|
||||
// isAll = false;
|
||||
// }
|
||||
// });
|
||||
// }
|
||||
|
||||
// void reduce(int index) {
|
||||
// setState(() {
|
||||
// _listGoods[index]["goodsNum"]--;
|
||||
// if (_currentPrice != 0) {
|
||||
// _currentPrice = 0;
|
||||
// _listGoods.forEach((item) {
|
||||
// if (item["isCheck"]) {
|
||||
// _currentPrice += item["price"] * item["goodsNum"];
|
||||
// }
|
||||
// });
|
||||
// }
|
||||
// });
|
||||
// }
|
||||
|
||||
// void add(int index) {
|
||||
// setState(() {
|
||||
// _listGoods[index]["goodsNum"]++;
|
||||
// if (_currentPrice != 0) {
|
||||
// _currentPrice = 0;
|
||||
// _listGoods.forEach((item) {
|
||||
// if (item["isCheck"]) {
|
||||
// _currentPrice += item["price"] * item["goodsNum"];
|
||||
// }
|
||||
// });
|
||||
// }
|
||||
// });
|
||||
// }
|
||||
|
||||
// void funSubimt() {
|
||||
// // setState(() {
|
||||
// // isAll = !isAll;
|
||||
// // });
|
||||
// }
|
||||
List<AkuShopModel> shopList = [];
|
||||
bool get _selectALl {
|
||||
for (var element in _cartList) {
|
||||
int _selectGoods =
|
||||
shopList.indexWhere((index) => element.itemid == index.itemid);
|
||||
if (_selectGoods == -1) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
double get _allprice {
|
||||
double _price = 0;
|
||||
for (var element in shopList) {
|
||||
_price += double.parse(element.itemprice) * element.count;
|
||||
}
|
||||
return _price;
|
||||
}
|
||||
|
||||
int get _goodsCount => shopList.length;
|
||||
|
||||
List<AkuShopModel> _cartList;
|
||||
|
||||
Widget _selectAll(
|
||||
CartProvidde model,
|
||||
) {
|
||||
return InkWell(
|
||||
onTap: () {
|
||||
for (var element in _cartList) {
|
||||
element.isCheck = !_selectALl;
|
||||
}
|
||||
model.changeALlCheckState(true);
|
||||
setState(() {
|
||||
if (_selectALl == true)
|
||||
shopList.clear();
|
||||
else {
|
||||
shopList.clear();
|
||||
shopList.addAll(_cartList);
|
||||
}
|
||||
});
|
||||
},
|
||||
child: Container(
|
||||
margin: EdgeInsets.symmetric(vertical: 29.w),
|
||||
child: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
Icon(
|
||||
_selectALl
|
||||
? Icons.radio_button_checked
|
||||
: Icons.radio_button_unchecked,
|
||||
color: model.isAllCheck ? Color(0xffdb0000) : Color(0xff999999),
|
||||
size: 40.w,
|
||||
),
|
||||
Container(
|
||||
margin: EdgeInsets.only(left: 18.w),
|
||||
child: Text(
|
||||
'全选',
|
||||
style: TextStyle(
|
||||
fontSize: 28.sp,
|
||||
color: Color(0xff333333),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _settlement(CartProvidde model, BuildContext context) {
|
||||
return Row(
|
||||
children: [
|
||||
model.allPrice != null
|
||||
? Container(
|
||||
margin: EdgeInsets.only(right: 10.w),
|
||||
child: Text(
|
||||
'合计:¥${_allprice.toStringAsFixed(2)}',
|
||||
style: TextStyle(
|
||||
fontSize: 28.sp,
|
||||
color: Color(0xffe60e0e),
|
||||
),
|
||||
),
|
||||
)
|
||||
: SizedBox(),
|
||||
InkWell(
|
||||
onTap: model.allGoodsCount != 0 ? () {} : null,
|
||||
child: Container(
|
||||
alignment: Alignment.center,
|
||||
decoration: BoxDecoration(
|
||||
color: model.allGoodsCount != 0
|
||||
? Color(0xffffc40c)
|
||||
: Color(0xffd8d8d8),
|
||||
borderRadius: BorderRadius.all(Radius.circular(30)),
|
||||
),
|
||||
width: 198.w,
|
||||
margin: EdgeInsets.symmetric(vertical: 16.w),
|
||||
padding: EdgeInsets.symmetric(vertical: 12.w),
|
||||
child: Text(
|
||||
'结算($_goodsCount)',
|
||||
style: TextStyle(
|
||||
fontSize: 30.sp,
|
||||
color:
|
||||
model.allGoodsCount != 0 ? Color(0xff333333) : Colors.white,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
Widget _marketCartCard(AkuShopModel cartItem, index) {
|
||||
return Consumer<CartProvidde>(builder: (context, model, child) {
|
||||
return Container(
|
||||
margin: EdgeInsets.only(
|
||||
top: 20.w,
|
||||
left: 32.w,
|
||||
right: 32.w,
|
||||
),
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.all(Radius.circular(6)),
|
||||
),
|
||||
child: Slidable.builder(
|
||||
actionPane: SlidableBehindActionPane(),
|
||||
actionExtentRatio: 0.25,
|
||||
secondaryActionDelegate: SlideActionBuilderDelegate(
|
||||
actionCount: 2,
|
||||
builder: (context, index, animation, renderingMode) {
|
||||
if (index == 0) {
|
||||
return SlideAction(
|
||||
child: Text(
|
||||
'移至收藏夹',
|
||||
style: TextStyle(fontSize: 28.sp, color: Colors.white),
|
||||
),
|
||||
color: renderingMode == SlidableRenderingMode.slide
|
||||
? Color(0xffffc40c).withOpacity(animation.value)
|
||||
: Color(0xffffc40c),
|
||||
// onTap: () => _showSnackBar(context, 'More'),
|
||||
closeOnTap: false,
|
||||
);
|
||||
} else {
|
||||
return SlideAction(
|
||||
onTap: () {
|
||||
model.deleteGoods(cartItem.itemid);
|
||||
},
|
||||
decoration: BoxDecoration(
|
||||
color: renderingMode == SlidableRenderingMode.slide
|
||||
? Color(0xffe60e0e).withOpacity(animation.value)
|
||||
: Color(0xffe60e0e),
|
||||
borderRadius: BorderRadius.only(
|
||||
topRight: Radius.circular(6),
|
||||
bottomRight: Radius.circular(6),
|
||||
),
|
||||
),
|
||||
child: Text(
|
||||
'删除',
|
||||
style: TextStyle(fontSize: 28.sp, color: Colors.white),
|
||||
),
|
||||
// onTap: () => _showSnackBar(context, 'Delete'),
|
||||
);
|
||||
}
|
||||
},
|
||||
),
|
||||
child: Container(
|
||||
color: Colors.white,
|
||||
padding: EdgeInsets.only(
|
||||
top: 30.w,
|
||||
left: 15.w,
|
||||
bottom: 37.w,
|
||||
),
|
||||
child: Stack(
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
_cardRadio(context, cartItem, model, index),
|
||||
_image(cartItem.itempic),
|
||||
_content(cartItem.itemtitle, '默认', cartItem.itemprice),
|
||||
],
|
||||
),
|
||||
Positioned(
|
||||
bottom: 0,
|
||||
right: 16.w,
|
||||
child: CartCount(
|
||||
cartItem: cartItem,
|
||||
// goodsNum: widget.goodsNum,
|
||||
// index: widget.index,
|
||||
// reduce: widget.reduce,
|
||||
// add: widget.add,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: PreferredSize(
|
||||
preferredSize: Size.fromHeight(kToolbarHeight),
|
||||
child: MarketCartAppBar(),
|
||||
),
|
||||
bottomNavigationBar:
|
||||
Consumer<CartProvidde>(builder: (context, model, child) {
|
||||
return Container(
|
||||
color: Colors.white,
|
||||
height: 98.w,
|
||||
width: MediaQuery.of(context).size.width,
|
||||
padding: EdgeInsets.symmetric(horizontal: 32.w),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
_selectAll(model),
|
||||
_settlement(
|
||||
model,
|
||||
context,
|
||||
)
|
||||
],
|
||||
),
|
||||
);
|
||||
}),
|
||||
body: Stack(
|
||||
children: [
|
||||
Consumer<CartProvidde>(
|
||||
builder: (context, model, child) {
|
||||
List<AkuShopModel> cartList = model.cartList;
|
||||
_cartList = model.cartList;
|
||||
return ListView.builder(
|
||||
itemCount: cartList.length,
|
||||
itemBuilder: (BuildContext context, int index) {
|
||||
return _marketCartCard(cartList[index], index);
|
||||
});
|
||||
},
|
||||
),
|
||||
// Positioned(
|
||||
// bottom: 0,
|
||||
// child: MarketCartBottomBar(
|
||||
// selectAll: _selectALl,
|
||||
// ),
|
||||
// ),
|
||||
],
|
||||
));
|
||||
}
|
||||
}
|
@ -1,48 +0,0 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:flutter_icons/flutter_icons.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import 'package:akuCommunity/utils/headers.dart';
|
||||
|
||||
class MarketCartAppBar extends StatelessWidget {
|
||||
const MarketCartAppBar({Key key}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
child: AppBar(
|
||||
elevation: 0,
|
||||
backgroundColor: Colors.white,
|
||||
leading: IconButton(
|
||||
padding: EdgeInsets.all(0),
|
||||
icon: Icon(AntDesign.left, size: 40.sp),
|
||||
onPressed: () {
|
||||
Get.back();
|
||||
},
|
||||
),
|
||||
centerTitle: false,
|
||||
title: RichText(
|
||||
text: TextSpan(
|
||||
style: TextStyle(
|
||||
color: Color(0xff333333),
|
||||
),
|
||||
children: <InlineSpan>[
|
||||
TextSpan(
|
||||
text: '购物车 ',
|
||||
style: TextStyle(
|
||||
fontSize: 38.sp,
|
||||
),
|
||||
),
|
||||
TextSpan(
|
||||
text: '业主尊享,购物更省心',
|
||||
style: TextStyle(fontSize: 24.sp),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,108 +0,0 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
import 'package:akuCommunity/provider/cart.dart';
|
||||
import 'package:akuCommunity/utils/headers.dart';
|
||||
|
||||
class MarketCartBottomBar extends StatelessWidget {
|
||||
const MarketCartBottomBar({Key key}) : super(key: key);
|
||||
|
||||
Widget _selectAll(CartProvidde model) {
|
||||
return InkWell(
|
||||
onTap: () {
|
||||
model.changeALlCheckState(!model.isAllCheck);
|
||||
},
|
||||
child: Container(
|
||||
margin: EdgeInsets.symmetric(vertical: 29.w),
|
||||
child: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
Icon(
|
||||
model.isAllCheck
|
||||
? Icons.radio_button_checked
|
||||
: Icons.radio_button_unchecked,
|
||||
color: model.isAllCheck ? Color(0xffdb0000) : Color(0xff999999),
|
||||
size: 40.w,
|
||||
),
|
||||
Container(
|
||||
margin: EdgeInsets.only(left: 18.w),
|
||||
child: Text(
|
||||
'全选',
|
||||
style: TextStyle(
|
||||
fontSize: 28.sp,
|
||||
color: Color(0xff333333),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _settlement(CartProvidde model, BuildContext context) {
|
||||
return Row(
|
||||
children: [
|
||||
model.allPrice != 0
|
||||
? Container(
|
||||
margin: EdgeInsets.only(right: 10.w),
|
||||
child: Text(
|
||||
'合计:¥${model.allPrice.toStringAsFixed(2)}',
|
||||
style: TextStyle(
|
||||
fontSize: 28.sp,
|
||||
color: Color(0xffe60e0e),
|
||||
),
|
||||
),
|
||||
)
|
||||
: SizedBox(),
|
||||
InkWell(
|
||||
onTap: model.allGoodsCount != 0 ? () {} : null,
|
||||
child: Container(
|
||||
alignment: Alignment.center,
|
||||
decoration: BoxDecoration(
|
||||
color: model.allGoodsCount != 0
|
||||
? Color(0xffffc40c)
|
||||
: Color(0xffd8d8d8),
|
||||
borderRadius: BorderRadius.all(Radius.circular(30)),
|
||||
),
|
||||
width: 198.w,
|
||||
margin: EdgeInsets.symmetric(vertical: 16.w),
|
||||
padding: EdgeInsets.symmetric(vertical: 12.w),
|
||||
child: Text(
|
||||
'结算(${model.allGoodsCount})',
|
||||
style: TextStyle(
|
||||
fontSize: 30.sp,
|
||||
color:
|
||||
model.allGoodsCount != 0 ? Color(0xff333333) : Colors.white,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Consumer<CartProvidde>(builder: (context, model, child) {
|
||||
return Container(
|
||||
color: Colors.white,
|
||||
height: 98.w,
|
||||
width: MediaQuery.of(context).size.width,
|
||||
padding: EdgeInsets.symmetric(horizontal: 32.w),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
_selectAll(model),
|
||||
_settlement(
|
||||
model,
|
||||
context,
|
||||
)
|
||||
],
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
@ -1,207 +0,0 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:flutter_slidable/flutter_slidable.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
import 'package:akuCommunity/model/aku_shop_model.dart';
|
||||
import 'package:akuCommunity/provider/cart.dart';
|
||||
import 'package:akuCommunity/utils/headers.dart';
|
||||
import 'package:akuCommunity/widget/cached_image_wrapper.dart';
|
||||
import 'package:akuCommunity/widget/cart_count.dart';
|
||||
|
||||
class MarketCartCard extends StatelessWidget {
|
||||
final AkuShopModel cartItem;
|
||||
MarketCartCard({Key key, this.cartItem}) : super(key: key);
|
||||
|
||||
Widget _cardRadio(
|
||||
BuildContext context, AkuShopModel cartItem, CartProvidde model) {
|
||||
return InkWell(
|
||||
onTap: () {
|
||||
cartItem.isCheck = !cartItem.isCheck;
|
||||
model.changeCheckState(cartItem);
|
||||
},
|
||||
child: Container(
|
||||
alignment: Alignment.center,
|
||||
child: Icon(
|
||||
Icons.check_circle,
|
||||
color: cartItem.isCheck ? Color(0xffdb0000) : Color(0xff999999),
|
||||
size: 36.w,
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _image(String imagePath) {
|
||||
return Container(
|
||||
margin: EdgeInsets.symmetric(horizontal: 20.w),
|
||||
child: ClipRRect(
|
||||
borderRadius: BorderRadius.all(Radius.circular(2)),
|
||||
child: CachedImageWrapper(
|
||||
url: imagePath,
|
||||
width: 180.w,
|
||||
height: 180.w,
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _content(String content, specs, price) {
|
||||
return Container(
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Container(
|
||||
width: 394.w,
|
||||
child: Text(
|
||||
content,
|
||||
maxLines: 2,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
style: TextStyle(
|
||||
fontSize: 24.sp,
|
||||
color: Color(0xff333333),
|
||||
),
|
||||
),
|
||||
),
|
||||
// InkWell(
|
||||
// onTap: _showGoodsSpecsSheet,
|
||||
// child: Container(
|
||||
// margin: EdgeInsets.only(top: 10.w),
|
||||
// padding: EdgeInsets.symmetric(
|
||||
// vertical: 5.w,
|
||||
// horizontal: 19.w,
|
||||
// ),
|
||||
// alignment: Alignment.center,
|
||||
// decoration: BoxDecoration(
|
||||
// color: Color(0xfff5f5f5),
|
||||
// border: Border.all(color: Color(0xffd3d3d3), width: 0.5),
|
||||
// borderRadius: BorderRadius.all(Radius.circular(15)),
|
||||
// ),
|
||||
// child: Row(
|
||||
// mainAxisAlignment: MainAxisAlignment.center,
|
||||
// crossAxisAlignment: CrossAxisAlignment.center,
|
||||
// children: [
|
||||
// Text(
|
||||
// specs,
|
||||
// style: TextStyle(
|
||||
// fontSize: 18.sp,
|
||||
// color: Color(0xff333333),
|
||||
// ),
|
||||
// ),
|
||||
// Container(
|
||||
// alignment: Alignment.center,
|
||||
// margin: EdgeInsets.only(left: 16.w),
|
||||
// child: Icon(
|
||||
// AntDesign.down,
|
||||
// color: Color(0xff333333),
|
||||
// size: 22.sp,
|
||||
// ),
|
||||
// ),
|
||||
// ],
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
Container(
|
||||
margin: EdgeInsets.only(top: 40.w),
|
||||
child: Text(
|
||||
'¥$price',
|
||||
style: TextStyle(
|
||||
fontSize: 28.sp,
|
||||
color: Color(0xffe60e0e),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Consumer<CartProvidde>(builder: (context, model, child) {
|
||||
return Container(
|
||||
margin: EdgeInsets.only(
|
||||
top: 20.w,
|
||||
left: 32.w,
|
||||
right: 32.w,
|
||||
),
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.all(Radius.circular(6)),
|
||||
),
|
||||
child: Slidable.builder(
|
||||
actionPane: SlidableBehindActionPane(),
|
||||
actionExtentRatio: 0.25,
|
||||
secondaryActionDelegate: SlideActionBuilderDelegate(
|
||||
actionCount: 2,
|
||||
builder: (context, index, animation, renderingMode) {
|
||||
if (index == 0) {
|
||||
return SlideAction(
|
||||
child: Text(
|
||||
'移至收藏夹',
|
||||
style: TextStyle(fontSize: 28.sp, color: Colors.white),
|
||||
),
|
||||
color: renderingMode == SlidableRenderingMode.slide
|
||||
? Color(0xffffc40c).withOpacity(animation.value)
|
||||
: Color(0xffffc40c),
|
||||
// onTap: () => _showSnackBar(context, 'More'),
|
||||
closeOnTap: false,
|
||||
);
|
||||
} else {
|
||||
return SlideAction(
|
||||
onTap: () {
|
||||
model.deleteGoods(cartItem.itemid);
|
||||
},
|
||||
decoration: BoxDecoration(
|
||||
color: renderingMode == SlidableRenderingMode.slide
|
||||
? Color(0xffe60e0e).withOpacity(animation.value)
|
||||
: Color(0xffe60e0e),
|
||||
borderRadius: BorderRadius.only(
|
||||
topRight: Radius.circular(6),
|
||||
bottomRight: Radius.circular(6),
|
||||
),
|
||||
),
|
||||
child: Text(
|
||||
'删除',
|
||||
style: TextStyle(fontSize: 28.sp, color: Colors.white),
|
||||
),
|
||||
// onTap: () => _showSnackBar(context, 'Delete'),
|
||||
);
|
||||
}
|
||||
},
|
||||
),
|
||||
child: Container(
|
||||
color: Colors.white,
|
||||
padding: EdgeInsets.only(
|
||||
top: 30.w,
|
||||
left: 15.w,
|
||||
bottom: 37.w,
|
||||
),
|
||||
child: Stack(
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
_cardRadio(context, cartItem, model),
|
||||
_image(cartItem.itempic),
|
||||
_content(cartItem.itemtitle, '默认', cartItem.itemprice),
|
||||
],
|
||||
),
|
||||
Positioned(
|
||||
bottom: 0,
|
||||
right: 16.w,
|
||||
child: CartCount(
|
||||
cartItem: cartItem,
|
||||
// goodsNum: widget.goodsNum,
|
||||
// index: widget.index,
|
||||
// reduce: widget.reduce,
|
||||
// add: widget.add,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
@ -1,68 +0,0 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/rendering.dart';
|
||||
|
||||
import 'package:akuCommunity/routers/page_routers.dart';
|
||||
import '../widget/market_list.dart';
|
||||
import 'widget/market_details_app_bar.dart';
|
||||
|
||||
class MarketDetailPage extends StatefulWidget {
|
||||
final Bundle bundle;
|
||||
MarketDetailPage({Key key, this.bundle}) : super(key: key);
|
||||
|
||||
@override
|
||||
_MarketDetailPageState createState() => _MarketDetailPageState();
|
||||
}
|
||||
|
||||
class _MarketDetailPageState extends State<MarketDetailPage>
|
||||
with AutomaticKeepAliveClientMixin, SingleTickerProviderStateMixin {
|
||||
@override
|
||||
bool get wantKeepAlive => true;
|
||||
TabController _controller;
|
||||
|
||||
//导航标签
|
||||
List<Map<String, dynamic>> treeList = [
|
||||
{'name': '新品推荐', 'imagePath': 'assets/tab/nanz.png'},
|
||||
{'name': '爆款集合', 'imagePath': 'assets/tab/bkjh.png'},
|
||||
{'name': '口碑好物', 'imagePath': 'assets/tab/kbhw.png'},
|
||||
{'name': '男装', 'imagePath': 'assets/tab/nanz.png'},
|
||||
{'name': '女装', 'imagePath': 'assets/tab/nvz.png'}
|
||||
];
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_controller = TabController(length: treeList.length, vsync: this);
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_controller.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
super.build(context);
|
||||
return Scaffold(
|
||||
appBar: PreferredSize(
|
||||
preferredSize: Size.fromHeight(kToolbarHeight), //319
|
||||
child: MarketDetailsAppBar(title: widget.bundle.getString('title')),
|
||||
),
|
||||
body: MarketList(
|
||||
isGroup: false,
|
||||
title: widget.bundle.getString('title'),
|
||||
),
|
||||
|
||||
// TabBarView(
|
||||
// controller: _controller,
|
||||
// children: List.generate(
|
||||
// treeList.length,
|
||||
// (index) => MarketListPage(
|
||||
// isGroup: false,
|
||||
// title: widget.bundle.getString('title'),
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,208 +0,0 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:flutter_icons/flutter_icons.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import 'package:akuCommunity/utils/headers.dart';
|
||||
|
||||
class MarketDetailsAppBar extends StatefulWidget {
|
||||
final String title;
|
||||
MarketDetailsAppBar({Key key, this.title}) : super(key: key);
|
||||
|
||||
@override
|
||||
_MarketDetailsAppBarState createState() => _MarketDetailsAppBarState();
|
||||
}
|
||||
|
||||
class _MarketDetailsAppBarState extends State<MarketDetailsAppBar> {
|
||||
List<Map<String, dynamic>> _classList = [
|
||||
{'title': '居家生活'},
|
||||
{'title': '数码家电'},
|
||||
{'title': '休闲副食'},
|
||||
{'title': '滋补保健'},
|
||||
{'title': '彩妆香水'},
|
||||
{'title': '服饰箱包'},
|
||||
{'title': '母婴玩具'},
|
||||
{'title': '饮料酒水'},
|
||||
];
|
||||
|
||||
/// 弹出顶部框
|
||||
void _showModelTopSheet() {
|
||||
showGeneralDialog(
|
||||
context: context,
|
||||
barrierLabel: "",
|
||||
barrierColor: Colors.black.withOpacity(0.5),
|
||||
transitionDuration: const Duration(milliseconds: 250),
|
||||
barrierDismissible: true,
|
||||
pageBuilder: (BuildContext context, Animation animation,
|
||||
Animation secondaryAnimation) {
|
||||
return Stack(
|
||||
children: <Widget>[
|
||||
Container(
|
||||
alignment:
|
||||
Alignment.lerp(Alignment.topCenter, Alignment.center, 0.25),
|
||||
margin: EdgeInsets.symmetric(horizontal: 32.w),
|
||||
child: Material(
|
||||
color: Color(0xffffffff),
|
||||
child: Container(
|
||||
alignment: Alignment.topCenter,
|
||||
height: 282.w,
|
||||
width: 686.w,
|
||||
color: Colors.black.withOpacity(animation.value),
|
||||
child: GridView.builder(
|
||||
padding: EdgeInsets.only(
|
||||
top: 36.w,
|
||||
left: 25.w,
|
||||
right: 25.w,
|
||||
bottom: 30.w,
|
||||
),
|
||||
shrinkWrap: true,
|
||||
physics: NeverScrollableScrollPhysics(),
|
||||
itemCount: _classList.length,
|
||||
itemBuilder: (BuildContext context, int index) {
|
||||
return InkWell(
|
||||
onTap: () {
|
||||
Get.back();
|
||||
},
|
||||
child: Container(
|
||||
decoration: BoxDecoration(
|
||||
color: Color(0xfffbfbfb),
|
||||
border: Border.all(
|
||||
color: _classList[index]['title'] == widget.title
|
||||
? Color(0xffe60e0e)
|
||||
: Color(0xff979797),
|
||||
width: 1.w,
|
||||
),
|
||||
),
|
||||
child: Center(
|
||||
child: Text(
|
||||
_classList[index]['title'],
|
||||
style: TextStyle(
|
||||
color:
|
||||
_classList[index]['title'] == widget.title
|
||||
? Color(0xffe60e0e)
|
||||
: Color(0xff333333),
|
||||
fontSize: 24.sp),
|
||||
)),
|
||||
),
|
||||
);
|
||||
},
|
||||
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
|
||||
crossAxisCount: 3,
|
||||
mainAxisSpacing: 20.w,
|
||||
crossAxisSpacing: 30.w,
|
||||
childAspectRatio: 192.w / 58.w),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
Positioned(
|
||||
top: 78,
|
||||
left: MediaQuery.of(context).size.width / 2.05,
|
||||
child: Material(
|
||||
color: Colors.transparent,
|
||||
child: Container(
|
||||
child: Icon(
|
||||
AntDesign.caretup,
|
||||
color: Color(0xffffffff),
|
||||
size: 36.sp,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
},
|
||||
transitionBuilder: (_, anim, __, child) {
|
||||
return ScaleTransition(
|
||||
alignment: Alignment.lerp(
|
||||
Alignment.topCenter, Alignment.center, 0.145), // 添加这个
|
||||
scale: anim,
|
||||
child: child,
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
child: AppBar(
|
||||
elevation: 0,
|
||||
backgroundColor: Color(0xffffffff),
|
||||
leading: IconButton(
|
||||
padding: EdgeInsets.all(0),
|
||||
icon: Icon(AntDesign.left, size: 37.sp),
|
||||
onPressed: () {
|
||||
Get.back();
|
||||
}),
|
||||
title: InkWell(
|
||||
onTap: _showModelTopSheet,
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
Text(
|
||||
widget.title,
|
||||
style: TextStyle(fontSize: 32.sp, color: Color(0xff333333)),
|
||||
),
|
||||
SizedBox(width: 10.w),
|
||||
Container(
|
||||
padding: EdgeInsets.only(top: 1),
|
||||
child: Icon(
|
||||
AntDesign.caretdown,
|
||||
size: 18.sp,
|
||||
color: Color(0xff000000),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
centerTitle: true,
|
||||
actions: <Widget>[
|
||||
IconButton(
|
||||
icon: Icon(
|
||||
AntDesign.search1,
|
||||
size: 38.sp,
|
||||
color: Color(0xff666666),
|
||||
),
|
||||
onPressed: () {},
|
||||
)
|
||||
],
|
||||
// bottom: TabBar(
|
||||
// controller: _controller,
|
||||
// labelPadding: EdgeInsets.symmetric(horizontal: 15.w),
|
||||
// indicator: BoxDecoration(),
|
||||
// isScrollable: true,
|
||||
// unselectedLabelStyle: TextStyle(
|
||||
// fontSize: ScreenUtil().setSp(24),
|
||||
// ),
|
||||
// labelStyle: TextStyle(
|
||||
// fontWeight: FontWeight.w600,
|
||||
// fontSize: ScreenUtil().setSp(24),
|
||||
// ),
|
||||
// unselectedLabelColor: Color(0xff333333),
|
||||
// labelColor: Color(0xffe60e0e),
|
||||
// tabs: List.generate(
|
||||
// treeList.length,
|
||||
// (index) => Container(
|
||||
// padding: EdgeInsets.symmetric(vertical:32.w),
|
||||
// child: Column(
|
||||
// children: <Widget>[
|
||||
// Image.asset(
|
||||
// treeList[index]['imagePath'],
|
||||
// height: 110.w,
|
||||
// width: 110.w,
|
||||
// fit: BoxFit.fill,
|
||||
// ),
|
||||
// SizedBox(height: 14.w),
|
||||
// Text(treeList[index]['name'])
|
||||
// ],
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,153 +0,0 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:flutter_icons/flutter_icons.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
|
||||
import 'package:akuCommunity/utils/headers.dart';
|
||||
import 'package:akuCommunity/widget/app_bar_action.dart';
|
||||
import 'package:akuCommunity/widget/search_bar_delegate.dart';
|
||||
import 'package:akuCommunity/widget/single_ad_space.dart';
|
||||
import 'widget/market_list.dart';
|
||||
import 'widget/market_sticky_bar.dart';
|
||||
|
||||
class MarketPage extends StatefulWidget {
|
||||
MarketPage({Key key}) : super(key: key);
|
||||
|
||||
@override
|
||||
_MarketPageState createState() => _MarketPageState();
|
||||
}
|
||||
|
||||
class _MarketPageState extends State<MarketPage>
|
||||
with AutomaticKeepAliveClientMixin, SingleTickerProviderStateMixin {
|
||||
@override
|
||||
bool get wantKeepAlive => true;
|
||||
|
||||
TabController _controller;
|
||||
|
||||
List<Map<String, dynamic>> actionsList = [
|
||||
{
|
||||
'title': '购物车',
|
||||
'icon': AntDesign.shoppingcart,
|
||||
},
|
||||
{
|
||||
'title': '分类',
|
||||
'icon': AntDesign.appstore_o,
|
||||
}
|
||||
];
|
||||
//导航标签
|
||||
List<Map<String, dynamic>> treeList = [
|
||||
{'name': '社区商城', 'isGroup': false},
|
||||
{'name': '社区团购', 'isGroup': true}
|
||||
];
|
||||
|
||||
List<Widget> _listActions() {
|
||||
return actionsList
|
||||
.map((item) => AppBarAction(
|
||||
title: item['title'],
|
||||
icon: item['icon'],
|
||||
))
|
||||
.toList();
|
||||
}
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_controller = TabController(length: treeList.length, vsync: this);
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_controller.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
// double _appBarHeight = 506.w;
|
||||
super.build(context);
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
elevation: 0,
|
||||
backgroundColor: Color(0xfff9f9f9),
|
||||
title: Container(
|
||||
padding: EdgeInsets.symmetric(
|
||||
horizontal: 24.w,
|
||||
vertical: 12.w,
|
||||
),
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white,
|
||||
borderRadius: BorderRadius.all(Radius.circular(36)),
|
||||
boxShadow: <BoxShadow>[
|
||||
BoxShadow(
|
||||
color: Colors.grey.withOpacity(0.1),
|
||||
offset: Offset(1.1, 1.1),
|
||||
blurRadius: 10.0),
|
||||
],
|
||||
),
|
||||
child: InkWell(
|
||||
onTap: () {
|
||||
showSearch(context: context, delegate: SearchBarDelegate());
|
||||
},
|
||||
child: Container(
|
||||
child: Row(children: [
|
||||
Icon(
|
||||
AntDesign.search1,
|
||||
size: ScreenUtil().setSp(29),
|
||||
color: Color(0xff999999),
|
||||
),
|
||||
SizedBox(width: 5),
|
||||
Text(
|
||||
'搜索宝贝',
|
||||
style: TextStyle(
|
||||
fontSize: ScreenUtil().setSp(28),
|
||||
color: Color(0xff999999)),
|
||||
)
|
||||
]),
|
||||
),
|
||||
),
|
||||
),
|
||||
actions: _listActions(),
|
||||
),
|
||||
body: NestedScrollView(
|
||||
headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {
|
||||
return <Widget>[
|
||||
SliverAppBar(
|
||||
expandedHeight: 676.w,
|
||||
backgroundColor: Colors.transparent,
|
||||
elevation: 0,
|
||||
flexibleSpace: Stack(
|
||||
children: [
|
||||
Positioned(
|
||||
top: 0,
|
||||
left: 0,
|
||||
right: 0,
|
||||
child: Column(
|
||||
children: [
|
||||
SingleAdSpace(
|
||||
imagePath: 'assets/example/guanggao5.png',
|
||||
radius: 36,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
MarketStickyBar(
|
||||
treeList: treeList,
|
||||
controller: _controller,
|
||||
)
|
||||
];
|
||||
},
|
||||
body: TabBarView(
|
||||
controller: _controller,
|
||||
children: List.generate(
|
||||
treeList.length,
|
||||
(index) => MarketList(
|
||||
isGroup: treeList[index]['isGroup'],
|
||||
))),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,224 +0,0 @@
|
||||
import 'dart:async';
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:akuCommunity/model/aku_shop_model.dart';
|
||||
import 'package:akuCommunity/service/base_model.dart';
|
||||
import 'package:akuCommunity/utils/headers.dart';
|
||||
import 'package:akuCommunity/widget/goods_card_skeleton.dart';
|
||||
import 'package:akuCommunity/widget/sliver_goods_card.dart';
|
||||
import 'sliver_goods_group_card.dart';
|
||||
|
||||
class MarketList extends StatefulWidget {
|
||||
final bool isGroup;
|
||||
final String title;
|
||||
MarketList({Key key, this.isGroup = false, this.title}) : super(key: key);
|
||||
|
||||
@override
|
||||
_MarketListState createState() => _MarketListState();
|
||||
}
|
||||
|
||||
class _MarketListState extends State<MarketList>
|
||||
with AutomaticKeepAliveClientMixin {
|
||||
@override
|
||||
bool get wantKeepAlive => true;
|
||||
|
||||
List<AkuShopModel> _shopList = [];
|
||||
|
||||
int page = 1;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
akuShop();
|
||||
}
|
||||
|
||||
Future<void> akuShop() async {
|
||||
switch (widget.title) {
|
||||
case '居家生活':
|
||||
Future<String> loadString =
|
||||
DefaultAssetBundle.of(context).loadString("assets/json/jjsh.json");
|
||||
loadString.then((String response) {
|
||||
Map<String, dynamic> result = json.decode(response.toString());
|
||||
BaseModel model = BaseModel.fromJson(result);
|
||||
model.result.forEach((item) {
|
||||
item["count"] = 1;
|
||||
item["isCheck"] = false;
|
||||
AkuShopModel list = AkuShopModel.fromJson(item);
|
||||
setState(() {
|
||||
_shopList.add(list);
|
||||
});
|
||||
});
|
||||
});
|
||||
break;
|
||||
case '数码家电':
|
||||
Future<String> loadString =
|
||||
DefaultAssetBundle.of(context).loadString("assets/json/smjd.json");
|
||||
loadString.then((String response) {
|
||||
Map<String, dynamic> result = json.decode(response.toString());
|
||||
BaseModel model = BaseModel.fromJson(result);
|
||||
model.result.forEach((item) {
|
||||
item["count"] = 1;
|
||||
item["isCheck"] = false;
|
||||
AkuShopModel list = AkuShopModel.fromJson(item);
|
||||
setState(() {
|
||||
_shopList.add(list);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
break;
|
||||
case '休闲副食':
|
||||
Future<String> loadString =
|
||||
DefaultAssetBundle.of(context).loadString("assets/json/xxfs.json");
|
||||
loadString.then((String response) {
|
||||
Map<String, dynamic> result = json.decode(response.toString());
|
||||
BaseModel model = BaseModel.fromJson(result);
|
||||
model.result.forEach((item) {
|
||||
item["count"] = 1;
|
||||
item["isCheck"] = false;
|
||||
AkuShopModel list = AkuShopModel.fromJson(item);
|
||||
setState(() {
|
||||
_shopList.add(list);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
break;
|
||||
case '滋补保健':
|
||||
Future<String> loadString =
|
||||
DefaultAssetBundle.of(context).loadString("assets/json/zbbj.json");
|
||||
loadString.then((String response) {
|
||||
Map<String, dynamic> result = json.decode(response.toString());
|
||||
BaseModel model = BaseModel.fromJson(result);
|
||||
model.result.forEach((item) {
|
||||
item["count"] = 1;
|
||||
item["isCheck"] = false;
|
||||
AkuShopModel list = AkuShopModel.fromJson(item);
|
||||
setState(() {
|
||||
_shopList.add(list);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
break;
|
||||
case '彩妆香水':
|
||||
Future<String> loadString =
|
||||
DefaultAssetBundle.of(context).loadString("assets/json/czxs.json");
|
||||
loadString.then((String response) {
|
||||
Map<String, dynamic> result = json.decode(response.toString());
|
||||
BaseModel model = BaseModel.fromJson(result);
|
||||
model.result.forEach((item) {
|
||||
item["count"] = 1;
|
||||
item["isCheck"] = false;
|
||||
AkuShopModel list = AkuShopModel.fromJson(item);
|
||||
setState(() {
|
||||
_shopList.add(list);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
break;
|
||||
case '服饰箱包':
|
||||
Future<String> loadString =
|
||||
DefaultAssetBundle.of(context).loadString("assets/json/fsxb.json");
|
||||
loadString.then((String response) {
|
||||
Map<String, dynamic> result = json.decode(response.toString());
|
||||
BaseModel model = BaseModel.fromJson(result);
|
||||
model.result.forEach((item) {
|
||||
item["count"] = 1;
|
||||
item["isCheck"] = false;
|
||||
AkuShopModel list = AkuShopModel.fromJson(item);
|
||||
setState(() {
|
||||
_shopList.add(list);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
break;
|
||||
case '母婴玩具':
|
||||
Future<String> loadString =
|
||||
DefaultAssetBundle.of(context).loadString("assets/json/mywj.json");
|
||||
loadString.then((String response) {
|
||||
Map<String, dynamic> result = json.decode(response.toString());
|
||||
BaseModel model = BaseModel.fromJson(result);
|
||||
model.result.forEach((item) {
|
||||
item["count"] = 1;
|
||||
item["isCheck"] = false;
|
||||
AkuShopModel list = AkuShopModel.fromJson(item);
|
||||
setState(() {
|
||||
_shopList.add(list);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
break;
|
||||
case '饮料酒水':
|
||||
Future<String> loadString =
|
||||
DefaultAssetBundle.of(context).loadString("assets/json/yljs.json");
|
||||
loadString.then((String response) {
|
||||
Map<String, dynamic> result = json.decode(response.toString());
|
||||
BaseModel model = BaseModel.fromJson(result);
|
||||
model.result.forEach((item) {
|
||||
item["count"] = 1;
|
||||
item["isCheck"] = false;
|
||||
AkuShopModel list = AkuShopModel.fromJson(item);
|
||||
setState(() {
|
||||
_shopList.add(list);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
break;
|
||||
default:
|
||||
Future<String> loadString =
|
||||
DefaultAssetBundle.of(context).loadString("assets/json/shop.json");
|
||||
loadString.then((String response) {
|
||||
Map<String, dynamic> result = json.decode(response.toString());
|
||||
BaseModel model = BaseModel.fromJson(result);
|
||||
model.result.forEach((item) {
|
||||
item["count"] = 1;
|
||||
item["isCheck"] = false;
|
||||
AkuShopModel list = AkuShopModel.fromJson(item);
|
||||
setState(() {
|
||||
_shopList.add(list);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void _onLoading() async {
|
||||
await Future.delayed(Duration(milliseconds: 1500));
|
||||
page++;
|
||||
// akuShop(page);
|
||||
if (mounted) setState(() {});
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
super.build(context);
|
||||
return CustomScrollView(
|
||||
slivers: [
|
||||
widget.isGroup
|
||||
? SliverGoodsGroupCard()
|
||||
: SliverPadding(
|
||||
padding: EdgeInsets.only(
|
||||
top: 30.w,
|
||||
left: 32.w,
|
||||
right: 32.w,
|
||||
),
|
||||
sliver: _shopList.length == 0
|
||||
? SliverToBoxAdapter(child: GoodsCardSkeleton())
|
||||
: SliverGoodsCard(
|
||||
shoplist: _shopList,
|
||||
isShow: true,
|
||||
)),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
@ -1,76 +0,0 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
|
||||
class MarketStickyBar extends StatefulWidget {
|
||||
final TabController controller;
|
||||
final List<Map<String, dynamic>> treeList;
|
||||
MarketStickyBar({Key key, this.controller, this.treeList}) : super(key: key);
|
||||
|
||||
@override
|
||||
_MarketStickyBarState createState() => _MarketStickyBarState();
|
||||
}
|
||||
|
||||
class _MarketStickyBarState extends State<MarketStickyBar> {
|
||||
TabBar _tabBar() {
|
||||
return TabBar(
|
||||
controller: widget.controller,
|
||||
isScrollable: true,
|
||||
indicatorColor: Color(0xffFFC100),
|
||||
labelColor: Color(0xff000000),
|
||||
unselectedLabelColor: Color(0xFF3A5160).withOpacity(0.5),
|
||||
indicatorWeight: 3.0,
|
||||
indicatorSize: TabBarIndicatorSize.label,
|
||||
labelStyle: TextStyle(
|
||||
fontSize: ScreenUtil().setSp(34),
|
||||
color: Color(0xff999999),
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
tabs: List.generate(
|
||||
widget.treeList.length,
|
||||
(index) => Tab(
|
||||
text: widget.treeList[index]['name'],
|
||||
)),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return SliverPersistentHeader(
|
||||
delegate: _SliverAppBarDelegate(
|
||||
child: _tabBar(),
|
||||
),
|
||||
pinned: true,
|
||||
floating: true,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class _SliverAppBarDelegate extends SliverPersistentHeaderDelegate {
|
||||
final TabBar child;
|
||||
_SliverAppBarDelegate({
|
||||
@required this.child,
|
||||
});
|
||||
|
||||
@override
|
||||
double get minExtent => this.child.preferredSize.height;
|
||||
|
||||
@override
|
||||
double get maxExtent => this.child.preferredSize.height;
|
||||
|
||||
@override
|
||||
Widget build(
|
||||
BuildContext context, double shrinkOffset, bool overlapsContent) {
|
||||
return new SizedBox.expand(
|
||||
child: Container(
|
||||
color: Color(0xfff9f9f9),
|
||||
child: child,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
bool shouldRebuild(SliverPersistentHeaderDelegate oldDelegate) {
|
||||
return true;
|
||||
}
|
||||
}
|
@ -1,235 +0,0 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:flutter_icons/flutter_icons.dart';
|
||||
|
||||
import 'package:akuCommunity/utils/headers.dart';
|
||||
import 'package:akuCommunity/widget/cached_image_wrapper.dart';
|
||||
|
||||
class SliverGoodsGroupCard extends StatefulWidget {
|
||||
SliverGoodsGroupCard({Key key}) : super(key: key);
|
||||
|
||||
@override
|
||||
_SliverGoodsGroupCardState createState() => _SliverGoodsGroupCardState();
|
||||
}
|
||||
|
||||
class _SliverGoodsGroupCardState extends State<SliverGoodsGroupCard> {
|
||||
List<Map<String, dynamic>> _groupList = [
|
||||
{
|
||||
'title': '果众 厄瓜多尔散把香蕉12根约2.4kg',
|
||||
'image':
|
||||
'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1600934902545&di=c610a098ad4b433af8f89ee2768c6d28&imgtype=0&src=http%3A%2F%2Fd6.yihaodianimg.com%2FN06%2FM0A%2F85%2FCD%2FCgQIzVQiy3GAbvbDAAJatt79Mms90000_600x600.jpg',
|
||||
'price': '36.6',
|
||||
'subtitle': '第2期 中国新疆仙人蕉',
|
||||
'remainingTime': '19天13时46分',
|
||||
'address': '中国-新疆',
|
||||
'arrivalTime': '2020年11月7日',
|
||||
'isOverTime': false,
|
||||
},
|
||||
{
|
||||
'title': '四川安岳新鲜黄柠檬尤力克包邮1斤中果现摘多汁产地直',
|
||||
'image':
|
||||
'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1600935221011&di=e7aecab551abef82de3fc3450916fe22&imgtype=0&src=http%3A%2F%2Fimg3.imgtn.bdimg.com%2Fit%2Fu%3D109616473%2C3735766861%26fm%3D214%26gp%3D0.jpg',
|
||||
'price': '76.6',
|
||||
'subtitle': '第3期 中国安岳黄柠檬',
|
||||
'remainingTime': '21天13时46分',
|
||||
'address': '中国-四川',
|
||||
'arrivalTime': '2020年11月17日',
|
||||
'isOverTime': false,
|
||||
},
|
||||
{
|
||||
'title': '斤新鲜水果包邮76号甜瓜25新疆正宗吐鲁番哈密瓜西洲蜜',
|
||||
'image':
|
||||
'https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=735601588,2284764256&fm=26&gp=0.jpg',
|
||||
'price': '68.6',
|
||||
'subtitle': '第1期 中国新疆哈密瓜',
|
||||
'remainingTime': '--天--时--分',
|
||||
'address': '中国-新疆',
|
||||
'arrivalTime': '2019年12月17日',
|
||||
'isOverTime': true,
|
||||
}
|
||||
];
|
||||
|
||||
Widget _image(String image) {
|
||||
return ClipRRect(
|
||||
borderRadius: BorderRadius.circular(6),
|
||||
child: CachedImageWrapper(
|
||||
url: image,
|
||||
height: 120.w,
|
||||
width: 160.w,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _button(String price, isOverTime) {
|
||||
return InkWell(
|
||||
onTap: () {},
|
||||
child: Container(
|
||||
height: 52.w,
|
||||
width: 170.w,
|
||||
alignment: Alignment.center,
|
||||
padding: EdgeInsets.only(
|
||||
top: 10.w,
|
||||
bottom: 9.w,
|
||||
),
|
||||
decoration: BoxDecoration(
|
||||
color: isOverTime ? Color(0xffd9d9d9) : Color(0xffffc40c),
|
||||
borderRadius: BorderRadius.all(Radius.circular(4.w)),
|
||||
),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: <Widget>[
|
||||
Text(
|
||||
'¥$price',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w600,
|
||||
fontSize: 24.sp,
|
||||
color: isOverTime ? Color(0xff333333) : Color(0xffe60e0e),
|
||||
),
|
||||
),
|
||||
SizedBox(width: 10.w),
|
||||
Text(
|
||||
isOverTime ? '已过期' : '去团购',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w600,
|
||||
fontSize: 24.sp,
|
||||
color: Color(0xff333333)),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _content(String title, subtitle, remainingTime, address, arrivalTime,
|
||||
price, isOverTime) {
|
||||
return Container(
|
||||
margin: EdgeInsets.only(left: 20.w),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Container(
|
||||
margin: EdgeInsets.only(bottom: 8.w),
|
||||
width: 474.w,
|
||||
child: Text(
|
||||
title,
|
||||
textAlign: TextAlign.left,
|
||||
maxLines: 1,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
style: TextStyle(
|
||||
fontSize: 30.sp,
|
||||
color: Color(0xff333333),
|
||||
),
|
||||
),
|
||||
),
|
||||
Container(
|
||||
margin: EdgeInsets.only(bottom: 12.w),
|
||||
child: Text(
|
||||
subtitle,
|
||||
style: TextStyle(
|
||||
fontSize: 20.sp,
|
||||
color: Color(0xff333333),
|
||||
),
|
||||
),
|
||||
),
|
||||
Container(
|
||||
margin: EdgeInsets.only(bottom: 16.w),
|
||||
padding: EdgeInsets.only(
|
||||
top: 6.w,
|
||||
left: 11.w,
|
||||
bottom: 7.w,
|
||||
right: 20.w,
|
||||
),
|
||||
decoration: BoxDecoration(
|
||||
color: isOverTime ? Color(0xffd9d9d9) : Color(0xffffeee3),
|
||||
borderRadius: BorderRadius.all(Radius.circular(4.w)),
|
||||
),
|
||||
child: Row(
|
||||
children: [
|
||||
Icon(
|
||||
MaterialIcons.access_time,
|
||||
size: 18.sp,
|
||||
color: isOverTime ? Color(0xff333333) : Color(0xffff7f00),
|
||||
),
|
||||
Text(
|
||||
'剩余时间:$remainingTime',
|
||||
maxLines: 1,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
style: TextStyle(
|
||||
color: isOverTime ? Color(0xff333333) : Color(0xffff7f00),
|
||||
fontSize: 18.sp,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
Container(
|
||||
margin: EdgeInsets.only(bottom: 30.w),
|
||||
width: 474.w,
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
'原产地:$address',
|
||||
style:
|
||||
TextStyle(color: Color(0xff999999), fontSize: 20.sp),
|
||||
),
|
||||
SizedBox(height: 10.w),
|
||||
Text(
|
||||
'预计到货:$arrivalTime',
|
||||
style:
|
||||
TextStyle(color: Color(0xff999999), fontSize: 20.sp),
|
||||
)
|
||||
],
|
||||
),
|
||||
_button(price, isOverTime)
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return SliverList(
|
||||
delegate: SliverChildBuilderDelegate((BuildContext content, int index) {
|
||||
return Container(
|
||||
margin: EdgeInsets.only(
|
||||
top: 20.w,
|
||||
left: 32.w,
|
||||
right: 32.w,
|
||||
),
|
||||
padding: EdgeInsets.only(
|
||||
top: 12.w,
|
||||
left: 12.w,
|
||||
right: 20.w,
|
||||
),
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white,
|
||||
borderRadius: BorderRadius.all(Radius.circular(8.w)),
|
||||
),
|
||||
child: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: <Widget>[
|
||||
_image(_groupList[index]['image']),
|
||||
_content(
|
||||
_groupList[index]['title'],
|
||||
_groupList[index]['subtitle'],
|
||||
_groupList[index]['remainingTime'],
|
||||
_groupList[index]['address'],
|
||||
_groupList[index]['arrivalTime'],
|
||||
_groupList[index]['price'],
|
||||
_groupList[index]['isOverTime'],
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}, childCount: _groupList.length),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,242 +0,0 @@
|
||||
import 'dart:async';
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:akuCommunity/base/base_style.dart';
|
||||
import 'package:akuCommunity/model/aku_shop_class_model.dart';
|
||||
import 'package:akuCommunity/service/base_model.dart';
|
||||
import 'package:akuCommunity/utils/headers.dart';
|
||||
import 'package:akuCommunity/widget/cached_image_wrapper.dart';
|
||||
import 'widget/market_class_bar.dart';
|
||||
|
||||
class MarketClassPage extends StatefulWidget {
|
||||
MarketClassPage({Key key}) : super(key: key);
|
||||
|
||||
@override
|
||||
_MarketClassPageState createState() => _MarketClassPageState();
|
||||
}
|
||||
|
||||
class _MarketClassPageState extends State<MarketClassPage> {
|
||||
// Future.microtask(() => null)1
|
||||
// void testSX(){
|
||||
// new Future(() => print('s_1'));
|
||||
// scheduleMicrotask(() => print('s_2'));
|
||||
// print('s_3');
|
||||
// }
|
||||
|
||||
int _currentIndex = 0;
|
||||
List<AkuShopClassModel> _shopClassList = [];
|
||||
List<String> _leftNav = [
|
||||
'居家生活',
|
||||
'服饰鞋包',
|
||||
'休闲副食',
|
||||
'数码家电',
|
||||
'彩妆香水',
|
||||
'母婴亲子',
|
||||
'运动旅游',
|
||||
'滋补保健',
|
||||
];
|
||||
|
||||
ScrollController _controller = ScrollController();
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
akuShopClass();
|
||||
}
|
||||
|
||||
Future<void> akuShopClass() async {
|
||||
Future<String> loadString =
|
||||
DefaultAssetBundle.of(context).loadString("assets/json/shopclass.json");
|
||||
loadString.then((String response) {
|
||||
Map<String, dynamic> result = json.decode(response.toString());
|
||||
BaseModel model = BaseModel.fromJson(result);
|
||||
model.result.forEach((item) {
|
||||
AkuShopClassModel list = AkuShopClassModel.fromJson(item);
|
||||
setState(() {
|
||||
_shopClassList.add(list);
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
Widget _leftInkWellNav(int index) {
|
||||
return InkWell(
|
||||
child: Stack(
|
||||
children: [
|
||||
Container(
|
||||
height: 120.w,
|
||||
alignment: Alignment.center,
|
||||
color: _currentIndex == index ? Colors.white : Colors.transparent,
|
||||
padding: EdgeInsets.symmetric(vertical: 24.w),
|
||||
child: Text(
|
||||
_shopClassList[index].mainName,
|
||||
style: TextStyle(
|
||||
fontSize: BaseStyle.fontSize28,
|
||||
color: _currentIndex == index
|
||||
? BaseStyle.colorffc40c
|
||||
: ktextPrimary,
|
||||
),
|
||||
),
|
||||
),
|
||||
_currentIndex == index
|
||||
? Positioned(
|
||||
top: 42.w,
|
||||
left: 1,
|
||||
child: SizedBox(
|
||||
width: 8.w,
|
||||
height: 40.w,
|
||||
child: DecoratedBox(
|
||||
decoration: BoxDecoration(color: BaseStyle.colorffc40c),
|
||||
),
|
||||
),
|
||||
)
|
||||
: SizedBox(),
|
||||
],
|
||||
),
|
||||
onTap: () {
|
||||
setState(() {
|
||||
// _controller.animateTo(0, duration: Duration(seconds: 2), curve: Curves.easeInQuad);
|
||||
_controller.jumpTo(0);
|
||||
_currentIndex = index;
|
||||
});
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
Widget _classGridCard(List<Info> infoList) {
|
||||
return Container(
|
||||
child: GridView.builder(
|
||||
padding: EdgeInsets.zero,
|
||||
shrinkWrap: true,
|
||||
physics: NeverScrollableScrollPhysics(),
|
||||
itemCount: infoList.length,
|
||||
itemBuilder: (BuildContext context, int index) {
|
||||
return InkWell(
|
||||
onTap: () {},
|
||||
child: Container(
|
||||
child: Column(
|
||||
children: [
|
||||
CachedImageWrapper(
|
||||
url: infoList[index].imgurl,
|
||||
width: 152.w,
|
||||
height: 152.w,
|
||||
),
|
||||
Container(
|
||||
margin: EdgeInsets.only(top: 14.w),
|
||||
child: Text(
|
||||
infoList[index].sonName,
|
||||
style: TextStyle(
|
||||
fontSize: BaseStyle.fontSize24,
|
||||
color: ktextPrimary,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
));
|
||||
},
|
||||
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
|
||||
crossAxisCount: 3,
|
||||
childAspectRatio: 152.w / 210.w,
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _classList(String nextName, List<Info> infoList) {
|
||||
return Container(
|
||||
margin: EdgeInsets.symmetric(horizontal: 32.w),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Container(
|
||||
margin: EdgeInsets.only(bottom: 24.w),
|
||||
padding: EdgeInsets.symmetric(vertical: 14.w),
|
||||
width: 476.w,
|
||||
decoration: BoxDecoration(
|
||||
border: Border(
|
||||
bottom: BorderSide(color: Color(0xffe8e8e8), width: 0.5),
|
||||
),
|
||||
),
|
||||
child: Text(
|
||||
nextName,
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold,
|
||||
fontSize: BaseStyle.fontSize26,
|
||||
color: ktextPrimary,
|
||||
),
|
||||
),
|
||||
),
|
||||
_classGridCard(infoList),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
double _statusHeight = MediaQuery.of(context).padding.top;
|
||||
return Scaffold(
|
||||
appBar: PreferredSize(
|
||||
child: MarketClassBar(),
|
||||
preferredSize: Size.fromHeight(kToolbarHeight),
|
||||
),
|
||||
body: _shopClassList.length != 0
|
||||
? Container(
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white,
|
||||
border: Border(
|
||||
top: BorderSide(color: Color(0xffe8e8e8), width: 0.5)),
|
||||
),
|
||||
child: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
Container(
|
||||
width: 203.w,
|
||||
height: MediaQuery.of(context).size.height -
|
||||
kToolbarHeight -
|
||||
_statusHeight,
|
||||
decoration: BoxDecoration(
|
||||
border: Border(
|
||||
right:
|
||||
BorderSide(color: Color(0xffe8e8e8), width: 0.5)),
|
||||
),
|
||||
child: ListView.builder(
|
||||
shrinkWrap: true,
|
||||
itemCount: _leftNav.length,
|
||||
itemBuilder: (BuildContext context, int index) {
|
||||
return _leftInkWellNav(index);
|
||||
}),
|
||||
),
|
||||
Container(
|
||||
width: 547.w,
|
||||
height: MediaQuery.of(context).size.height -
|
||||
kToolbarHeight -
|
||||
_statusHeight,
|
||||
child: ListView(
|
||||
shrinkWrap: true,
|
||||
controller: _controller,
|
||||
children: List.generate(
|
||||
_shopClassList[_currentIndex].data.length,
|
||||
(index) => _classList(
|
||||
_shopClassList[_currentIndex]
|
||||
.data[index]
|
||||
.nextName,
|
||||
_shopClassList[_currentIndex]
|
||||
.data[index]
|
||||
.info,
|
||||
))),
|
||||
),
|
||||
],
|
||||
),
|
||||
)
|
||||
: Container(
|
||||
child: CircularProgressIndicator(),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,58 +0,0 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:flutter_icons/flutter_icons.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import 'package:akuCommunity/utils/headers.dart';
|
||||
import 'package:akuCommunity/widget/search_bar_delegate.dart';
|
||||
|
||||
class MarketClassBar extends StatelessWidget {
|
||||
Widget _inkWellSearch(BuildContext context) {
|
||||
return InkWell(
|
||||
onTap: () {
|
||||
showSearch(context: context, delegate: SearchBarDelegate());
|
||||
},
|
||||
child: Container(
|
||||
margin: EdgeInsets.only(right: 32.w),
|
||||
padding: EdgeInsets.only(left: 40.w, top: 15.w, bottom: 15.w),
|
||||
decoration: BoxDecoration(
|
||||
color: Color(0xfff3f3f3),
|
||||
borderRadius: BorderRadius.all(Radius.circular(36)),
|
||||
),
|
||||
child: Row(children: [
|
||||
Icon(
|
||||
AntDesign.search1,
|
||||
size: 28.sp,
|
||||
color: Color(0xff999999),
|
||||
),
|
||||
SizedBox(width: 5),
|
||||
Text(
|
||||
'搜索商品、活动、帖子、应用',
|
||||
style: TextStyle(
|
||||
fontSize: 28.sp,
|
||||
color: Color(0xff999999),
|
||||
),
|
||||
)
|
||||
]),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
child: AppBar(
|
||||
elevation: 0,
|
||||
titleSpacing: 0,
|
||||
backgroundColor: Color(0xffffffff),
|
||||
leading: InkWell(
|
||||
onTap: () => Get.back(),
|
||||
child: Icon(AntDesign.left, size: 40.sp),
|
||||
),
|
||||
centerTitle: true,
|
||||
title: _inkWellSearch(context),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,265 +0,0 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:flutter_icons/flutter_icons.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import 'package:akuCommunity/base/assets_image.dart';
|
||||
import 'package:akuCommunity/base/base_style.dart';
|
||||
import 'package:akuCommunity/routers/page_routers.dart';
|
||||
import 'package:akuCommunity/utils/headers.dart';
|
||||
import 'package:akuCommunity/widget/bee_scaffold.dart';
|
||||
import 'widget/refund_shop_card.dart';
|
||||
|
||||
class EvaluateGoodPage extends StatefulWidget {
|
||||
final Bundle bundle;
|
||||
EvaluateGoodPage({Key key, this.bundle}) : super(key: key);
|
||||
|
||||
@override
|
||||
_EvaluateGoodPageState createState() => _EvaluateGoodPageState();
|
||||
}
|
||||
|
||||
class _EvaluateGoodPageState extends State<EvaluateGoodPage> {
|
||||
TextEditingController _evaluateContent = new TextEditingController();
|
||||
String hintText = '请您从多个角度评价该商品';
|
||||
List<Map<String, dynamic>> _listRadio = [
|
||||
{'radioName': '好评', 'isCheck': false},
|
||||
{'radioName': '中评', 'isCheck': false},
|
||||
{'radioName': '差评', 'isCheck': false}
|
||||
];
|
||||
|
||||
Container _containerContentList(List<Map<String, dynamic>> listContent) {
|
||||
return Container(
|
||||
child: Column(
|
||||
children: listContent
|
||||
.map((item) => RefundShopCard(
|
||||
imagePath: item['imagePath'],
|
||||
content: item['content'],
|
||||
specs: item['specs'],
|
||||
))
|
||||
.toList(),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Container _containerRadio() {
|
||||
return Container(
|
||||
margin: EdgeInsets.only(
|
||||
top: 8.w,
|
||||
),
|
||||
padding: EdgeInsets.only(
|
||||
left: 32.w,
|
||||
),
|
||||
child: Row(
|
||||
children: [
|
||||
Text(
|
||||
'描述相符',
|
||||
style:
|
||||
TextStyle(fontSize: BaseStyle.fontSize28, color: ktextPrimary),
|
||||
),
|
||||
SizedBox(width: 34.w),
|
||||
Row(
|
||||
children: _listRadio
|
||||
.map((item) => Container(
|
||||
margin: EdgeInsets.only(left: 44.w),
|
||||
child: InkWell(
|
||||
onTap: () {
|
||||
setState(() {
|
||||
_listRadio.forEach((item) {
|
||||
item['isCheck'] = false;
|
||||
});
|
||||
item['isCheck'] = true;
|
||||
});
|
||||
},
|
||||
child: Row(
|
||||
children: [
|
||||
Icon(
|
||||
Icons.radio_button_checked,
|
||||
size: BaseStyle.fontSize36,
|
||||
color: item['isCheck']
|
||||
? BaseStyle.colorff8500
|
||||
: BaseStyle.colord8d8d8,
|
||||
),
|
||||
SizedBox(width: 16.w),
|
||||
Text(
|
||||
item['radioName'],
|
||||
style: TextStyle(
|
||||
fontSize: BaseStyle.fontSize28,
|
||||
color: item['isCheck']
|
||||
? BaseStyle.colorff8500
|
||||
: BaseStyle.colord8d8d8,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
))
|
||||
.toList(),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Container _containerEvaluateTextField() {
|
||||
return Container(
|
||||
margin: EdgeInsets.only(
|
||||
top: 70.w,
|
||||
),
|
||||
padding: EdgeInsets.only(
|
||||
top: 22.w,
|
||||
left: 32.w,
|
||||
right: 32.w,
|
||||
),
|
||||
color: Colors.white,
|
||||
child: Container(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
TextFormField(
|
||||
cursorColor: Color(0xffffc40c),
|
||||
style: TextStyle(
|
||||
fontSize: BaseStyle.fontSize34,
|
||||
),
|
||||
controller: _evaluateContent,
|
||||
onChanged: (String value) {},
|
||||
maxLines: 8,
|
||||
decoration: InputDecoration(
|
||||
isDense: true,
|
||||
contentPadding: EdgeInsets.only(
|
||||
top: 0.w,
|
||||
bottom: 0.w,
|
||||
),
|
||||
hintText: hintText,
|
||||
border: InputBorder.none, //去掉输入框的下滑线
|
||||
fillColor: Colors.white,
|
||||
filled: true,
|
||||
hintStyle: TextStyle(
|
||||
color: BaseStyle.color999999,
|
||||
fontSize: BaseStyle.fontSize28,
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Container _containerAddImage() {
|
||||
return Container(
|
||||
padding:
|
||||
EdgeInsets.only(left: 36.w, right: 36.w, top: 32.w, bottom: 24.w),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
'添加图片信息(0/9)',
|
||||
style:
|
||||
TextStyle(fontSize: BaseStyle.fontSize28, color: ktextPrimary),
|
||||
),
|
||||
SizedBox(height: 24.w),
|
||||
InkWell(
|
||||
onTap: () {},
|
||||
child: Container(
|
||||
width: 218.w,
|
||||
height: 218.w,
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white,
|
||||
borderRadius: BorderRadius.all(Radius.circular(8)),
|
||||
border: Border.all(color: Color(0xffd4cfbe), width: 1.0),
|
||||
image: DecorationImage(
|
||||
image: AssetImage(AssetsImage.IMAGEADD), fit: BoxFit.fill),
|
||||
),
|
||||
// child: ,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
InkWell _inkWellRelease() {
|
||||
return InkWell(
|
||||
child: Container(
|
||||
alignment: Alignment.center,
|
||||
height: 85.w,
|
||||
width: 686.w,
|
||||
padding: EdgeInsets.symmetric(
|
||||
vertical: 20.w,
|
||||
),
|
||||
decoration: BoxDecoration(
|
||||
color: Color(0xffffc40c),
|
||||
borderRadius: BorderRadius.all(Radius.circular(4))),
|
||||
child: Text(
|
||||
'发布',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w600,
|
||||
fontSize: BaseStyle.fontSize32,
|
||||
color: ktextPrimary),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
double _statusHeight = MediaQuery.of(context).padding.top;
|
||||
return BeeScaffold(
|
||||
leading: IconButton(
|
||||
icon: Icon(AntDesign.left, size: 40.sp),
|
||||
onPressed: () {
|
||||
Get.back();
|
||||
},
|
||||
),
|
||||
title: '发表评价',
|
||||
body: SingleChildScrollView(
|
||||
child: Container(
|
||||
height: MediaQuery.of(context).size.height -
|
||||
kToolbarHeight -
|
||||
_statusHeight,
|
||||
child: GestureDetector(
|
||||
behavior: HitTestBehavior.opaque,
|
||||
onTap: () {
|
||||
FocusScope.of(context).requestFocus(FocusNode());
|
||||
},
|
||||
child: Column(
|
||||
children: [
|
||||
Container(
|
||||
margin: EdgeInsets.only(
|
||||
top: 21.w,
|
||||
left: 24.w,
|
||||
right: 24.w,
|
||||
),
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white,
|
||||
borderRadius: BorderRadius.all(Radius.circular(4)),
|
||||
boxShadow: <BoxShadow>[
|
||||
BoxShadow(
|
||||
color: Colors.grey.withOpacity(0.1),
|
||||
offset: Offset(1, 1),
|
||||
blurRadius: 10.0),
|
||||
],
|
||||
),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
_containerContentList(
|
||||
widget.bundle.getMap('details')['listContent']),
|
||||
_containerRadio(),
|
||||
_containerEvaluateTextField(),
|
||||
_containerAddImage(),
|
||||
],
|
||||
),
|
||||
),
|
||||
SizedBox(height: 26.w),
|
||||
_inkWellRelease(),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,478 +0,0 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:extended_text/extended_text.dart';
|
||||
import 'package:flutter_icons/flutter_icons.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import 'package:akuCommunity/base/assets_image.dart';
|
||||
import 'package:akuCommunity/base/base_style.dart';
|
||||
import 'package:akuCommunity/pages/personal/refund_select_page.dart';
|
||||
import 'package:akuCommunity/routers/page_routers.dart';
|
||||
import 'package:akuCommunity/utils/headers.dart';
|
||||
import 'package:akuCommunity/widget/bee_scaffold.dart';
|
||||
|
||||
class OrderDetailsPage extends StatefulWidget {
|
||||
final Bundle bundle;
|
||||
OrderDetailsPage({Key key, this.bundle}) : super(key: key);
|
||||
|
||||
@override
|
||||
_OrderDetailsPageState createState() => _OrderDetailsPageState();
|
||||
}
|
||||
|
||||
class _OrderDetailsPageState extends State<OrderDetailsPage> {
|
||||
Container _containerHeader(String status) {
|
||||
return Container(
|
||||
width: double.infinity,
|
||||
color: Color(0xffffd000),
|
||||
padding: EdgeInsets.only(
|
||||
top: 44.w,
|
||||
bottom: 44.w,
|
||||
left: 33.w,
|
||||
),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
status,
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w600,
|
||||
fontSize: BaseStyle.fontSize32,
|
||||
color: ktextPrimary,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 10.w),
|
||||
Text(
|
||||
'还剩9小时33分自动确认',
|
||||
style: TextStyle(
|
||||
fontSize: BaseStyle.fontSize24,
|
||||
color: ktextPrimary,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Container _containerAddress() {
|
||||
return Container(
|
||||
color: Color(0xffffffff),
|
||||
padding: EdgeInsets.only(
|
||||
left: 32.w,
|
||||
top: 24.w,
|
||||
bottom: 24.w,
|
||||
),
|
||||
child: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Image.asset(
|
||||
AssetsImage.LOCATION,
|
||||
height: 78.w,
|
||||
width: 78.w,
|
||||
),
|
||||
SizedBox(width: 24.w),
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
'马泽鹏',
|
||||
style: TextStyle(
|
||||
fontSize: BaseStyle.fontSize28,
|
||||
color: ktextPrimary,
|
||||
),
|
||||
),
|
||||
SizedBox(width: 16.w),
|
||||
Text(
|
||||
'18809801254',
|
||||
style: TextStyle(
|
||||
fontSize: BaseStyle.fontSize24,
|
||||
color: BaseStyle.color999999,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 16.w),
|
||||
Container(
|
||||
width: 584.w,
|
||||
child: ExtendedText.rich(
|
||||
TextSpan(
|
||||
children: [
|
||||
TextSpan(
|
||||
text: '浙江省 宁波市 江北区 工程学院阿库旅游6楼606室',
|
||||
style: TextStyle(
|
||||
fontSize: BaseStyle.fontSize28,
|
||||
color: BaseStyle.color999999,
|
||||
height: 1.5),
|
||||
)
|
||||
],
|
||||
),
|
||||
maxLines: 2,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
InkWell _inkWellRefund(
|
||||
List<Map<String, dynamic>> listContent, double payPrice) {
|
||||
return InkWell(
|
||||
onTap: () {
|
||||
Get.to(() => RefundSelectPage(
|
||||
bundle: Bundle()
|
||||
..putMap('details', {
|
||||
'listContent': listContent,
|
||||
'payPrice': payPrice,
|
||||
}),
|
||||
));
|
||||
},
|
||||
child: Container(
|
||||
alignment: Alignment.center,
|
||||
padding: EdgeInsets.symmetric(vertical: 6.w),
|
||||
width: 134.w,
|
||||
decoration: BoxDecoration(
|
||||
border: Border.all(color: BaseStyle.color999999, width: 0.5),
|
||||
borderRadius: BorderRadius.all(Radius.circular(36)),
|
||||
),
|
||||
child: Text(
|
||||
'退款',
|
||||
style: TextStyle(fontSize: BaseStyle.fontSize28, color: ktextPrimary),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Container _containerContent(
|
||||
String imagePath,
|
||||
content,
|
||||
specs,
|
||||
double price,
|
||||
payPrice,
|
||||
int shopNum,
|
||||
List<Map<String, dynamic>> listContent,
|
||||
) {
|
||||
return Container(
|
||||
child: Stack(
|
||||
children: [
|
||||
Column(
|
||||
children: [
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
Image.asset(
|
||||
imagePath,
|
||||
height: 179.w,
|
||||
width: 173.w,
|
||||
fit: BoxFit.fill,
|
||||
),
|
||||
SizedBox(width: 24.w),
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Container(
|
||||
width: 252.w,
|
||||
child: Text(
|
||||
content,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
maxLines: 2,
|
||||
style: TextStyle(
|
||||
fontSize: BaseStyle.fontSize28,
|
||||
color: ktextPrimary,
|
||||
),
|
||||
),
|
||||
),
|
||||
SizedBox(height: 16.w),
|
||||
Text(
|
||||
specs,
|
||||
style: TextStyle(
|
||||
fontSize: BaseStyle.fontSize28,
|
||||
color: BaseStyle.color999999,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 73.w),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
children: [
|
||||
Container(
|
||||
margin: EdgeInsets.only(right: 25.w),
|
||||
child: Text(
|
||||
'实付款¥$payPrice',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w600,
|
||||
fontSize: BaseStyle.fontSize28,
|
||||
color: BaseStyle.colorff8500,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
Positioned(
|
||||
top: 0,
|
||||
right: 23.w,
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
crossAxisAlignment: CrossAxisAlignment.end,
|
||||
children: [
|
||||
Text(
|
||||
'¥$price',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w600,
|
||||
fontSize: BaseStyle.fontSize28,
|
||||
color: ktextPrimary,
|
||||
),
|
||||
),
|
||||
Text(
|
||||
'x$shopNum',
|
||||
style: TextStyle(
|
||||
fontSize: BaseStyle.fontSize28,
|
||||
color: BaseStyle.color999999,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
Positioned(
|
||||
top: 103.w,
|
||||
right: 0,
|
||||
child: _inkWellRefund(listContent, payPrice),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Container _containerContentList(
|
||||
List<Map<String, dynamic>> listContent, double payPrice) {
|
||||
return Container(
|
||||
color: Color(0xffffffff),
|
||||
margin: EdgeInsets.only(top: 32.w),
|
||||
padding: EdgeInsets.only(
|
||||
top: 32.w,
|
||||
left: 32.w,
|
||||
right: 32.w,
|
||||
bottom: 24.w,
|
||||
),
|
||||
child: Column(
|
||||
children: listContent
|
||||
.map((item) => _containerContent(
|
||||
item['imagePath'],
|
||||
item['content'],
|
||||
item['specs'],
|
||||
item['price'],
|
||||
payPrice,
|
||||
item['shopNum'],
|
||||
listContent))
|
||||
.toList(),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Container _containerOrderDetail(List<Map<String, dynamic>> listOrderDetail) {
|
||||
return Container(
|
||||
color: Color(0xffffffff),
|
||||
width: double.infinity,
|
||||
margin: EdgeInsets.only(top: 24.w),
|
||||
padding: EdgeInsets.only(
|
||||
top: 32.w,
|
||||
left: 31.w,
|
||||
bottom: 39.w,
|
||||
),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
'订单信息',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w600,
|
||||
fontSize: BaseStyle.fontSize28,
|
||||
color: ktextPrimary),
|
||||
),
|
||||
Column(
|
||||
children: listOrderDetail
|
||||
.map((item) => Container(
|
||||
margin: EdgeInsets.only(top: 22.w),
|
||||
child: Row(
|
||||
children: [
|
||||
Text(
|
||||
item['title'],
|
||||
style: TextStyle(
|
||||
fontSize: BaseStyle.fontSize24,
|
||||
color: BaseStyle.color999999),
|
||||
),
|
||||
SizedBox(width: 75.w),
|
||||
Text(
|
||||
item['subtitle'],
|
||||
style: TextStyle(
|
||||
fontSize: BaseStyle.fontSize24,
|
||||
color: BaseStyle.color999999),
|
||||
),
|
||||
],
|
||||
),
|
||||
))
|
||||
.toList(),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
InkWell _inkWellBottom(String title, Color color, Color fontColor) {
|
||||
return InkWell(
|
||||
onTap: () {},
|
||||
child: Container(
|
||||
alignment: Alignment.center,
|
||||
color: color,
|
||||
padding: EdgeInsets.symmetric(
|
||||
vertical: 26.5.w,
|
||||
),
|
||||
child: Text(
|
||||
title,
|
||||
style: TextStyle(
|
||||
fontSize: BaseStyle.fontSize32,
|
||||
color: fontColor,
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Positioned _positionedBottomBar(String status) {
|
||||
List<Map<String, dynamic>> _listBottom;
|
||||
switch (status) {
|
||||
case '等待买家付款':
|
||||
_listBottom = [
|
||||
{
|
||||
'title': '修改地址',
|
||||
'color': Color(0xff2a2a2a),
|
||||
'fontColor': Color(0xffffffff),
|
||||
},
|
||||
{
|
||||
'title': '付款',
|
||||
'color': Color(0xffffc40c),
|
||||
'fontColor': Color(0xff333333),
|
||||
},
|
||||
];
|
||||
break;
|
||||
case '买家已付款':
|
||||
_listBottom = [
|
||||
{
|
||||
'title': '申请退款',
|
||||
'color': Color(0xffffc40c),
|
||||
'fontColor': Color(0xff333333),
|
||||
},
|
||||
];
|
||||
break;
|
||||
case '卖家已发货':
|
||||
_listBottom = [
|
||||
{
|
||||
'title': '查看物流',
|
||||
'color': Color(0xff2a2a2a),
|
||||
'fontColor': Color(0xffffffff),
|
||||
},
|
||||
{
|
||||
'title': '确认收货',
|
||||
'color': Color(0xffffc40c),
|
||||
'fontColor': Color(0xff333333),
|
||||
},
|
||||
];
|
||||
break;
|
||||
case '退款中':
|
||||
_listBottom = [
|
||||
{
|
||||
'title': '查看物流',
|
||||
'color': Color(0xff2a2a2a),
|
||||
'fontColor': Color(0xffffffff),
|
||||
},
|
||||
];
|
||||
break;
|
||||
case '交易成功':
|
||||
_listBottom = [
|
||||
{
|
||||
'title': '查看物流',
|
||||
'color': Color(0xff2a2a2a),
|
||||
'fontColor': Color(0xffffffff),
|
||||
},
|
||||
{
|
||||
'title': '申请售后',
|
||||
'color': Color(0xffffc40c),
|
||||
'fontColor': Color(0xff333333),
|
||||
},
|
||||
];
|
||||
break;
|
||||
default:
|
||||
_listBottom = [];
|
||||
break;
|
||||
}
|
||||
return Positioned(
|
||||
bottom: 0,
|
||||
child: Container(
|
||||
alignment: Alignment.center,
|
||||
height: 98.w,
|
||||
width: MediaQuery.of(context).size.width,
|
||||
child: Row(
|
||||
children: _listBottom
|
||||
.map((item) => Expanded(
|
||||
child: _inkWellBottom(
|
||||
item['title'],
|
||||
item['color'],
|
||||
item['fontColor'],
|
||||
),
|
||||
))
|
||||
.toList(),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
double statusHeight = MediaQuery.of(context).padding.top;
|
||||
return BeeScaffold(
|
||||
leading: IconButton(
|
||||
icon: Icon(AntDesign.left, size: 40.sp),
|
||||
onPressed: () {
|
||||
Get.back();
|
||||
},
|
||||
),
|
||||
title: '订单详情',
|
||||
body: SingleChildScrollView(
|
||||
child: Container(
|
||||
height: MediaQuery.of(context).size.height -
|
||||
kToolbarHeight -
|
||||
statusHeight,
|
||||
child: Stack(
|
||||
children: [
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
_containerHeader(widget.bundle.getMap('details')['status']),
|
||||
_containerAddress(),
|
||||
_containerContentList(
|
||||
widget.bundle.getMap('details')['listContent'],
|
||||
widget.bundle.getMap('details')['payPrice'],
|
||||
),
|
||||
_containerOrderDetail(
|
||||
widget.bundle.getMap('details')['listOrderDetail']),
|
||||
],
|
||||
),
|
||||
_positionedBottomBar(widget.bundle.getMap('details')['status'])
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,133 +0,0 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:flutter_icons/flutter_icons.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import 'package:akuCommunity/base/base_style.dart';
|
||||
import 'package:akuCommunity/routers/page_routers.dart';
|
||||
import 'package:akuCommunity/utils/headers.dart';
|
||||
import 'widget/order_list.dart';
|
||||
|
||||
class OrderPage extends StatefulWidget {
|
||||
final Bundle bundle;
|
||||
OrderPage({Key key, this.bundle}) : super(key: key);
|
||||
|
||||
@override
|
||||
_OrderPageState createState() => _OrderPageState();
|
||||
}
|
||||
|
||||
class _OrderPageState extends State<OrderPage>
|
||||
with SingleTickerProviderStateMixin {
|
||||
TabController _tabController;
|
||||
|
||||
List<Map<String, dynamic>> tabs = [
|
||||
{'name': '全部', 'id': 'new'},
|
||||
{'name': '待付款', 'id': 'new'},
|
||||
{'name': '待发货', 'id': 'new'},
|
||||
{'name': '待收货', 'id': 'new'},
|
||||
{'name': '待评价', 'id': 'new'},
|
||||
{'name': '售后', 'id': 'new'},
|
||||
];
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
// 创建Controller
|
||||
_tabController = TabController(length: tabs.length, vsync: this);
|
||||
}
|
||||
|
||||
PreferredSize _preferredSizeBottom() {
|
||||
return PreferredSize(
|
||||
preferredSize: Size.fromHeight(kToolbarHeight),
|
||||
child: Align(
|
||||
alignment: Alignment.centerLeft,
|
||||
child: TabBar(
|
||||
controller: _tabController,
|
||||
isScrollable: true,
|
||||
indicator: BoxDecoration(),
|
||||
labelColor: BaseStyle.colorff8500,
|
||||
unselectedLabelColor: ktextPrimary,
|
||||
labelStyle: TextStyle(
|
||||
fontSize: 28.sp,
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
unselectedLabelStyle: TextStyle(
|
||||
fontSize: 28.sp,
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
tabs: List.generate(
|
||||
tabs.length,
|
||||
(index) => Tab(
|
||||
text: tabs[index]['name'],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
InkWell _inkWellSearch() {
|
||||
return InkWell(
|
||||
onTap: () {},
|
||||
child: Container(
|
||||
margin: EdgeInsets.only(right: 32.w),
|
||||
padding: EdgeInsets.only(left: 40.w, top: 20.w, bottom: 20.w),
|
||||
decoration: BoxDecoration(
|
||||
color: BaseStyle.colorf3f3f3,
|
||||
borderRadius: BorderRadius.all(Radius.circular(36)),
|
||||
boxShadow: <BoxShadow>[
|
||||
BoxShadow(
|
||||
color: Colors.grey.withOpacity(0.1),
|
||||
offset: Offset(1.1, 1.1),
|
||||
blurRadius: 10.0),
|
||||
],
|
||||
),
|
||||
child: Row(children: [
|
||||
Icon(
|
||||
AntDesign.search1,
|
||||
size: BaseStyle.fontSize28,
|
||||
color: BaseStyle.color999999,
|
||||
),
|
||||
SizedBox(width: 5),
|
||||
Text(
|
||||
'搜索我的订单',
|
||||
style: TextStyle(
|
||||
fontSize: BaseStyle.fontSize28,
|
||||
color: BaseStyle.color999999,
|
||||
),
|
||||
)
|
||||
]),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
AppBar _appBar() {
|
||||
return AppBar(
|
||||
elevation: 0,
|
||||
titleSpacing: 0,
|
||||
backgroundColor: Color(0xffffffff),
|
||||
leading: InkWell(
|
||||
onTap: () => Get.back(),
|
||||
child: Icon(AntDesign.left, size: 40.sp),
|
||||
),
|
||||
centerTitle: false,
|
||||
title: _inkWellSearch(),
|
||||
bottom: _preferredSizeBottom(),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: _appBar(),
|
||||
body: TabBarView(
|
||||
controller: _tabController,
|
||||
children: List.generate(
|
||||
tabs.length,
|
||||
(index) => OrderList(),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,216 +0,0 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:flutter_icons/flutter_icons.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import 'package:akuCommunity/base/base_style.dart';
|
||||
import 'package:akuCommunity/routers/page_routers.dart';
|
||||
import 'package:akuCommunity/utils/headers.dart';
|
||||
import 'package:akuCommunity/widget/bee_scaffold.dart';
|
||||
import 'widget/refund_shop_card.dart';
|
||||
import 'widget/refund_tile_card.dart';
|
||||
|
||||
class RefundApplyPage extends StatefulWidget {
|
||||
final Bundle bundle;
|
||||
RefundApplyPage({Key key, this.bundle}) : super(key: key);
|
||||
|
||||
@override
|
||||
_RefundApplyPageState createState() => _RefundApplyPageState();
|
||||
}
|
||||
|
||||
class _RefundApplyPageState extends State<RefundApplyPage> {
|
||||
TextEditingController _refundContent = new TextEditingController();
|
||||
|
||||
String hintText = '选填';
|
||||
|
||||
Container _containerContentList(List<Map<String, dynamic>> listContent) {
|
||||
return Container(
|
||||
child: Column(
|
||||
children: listContent
|
||||
.map((item) => RefundShopCard(
|
||||
imagePath: item['imagePath'],
|
||||
content: item['content'],
|
||||
specs: item['specs'],
|
||||
))
|
||||
.toList(),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Container _containerRefundPrice(double payPrice) {
|
||||
return Container(
|
||||
padding: EdgeInsets.only(
|
||||
top: 22.w,
|
||||
left: 32.w,
|
||||
right: 32.w,
|
||||
),
|
||||
color: Colors.white,
|
||||
child: Container(
|
||||
padding: EdgeInsets.only(bottom: 26.w),
|
||||
decoration: BoxDecoration(
|
||||
border: Border(
|
||||
bottom: BorderSide(color: BaseStyle.coloreeeeee, width: 0.5)),
|
||||
),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(
|
||||
'退款金额',
|
||||
style: TextStyle(
|
||||
fontSize: BaseStyle.fontSize34,
|
||||
color: ktextPrimary,
|
||||
),
|
||||
),
|
||||
Text(
|
||||
'¥$payPrice',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w600,
|
||||
fontSize: BaseStyle.fontSize32,
|
||||
color: BaseStyle.colorff8500,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Container _containerRefundTextField() {
|
||||
return Container(
|
||||
padding: EdgeInsets.only(
|
||||
top: 22.w,
|
||||
left: 32.w,
|
||||
right: 32.w,
|
||||
),
|
||||
color: Colors.white,
|
||||
child: Container(
|
||||
padding: EdgeInsets.only(bottom: 26.w),
|
||||
decoration: BoxDecoration(
|
||||
border: Border(
|
||||
bottom: BorderSide(color: BaseStyle.coloreeeeee, width: 0.5)),
|
||||
),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
'退款说明',
|
||||
style: TextStyle(
|
||||
fontSize: BaseStyle.fontSize34,
|
||||
color: ktextPrimary,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 23.w),
|
||||
TextFormField(
|
||||
cursorColor: Color(0xffffc40c),
|
||||
style: TextStyle(
|
||||
fontSize: BaseStyle.fontSize34,
|
||||
),
|
||||
controller: _refundContent,
|
||||
onChanged: (String value) {},
|
||||
maxLines: 1,
|
||||
decoration: InputDecoration(
|
||||
isDense: true,
|
||||
contentPadding: EdgeInsets.only(
|
||||
top: 0.w,
|
||||
bottom: 0.w,
|
||||
),
|
||||
hintText: hintText,
|
||||
border: InputBorder.none, //去掉输入框的下滑线
|
||||
fillColor: Colors.white,
|
||||
filled: true,
|
||||
hintStyle: TextStyle(
|
||||
color: BaseStyle.color999999,
|
||||
fontSize: BaseStyle.fontSize28,
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
InkWell _inkWellBottom() {
|
||||
return InkWell(
|
||||
onTap: () {},
|
||||
child: Container(
|
||||
alignment: Alignment.center,
|
||||
color: BaseStyle.colorffc40c,
|
||||
padding: EdgeInsets.symmetric(
|
||||
vertical: 26.5.w,
|
||||
),
|
||||
child: Text(
|
||||
'提交',
|
||||
style: TextStyle(
|
||||
fontSize: BaseStyle.fontSize32,
|
||||
color: ktextPrimary,
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
double _statusHeight = MediaQuery.of(context).padding.top;
|
||||
List<Map<String, dynamic>> _listTile = [
|
||||
{'title': '退款原因', 'subtitle': '请选择', 'fun': null, 'isRight': true},
|
||||
{'title': '退款方式', 'subtitle': '物业上门取件', 'fun': null, 'isRight': false}
|
||||
];
|
||||
return BeeScaffold(
|
||||
title: '申请退款',
|
||||
leading: IconButton(
|
||||
icon: Icon(AntDesign.left, size: 40.sp),
|
||||
onPressed: () {
|
||||
Get.back();
|
||||
},
|
||||
),
|
||||
body: SingleChildScrollView(
|
||||
child: Container(
|
||||
height: MediaQuery.of(context).size.height -
|
||||
kToolbarHeight -
|
||||
_statusHeight,
|
||||
child: GestureDetector(
|
||||
behavior: HitTestBehavior.opaque,
|
||||
onTap: () {
|
||||
FocusScope.of(context).requestFocus(FocusNode());
|
||||
},
|
||||
child: Stack(
|
||||
children: [
|
||||
Column(
|
||||
children: [
|
||||
SizedBox(height: 24.w),
|
||||
_containerContentList(
|
||||
widget.bundle.getMap('details')['listContent'],
|
||||
),
|
||||
SizedBox(height: 24.w),
|
||||
RefundTileCard(
|
||||
listTile:
|
||||
widget.bundle.getMap('details')['isRefundGood']
|
||||
? _listTile
|
||||
: _listTile.take(1).toList()),
|
||||
_containerRefundPrice(
|
||||
widget.bundle.getMap('details')['payPrice']),
|
||||
SizedBox(height: 24.w),
|
||||
_containerRefundTextField(),
|
||||
],
|
||||
),
|
||||
Positioned(
|
||||
bottom: 0,
|
||||
child: Container(
|
||||
alignment: Alignment.center,
|
||||
height: 98.w,
|
||||
width: MediaQuery.of(context).size.width,
|
||||
child: Row(children: [Expanded(child: _inkWellBottom())]),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,91 +0,0 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:flutter_icons/flutter_icons.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import 'package:akuCommunity/pages/personal/refund_apply_page.dart';
|
||||
import 'package:akuCommunity/routers/page_routers.dart';
|
||||
import 'package:akuCommunity/utils/headers.dart';
|
||||
import 'package:akuCommunity/widget/bee_scaffold.dart';
|
||||
import 'widget/refund_shop_card.dart';
|
||||
import 'widget/refund_tile_card.dart';
|
||||
|
||||
class RefundSelectPage extends StatefulWidget {
|
||||
final Bundle bundle;
|
||||
RefundSelectPage({Key key, this.bundle}) : super(key: key);
|
||||
|
||||
@override
|
||||
_RefundSelectPageState createState() => _RefundSelectPageState();
|
||||
}
|
||||
|
||||
class _RefundSelectPageState extends State<RefundSelectPage> {
|
||||
Container _containerContentList(List<Map<String, dynamic>> listContent) {
|
||||
return Container(
|
||||
child: Column(
|
||||
children: listContent
|
||||
.map((item) => RefundShopCard(
|
||||
imagePath: item['imagePath'],
|
||||
content: item['content'],
|
||||
specs: item['specs'],
|
||||
))
|
||||
.toList(),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
List<Map<String, dynamic>> _listTile = [
|
||||
{
|
||||
'title': '我要退款',
|
||||
'subtitle': '没有收到货,与物业协商直接退货',
|
||||
'fun': () {
|
||||
// RefundApplyPage(
|
||||
// bundle: Bundle()
|
||||
// ..putMap('details', {
|
||||
// 'listContent': widget.bundle.getMap('details')['listContent'],
|
||||
// 'payPrice': widget.bundle.getMap('details')['payPrice'],
|
||||
// 'isRefundGood': false
|
||||
// }),
|
||||
// );
|
||||
},
|
||||
'isRight': true
|
||||
},
|
||||
{
|
||||
'title': '我要退款退货',
|
||||
'subtitle': '已收到货,需要退还货物',
|
||||
'fun': () {
|
||||
// RefundApplyPage(
|
||||
// bundle: Bundle()
|
||||
// ..putMap('details', {
|
||||
// 'listContent': widget.bundle.getMap('details')['listContent'],
|
||||
// 'payPrice': widget.bundle.getMap('details')['payPrice'],
|
||||
// 'isRefundGood': true
|
||||
// }),
|
||||
// );
|
||||
},
|
||||
'isRight': true
|
||||
}
|
||||
];
|
||||
return BeeScaffold(
|
||||
leading: IconButton(
|
||||
icon: Icon(AntDesign.left, size: 40.sp),
|
||||
onPressed: () {
|
||||
Get.back();
|
||||
},
|
||||
),
|
||||
title: '选择服务类型',
|
||||
body: ListView(
|
||||
children: [
|
||||
SizedBox(height: 24.w),
|
||||
_containerContentList(
|
||||
widget.bundle.getMap('details')['listContent'],
|
||||
),
|
||||
SizedBox(height: 24.w),
|
||||
RefundTileCard(listTile: _listTile)
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,284 +0,0 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:akuCommunity/base/base_style.dart';
|
||||
import 'package:akuCommunity/pages/personal/evaluate_good_page.dart';
|
||||
import 'package:akuCommunity/pages/personal/look_logistics_page.dart';
|
||||
import 'package:akuCommunity/pages/personal/order_details_page.dart';
|
||||
import 'package:akuCommunity/routers/page_routers.dart';
|
||||
import 'package:akuCommunity/utils/headers.dart';
|
||||
|
||||
class OrderCard extends StatefulWidget {
|
||||
final String status;
|
||||
final double totalPrice, payPrice;
|
||||
final List<Map<String, dynamic>> listButton, listContent, listOrderDetail;
|
||||
OrderCard(
|
||||
{Key key,
|
||||
this.status,
|
||||
this.totalPrice,
|
||||
this.payPrice,
|
||||
this.listButton,
|
||||
this.listContent,
|
||||
this.listOrderDetail})
|
||||
: super(key: key);
|
||||
|
||||
@override
|
||||
_OrderCardState createState() => _OrderCardState();
|
||||
}
|
||||
|
||||
class _OrderCardState extends State<OrderCard> {
|
||||
Container _containerStatus(String status) {
|
||||
return Container(
|
||||
width: double.infinity,
|
||||
padding: EdgeInsets.only(bottom: 13.w),
|
||||
decoration: BoxDecoration(
|
||||
border:
|
||||
Border(bottom: BorderSide(color: Color(0xffd8d8d8), width: 0.5)),
|
||||
),
|
||||
child: Text(
|
||||
status,
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w600,
|
||||
fontSize: BaseStyle.fontSize28,
|
||||
color: ktextPrimary,
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Container _containerContent(
|
||||
String imagePath, content, specs, double price, int shopNum) {
|
||||
return Container(
|
||||
margin: EdgeInsets.only(top: 24.w),
|
||||
child: Stack(
|
||||
children: [
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
Image.asset(
|
||||
imagePath,
|
||||
height: 179.w,
|
||||
width: 173.w,
|
||||
fit: BoxFit.fill,
|
||||
),
|
||||
SizedBox(width: 24.w),
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Container(
|
||||
width: 262.w,
|
||||
child: Text(
|
||||
content,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
maxLines: 2,
|
||||
style: TextStyle(
|
||||
fontSize: BaseStyle.fontSize28,
|
||||
color: ktextPrimary,
|
||||
),
|
||||
),
|
||||
),
|
||||
SizedBox(height: 16.w),
|
||||
Text(
|
||||
specs,
|
||||
style: TextStyle(
|
||||
fontSize: BaseStyle.fontSize28,
|
||||
color: BaseStyle.color999999,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
Positioned(
|
||||
top: 0,
|
||||
right: 8.w,
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
crossAxisAlignment: CrossAxisAlignment.end,
|
||||
children: [
|
||||
Text(
|
||||
'¥$price',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w600,
|
||||
fontSize: BaseStyle.fontSize28,
|
||||
color: ktextPrimary,
|
||||
),
|
||||
),
|
||||
Text(
|
||||
'x$shopNum',
|
||||
style: TextStyle(
|
||||
fontSize: BaseStyle.fontSize28,
|
||||
color: BaseStyle.color999999,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Container _containerContentList(List<Map<String, dynamic>> listContent) {
|
||||
return Container(
|
||||
child: Column(
|
||||
children: listContent
|
||||
.map((item) => _containerContent(
|
||||
item['imagePath'],
|
||||
item['content'],
|
||||
item['specs'],
|
||||
item['price'],
|
||||
item['shopNum'],
|
||||
))
|
||||
.toList(),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Container _containerPayInfo(double totalPrice, payPrice) {
|
||||
return Container(
|
||||
margin: EdgeInsets.only(right: 8.w),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
children: [
|
||||
Text(
|
||||
'总价¥$totalPrice',
|
||||
style: TextStyle(
|
||||
fontSize: BaseStyle.fontSize28,
|
||||
color: BaseStyle.color999999,
|
||||
),
|
||||
),
|
||||
SizedBox(width: 16.w),
|
||||
Text(
|
||||
'实付款¥$payPrice',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w600,
|
||||
fontSize: BaseStyle.fontSize28,
|
||||
color: ktextPrimary,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
InkWell _inkWellButton(String buttonName) {
|
||||
Color buttonColor;
|
||||
switch (buttonName) {
|
||||
case '确认收货':
|
||||
case '评价':
|
||||
case '付款':
|
||||
buttonColor = BaseStyle.colorff8500;
|
||||
break;
|
||||
default:
|
||||
buttonColor = BaseStyle.color999999;
|
||||
}
|
||||
return InkWell(
|
||||
onTap: () {
|
||||
// switch (buttonName) {
|
||||
// case '评价':
|
||||
// EvaluateGoodPage(
|
||||
// bundle: Bundle()
|
||||
// ..putMap('details', {
|
||||
// 'listContent': widget.listContent,
|
||||
// }),
|
||||
// ).to;
|
||||
// break;
|
||||
// case '查看物流':
|
||||
// LookLogisticsPage().to;
|
||||
// break;
|
||||
// default:
|
||||
// }
|
||||
},
|
||||
child: Container(
|
||||
margin: EdgeInsets.only(left: 16.w),
|
||||
alignment: Alignment.center,
|
||||
width: 171.w,
|
||||
height: 60.w,
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.all(Radius.circular(30)),
|
||||
border: Border.all(color: buttonColor, width: 1),
|
||||
),
|
||||
child: Text(
|
||||
buttonName,
|
||||
style: TextStyle(
|
||||
fontSize: BaseStyle.fontSize28,
|
||||
color: buttonColor,
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Container _containerButtonList(List<Map<String, dynamic>> listButton) {
|
||||
return Container(
|
||||
margin: EdgeInsets.only(
|
||||
top: 42.w,
|
||||
right: 8.w,
|
||||
),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
children: listButton
|
||||
.map((item) => _inkWellButton(item['buttonName']))
|
||||
.toList(),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return InkWell(
|
||||
onTap: () {
|
||||
// OrderDetailsPage(
|
||||
// bundle: Bundle()
|
||||
// ..putMap('details', {
|
||||
// 'status': widget.status,
|
||||
// 'listContent': widget.listContent,
|
||||
// 'totalPrice': widget.totalPrice,
|
||||
// 'payPrice': widget.payPrice,
|
||||
// 'listButton': widget.listButton,
|
||||
// 'listOrderDetail': widget.listOrderDetail,
|
||||
// }),
|
||||
// ).to;
|
||||
},
|
||||
child: Container(
|
||||
decoration: BoxDecoration(
|
||||
color: Color(0xffffffff),
|
||||
borderRadius: BorderRadius.all(Radius.circular(4)),
|
||||
boxShadow: <BoxShadow>[
|
||||
BoxShadow(
|
||||
color: Colors.grey.withOpacity(0.1),
|
||||
offset: Offset(1, 1),
|
||||
blurRadius: 10.0),
|
||||
],
|
||||
),
|
||||
padding: EdgeInsets.only(
|
||||
top: 18.w,
|
||||
left: 20.w,
|
||||
right: 16.w,
|
||||
bottom: 42.w,
|
||||
),
|
||||
margin: EdgeInsets.only(
|
||||
top: 24.w,
|
||||
left: 32.w,
|
||||
right: 32.w,
|
||||
),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
_containerStatus(widget.status),
|
||||
_containerContentList(widget.listContent),
|
||||
_containerPayInfo(
|
||||
widget.totalPrice,
|
||||
widget.payPrice,
|
||||
),
|
||||
widget.listButton.length != 0
|
||||
? _containerButtonList(widget.listButton)
|
||||
: SizedBox(),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,168 +0,0 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'order_card.dart';
|
||||
|
||||
class OrderList extends StatefulWidget {
|
||||
OrderList({Key key}) : super(key: key);
|
||||
|
||||
@override
|
||||
_OrderListState createState() => _OrderListState();
|
||||
}
|
||||
|
||||
class _OrderListState extends State<OrderList>
|
||||
with AutomaticKeepAliveClientMixin {
|
||||
@override
|
||||
bool get wantKeepAlive => true;
|
||||
|
||||
List<Map<String, dynamic>> _listGood = [
|
||||
{
|
||||
'status': '卖家已发货',
|
||||
'listContent': <Map<String, dynamic>>[
|
||||
{
|
||||
'imagePath': 'assets/example/tz1.png',
|
||||
'content': '男士精致生活休闲全羊毛修身西装 全套…',
|
||||
'specs': 'S;深蓝色',
|
||||
'price': 1123.30,
|
||||
'shopNum': 1
|
||||
}
|
||||
],
|
||||
'totalPrice': 1123.30,
|
||||
'payPrice': 1123.30,
|
||||
'listButton': <Map<String, dynamic>>[
|
||||
{'buttonName': '查看物流'},
|
||||
{'buttonName': '确认收货'},
|
||||
],
|
||||
'listOrderDetail': <Map<String, dynamic>>[
|
||||
{'title': '订单编号', 'subtitle': '3569285692852983'},
|
||||
{'title': '创建时间', 'subtitle': '2020-07-23 10:45:12'},
|
||||
{'title': '付款时间', 'subtitle': '2020-07-23 10:48:10'},
|
||||
{'title': '发货时间', 'subtitle': '2020-07-24 11:21:58'},
|
||||
],
|
||||
},
|
||||
{
|
||||
'status': '交易成功',
|
||||
'listContent': <Map<String, dynamic>>[
|
||||
{
|
||||
'imagePath': 'assets/example/tz2.png',
|
||||
'content': '简约气质精致餐具共套 可拼装盘子 海…',
|
||||
'specs': '四件套;海豚样式',
|
||||
'price': 459.90,
|
||||
'shopNum': 1
|
||||
}
|
||||
],
|
||||
'totalPrice': 459.90,
|
||||
'payPrice': 459.90,
|
||||
'listButton': <Map<String, dynamic>>[
|
||||
{'buttonName': '查看物流'},
|
||||
{'buttonName': '申请售后'},
|
||||
{'buttonName': '评价'},
|
||||
],
|
||||
'listOrderDetail': <Map<String, dynamic>>[
|
||||
{'title': '订单编号', 'subtitle': '3569285692852983'},
|
||||
{'title': '创建时间', 'subtitle': '2020-07-23 10:45:12'},
|
||||
{'title': '付款时间', 'subtitle': '2020-07-23 10:48:10'},
|
||||
{'title': '发货时间', 'subtitle': '2020-07-24 11:21:58'},
|
||||
],
|
||||
},
|
||||
{
|
||||
'status': '等待买家付款',
|
||||
'listContent': <Map<String, dynamic>>[
|
||||
{
|
||||
'imagePath': 'assets/example/tz3.png',
|
||||
'content': 'ichoo冷淡风白衬衫七分慵懒风 百搭衬衫…',
|
||||
'specs': '白色;S',
|
||||
'price': 249.00,
|
||||
'shopNum': 1
|
||||
}
|
||||
],
|
||||
'totalPrice': 249.00,
|
||||
'payPrice': 249.00,
|
||||
'listButton': <Map<String, dynamic>>[
|
||||
{'buttonName': '修改地址'},
|
||||
{'buttonName': '付款'},
|
||||
],
|
||||
'listOrderDetail': <Map<String, dynamic>>[
|
||||
{'title': '订单编号', 'subtitle': '3569285692852983'},
|
||||
{'title': '创建时间', 'subtitle': '2020-07-23 10:45:12'},
|
||||
],
|
||||
},
|
||||
{
|
||||
'status': '买家已付款',
|
||||
'listContent': <Map<String, dynamic>>[
|
||||
{
|
||||
'imagePath': 'assets/example/tz1.png',
|
||||
'content': '设计款不规则高弹力小吊带显瘦修身 搭配简…',
|
||||
'specs': '白色;S',
|
||||
'price': 99.90,
|
||||
'shopNum': 1
|
||||
}
|
||||
],
|
||||
'totalPrice': 99.90,
|
||||
'payPrice': 99.90,
|
||||
'listButton': <Map<String, dynamic>>[],
|
||||
'listOrderDetail': <Map<String, dynamic>>[
|
||||
{'title': '订单编号', 'subtitle': '3569285692852983'},
|
||||
{'title': '创建时间', 'subtitle': '2020-07-23 10:45:12'},
|
||||
{'title': '付款时间', 'subtitle': '2020-07-23 10:48:10'},
|
||||
],
|
||||
},
|
||||
{
|
||||
'status': '退款中',
|
||||
'listContent': <Map<String, dynamic>>[
|
||||
{
|
||||
'imagePath': 'assets/example/tz3.png',
|
||||
'content': '冠军体恤 正版 显瘦修身宽松',
|
||||
'specs': '白色;S',
|
||||
'price': 99.90,
|
||||
'shopNum': 1
|
||||
}
|
||||
],
|
||||
'totalPrice': 99.90,
|
||||
'payPrice': 99.90,
|
||||
'listButton': <Map<String, dynamic>>[],
|
||||
'listOrderDetail': <Map<String, dynamic>>[
|
||||
{'title': '订单编号', 'subtitle': '3569285692852983'},
|
||||
{'title': '创建时间', 'subtitle': '2020-07-23 10:45:12'},
|
||||
{'title': '付款时间', 'subtitle': '2020-07-23 10:48:10'},
|
||||
{'title': '发货时间', 'subtitle': '2020-07-24 11:21:58'},
|
||||
],
|
||||
}
|
||||
];
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
}
|
||||
|
||||
void _onRefresh() async {
|
||||
await Future.delayed(Duration(milliseconds: 1500));
|
||||
}
|
||||
|
||||
void _onLoading() async {
|
||||
await Future.delayed(Duration(milliseconds: 1500));
|
||||
|
||||
if (mounted) setState(() {});
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
super.build(context);
|
||||
return ListView.builder(
|
||||
itemBuilder: (context, index) => OrderCard(
|
||||
status: _listGood[index]['status'],
|
||||
totalPrice: _listGood[index]['totalPrice'],
|
||||
payPrice: _listGood[index]['payPrice'],
|
||||
listContent: _listGood[index]['listContent'],
|
||||
listButton: _listGood[index]['listButton'],
|
||||
listOrderDetail: _listGood[index]['listOrderDetail'],
|
||||
),
|
||||
itemCount: _listGood.length,
|
||||
);
|
||||
}
|
||||
}
|
@ -1,238 +0,0 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:flutter_icons/flutter_icons.dart';
|
||||
import 'package:flutter_rating_bar/flutter_rating_bar.dart';
|
||||
|
||||
import 'package:akuCommunity/base/base_style.dart';
|
||||
import 'package:akuCommunity/routers/page_routers.dart';
|
||||
import 'package:akuCommunity/utils/headers.dart';
|
||||
import 'package:akuCommunity/widget/bee_scaffold.dart';
|
||||
|
||||
class ThingsEvaluatePage extends StatefulWidget {
|
||||
final Bundle bundle;
|
||||
ThingsEvaluatePage({Key key, this.bundle}) : super(key: key);
|
||||
|
||||
@override
|
||||
_ThingsEvaluatePageState createState() => _ThingsEvaluatePageState();
|
||||
}
|
||||
|
||||
class _ThingsEvaluatePageState extends State<ThingsEvaluatePage> {
|
||||
var rating = 0.0;
|
||||
|
||||
TextEditingController _proposeContent = new TextEditingController();
|
||||
|
||||
String hintText = '您对我们的工作有什么建议吗?欢迎您提供给我们宝贵的建议,谢谢';
|
||||
|
||||
Container _containerEvaluateCard() {
|
||||
return Container(
|
||||
decoration: BoxDecoration(
|
||||
color: Color(0xffffffff),
|
||||
borderRadius: BorderRadius.all(Radius.circular(8)),
|
||||
),
|
||||
padding: EdgeInsets.only(
|
||||
top: 27.w,
|
||||
bottom: 52.w,
|
||||
),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
'请您对本次服务进行评价',
|
||||
style: TextStyle(fontSize: 28.sp, color: Color(0xff999999)),
|
||||
),
|
||||
SizedBox(height: 50.w),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
'综合评价',
|
||||
style: TextStyle(fontSize: 28.sp, color: Color(0xff999999)),
|
||||
),
|
||||
SizedBox(width: 47.w),
|
||||
RatingBar(
|
||||
ignoreGestures: false,
|
||||
itemSize: 46.w,
|
||||
// filledIconData: AntDesign.star,
|
||||
// // halfFilledIconData: Icons.star_half,
|
||||
// defaultIconData: AntDesign.staro,
|
||||
// color: Color(0xffffc40c),
|
||||
// borderColor: Color(0xffffc40c),
|
||||
ratingWidget: RatingWidget(
|
||||
full: Icon(
|
||||
AntDesign.star,
|
||||
color: kPrimaryColor,
|
||||
),
|
||||
empty: Icon(
|
||||
AntDesign.staro,
|
||||
color: kDarkPrimaryColor,
|
||||
),
|
||||
half: Icon(Icons.star_half)),
|
||||
itemCount: 5,
|
||||
allowHalfRating: false,
|
||||
itemPadding: EdgeInsets.symmetric(horizontal: 10.w),
|
||||
onRatingUpdate: (value) {
|
||||
print("rating value -> $value");
|
||||
// print("rating value dd -> ${value.truncate()}");
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Container _containerTextField(String hintText) {
|
||||
return Container(
|
||||
padding: EdgeInsets.only(top: 32.w, left: 22.w, right: 35.w),
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.all(Radius.circular(8)),
|
||||
border: Border.all(color: Color(0xffd4cfbe), width: 1.0),
|
||||
),
|
||||
child: TextFormField(
|
||||
cursorColor: Color(0xffffc40c),
|
||||
style: TextStyle(
|
||||
fontSize: 28.sp,
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
controller: _proposeContent,
|
||||
onChanged: (String value) {},
|
||||
maxLines: 8,
|
||||
decoration: InputDecoration(
|
||||
isDense: true,
|
||||
contentPadding: EdgeInsets.only(
|
||||
top: 0.w,
|
||||
bottom: 0.w,
|
||||
),
|
||||
hintText: hintText,
|
||||
border: InputBorder.none, //去掉输入框的下滑线
|
||||
fillColor: Colors.white,
|
||||
filled: true,
|
||||
hintStyle: TextStyle(
|
||||
color: Color(0xff999999),
|
||||
fontSize: 28.sp,
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
InkWell _inkWellButton(String title) {
|
||||
return InkWell(
|
||||
child: Container(
|
||||
alignment: Alignment.center,
|
||||
height: 96.w,
|
||||
margin: EdgeInsets.symmetric(horizontal: 32.w),
|
||||
padding: EdgeInsets.symmetric(vertical: 25.5.w),
|
||||
decoration: BoxDecoration(
|
||||
color: Color(0xffffc40c),
|
||||
borderRadius: BorderRadius.all(Radius.circular(48)),
|
||||
),
|
||||
child: Text(
|
||||
title,
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w600,
|
||||
fontSize: 32.sp,
|
||||
color: Color(0xff333333),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return BeeScaffold(
|
||||
title: '${widget.bundle.getMap('details')['title']}',
|
||||
body: SingleChildScrollView(
|
||||
child: Container(
|
||||
color: Colors.white,
|
||||
child: GestureDetector(
|
||||
behavior: HitTestBehavior.opaque,
|
||||
onTap: () {
|
||||
FocusScope.of(context).requestFocus(FocusNode());
|
||||
},
|
||||
child: Container(
|
||||
padding: EdgeInsets.symmetric(
|
||||
horizontal: 32.w,
|
||||
vertical: 36.w,
|
||||
),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
widget.bundle.getMap('details')['isShow']
|
||||
? _containerEvaluateCard()
|
||||
: SizedBox(),
|
||||
widget.bundle.getMap('details')['isShow']
|
||||
? SizedBox()
|
||||
: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
'请输入内容',
|
||||
style: TextStyle(
|
||||
fontSize: 28.sp, color: Color(0xff333333)),
|
||||
),
|
||||
SizedBox(height: 24.w),
|
||||
_containerTextField(hintText),
|
||||
SizedBox(height: 42.w),
|
||||
],
|
||||
),
|
||||
_inkWellButton('确认提交'),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
// return widget.isAlone
|
||||
// ? Container(
|
||||
// child: Column(
|
||||
// children: [
|
||||
// _containerEvaluateCard(),
|
||||
// SizedBox(height: 42.w),
|
||||
// _inkWellButton('确认'),
|
||||
// ],
|
||||
// ),
|
||||
// )
|
||||
// : SingleChildScrollView(
|
||||
// child: Container(
|
||||
// height: MediaQuery.of(context).size.height -
|
||||
// kToolbarHeight -
|
||||
// widget.statusHeight,
|
||||
// color: Colors.white,
|
||||
// child: GestureDetector(
|
||||
// behavior: HitTestBehavior.opaque,
|
||||
// onTap: () {
|
||||
// FocusScope.of(context).requestFocus(FocusNode());
|
||||
// },
|
||||
// child: Container(
|
||||
// padding: EdgeInsets.symmetric(
|
||||
// horizontal: 32.w,
|
||||
// vertical: 36.w,
|
||||
// ),
|
||||
// child: Column(
|
||||
// crossAxisAlignment: CrossAxisAlignment.start,
|
||||
// children: [
|
||||
// widget.isPropose ? SizedBox() : _containerEvaluateCard(),
|
||||
// Text(
|
||||
// '请输入内容',
|
||||
// style: TextStyle(
|
||||
// fontSize: 28.sp,
|
||||
// color: Color(0xff333333)),
|
||||
// ),
|
||||
// SizedBox(height: 24.w),
|
||||
// _containerTextField(hintText),
|
||||
// SizedBox(height: 42.w),
|
||||
// _inkWellButton(widget.isPropose ? '确认提交' : '发布'),
|
||||
// ],
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
// );
|
||||
}
|
||||
}
|
@ -1,35 +0,0 @@
|
||||
//TODO CLEAN BOTTOM CODES.
|
||||
@Deprecated("sh*t page_routers need to be cleaned.")
|
||||
class Bundle {
|
||||
Map<String, dynamic> _map = {};
|
||||
|
||||
_setValue(var k, var v) => _map[k] = v;
|
||||
|
||||
_getValue(String k) {
|
||||
if (!_map.containsKey(k)) {
|
||||
throw Exception("你使用的$k\在payload不存在,请检查你的key名字是否正确,或者确定key是否存在payload");
|
||||
}
|
||||
return _map[k];
|
||||
}
|
||||
|
||||
putString(String k, String v) => _setValue(k, v);
|
||||
|
||||
putBool(String k, bool v) => _setValue(k, v);
|
||||
|
||||
putList<V>(String k, List<V> v) => _setValue(k, v);
|
||||
|
||||
putMap<K, V>(String k, Map<K, V> v) => _setValue(k, v);
|
||||
|
||||
int getInt(String k) => _getValue(k) as int;
|
||||
|
||||
String getString(String k) => _getValue(k) as String;
|
||||
|
||||
bool getBool(String k) => _getValue(k) as bool;
|
||||
|
||||
Map getMap(String k) => _getValue(k) as Map;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return _map.toString();
|
||||
}
|
||||
}
|
@ -1,60 +0,0 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:akuCommunity/pages/market/market_cart_page/market_cart_page.dart';
|
||||
import 'package:akuCommunity/pages/market_class/market_class_page.dart';
|
||||
import 'package:akuCommunity/pages/message_center_page/message_center_page.dart';
|
||||
import 'package:akuCommunity/utils/headers.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
class AppBarAction extends StatefulWidget {
|
||||
final IconData icon;
|
||||
final String title;
|
||||
AppBarAction({Key key, this.icon, this.title}) : super(key: key);
|
||||
|
||||
@override
|
||||
_AppBarActionState createState() => _AppBarActionState();
|
||||
}
|
||||
|
||||
class _AppBarActionState extends State<AppBarAction> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
margin: EdgeInsets.only(right: 32.w),
|
||||
child: InkWell(
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Icon(
|
||||
widget.icon,
|
||||
color: Color(0xff333333),
|
||||
),
|
||||
SizedBox(height: 4.w),
|
||||
Text(
|
||||
widget.title,
|
||||
style: TextStyle(
|
||||
fontSize: 20.sp,
|
||||
color: Color(0xff333333),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
onTap: () {
|
||||
switch (widget.title) {
|
||||
case '扫一扫':
|
||||
break;
|
||||
case '消息':
|
||||
Get.to(() => MessageCenterPage());
|
||||
break;
|
||||
case '购物车':
|
||||
Get.to(() => MarketCartPage());
|
||||
break;
|
||||
case '分类':
|
||||
Get.to(() => MarketClassPage());
|
||||
break;
|
||||
default:
|
||||
}
|
||||
}),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,147 +0,0 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:akuCommunity/model/aku_shop_model.dart';
|
||||
import 'package:akuCommunity/pages/goods_details/goods_details_page.dart';
|
||||
import 'package:akuCommunity/routers/page_routers.dart';
|
||||
import 'package:akuCommunity/utils/headers.dart';
|
||||
import 'package:akuCommunity/widget/cached_image_wrapper.dart';
|
||||
|
||||
class SliverGoodsCard extends StatelessWidget {
|
||||
final bool isShow;
|
||||
final List<AkuShopModel> shoplist;
|
||||
const SliverGoodsCard({Key key, this.isShow = false, this.shoplist})
|
||||
: super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return SliverGrid(
|
||||
delegate: SliverChildBuilderDelegate(
|
||||
(BuildContext context, int index) {
|
||||
return InkWell(
|
||||
onTap: () {
|
||||
GoodsDetailsPage(
|
||||
bundle: Bundle()
|
||||
..putString(
|
||||
'shoplist', json.encode(shoplist[index]).toString()),
|
||||
);
|
||||
},
|
||||
child: Container(
|
||||
color: Colors.white,
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: <Widget>[
|
||||
Stack(
|
||||
children: [
|
||||
Container(
|
||||
child: CachedImageWrapper(
|
||||
url: shoplist[index].itempic,
|
||||
width: 333.w,
|
||||
height: 344.w,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
Padding(
|
||||
padding: EdgeInsets.only(
|
||||
left: 12.w,
|
||||
right: 25.w,
|
||||
top: 20.w,
|
||||
),
|
||||
child: Container(
|
||||
width: 296.w,
|
||||
child: Text(
|
||||
shoplist[index].itemtitle,
|
||||
maxLines: 2,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
style: TextStyle(
|
||||
fontSize: 24.sp,
|
||||
color: Color(0xff4a4b51),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
Container(
|
||||
margin: EdgeInsets.only(
|
||||
top: 20.w,
|
||||
left: 12.w,
|
||||
right: 8.w,
|
||||
bottom: 17.w,
|
||||
),
|
||||
child: Row(
|
||||
mainAxisAlignment: isShow
|
||||
? MainAxisAlignment.start
|
||||
: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Container(
|
||||
margin: EdgeInsets.only(right: 8.w),
|
||||
child: Text(
|
||||
'¥${shoplist[index].itemprice}',
|
||||
style: TextStyle(
|
||||
color: Color(0xffe60e0e),
|
||||
fontSize: 28.sp,
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
),
|
||||
),
|
||||
isShow
|
||||
? Text(
|
||||
'${shoplist[index].itemsale}人已付款',
|
||||
style: TextStyle(
|
||||
color: Color(0xff999999),
|
||||
fontSize: 20.w,
|
||||
),
|
||||
)
|
||||
: InkWell(
|
||||
onTap: () {
|
||||
GoodsDetailsPage(
|
||||
bundle: Bundle()
|
||||
..putString(
|
||||
'shoplist',
|
||||
json
|
||||
.encode(shoplist[index])
|
||||
.toString()),
|
||||
);
|
||||
},
|
||||
child: Container(
|
||||
width: 134.w,
|
||||
alignment: Alignment.center,
|
||||
padding: EdgeInsets.only(
|
||||
top: 6.w,
|
||||
bottom: 5.w,
|
||||
),
|
||||
decoration: BoxDecoration(
|
||||
color: Color(0xffffc40c),
|
||||
borderRadius:
|
||||
BorderRadius.all(Radius.circular(20.w)),
|
||||
),
|
||||
child: Text(
|
||||
'立即购买',
|
||||
style: TextStyle(
|
||||
fontSize: 24.sp,
|
||||
color: Color(0xff333333),
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
childCount: shoplist.length,
|
||||
),
|
||||
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
|
||||
crossAxisCount: 2,
|
||||
mainAxisSpacing: 30.w,
|
||||
crossAxisSpacing: 20.w,
|
||||
childAspectRatio: 343.w / 539.w),
|
||||
);
|
||||
}
|
||||
}
|
Loading…
Reference in new issue