Commit 7d57d9f74f7f462dd14e2713f3213ed62dead809

Authored by wdn127929
1 parent b2a53782

部分店铺信息UI

import 'dart:io';
import 'dart:ui';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:dio/dio.dart';
... ... @@ -21,8 +22,10 @@ import 'package:one_key/utils/event_bus.dart';
import 'package:one_key/utils/upload_image_util.dart';
import 'package:one_key/utils/utils.dart';
import 'package:one_key/widgets/h_empty_view.dart';
import 'package:one_key/widgets/max_word_textinput_formater.dart';
import 'package:one_key/widgets/round_button.dart';
import 'package:one_key/widgets/system_app_bar.dart';
import 'package:one_key/widgets/text_input_field_widget.dart';
import 'package:one_key/widgets/v_empty_view.dart';
import 'package:image_picker/image_picker.dart';
import 'package:permission_handler/permission_handler.dart';
... ... @@ -47,6 +50,8 @@ class _StoreBaseInfoPageState extends State<StoreBaseInfoPage> {
FocusNode _timeFocusNode = FocusNode();
FocusNode _addressFocusNode = FocusNode();
FocusNode _introductionFocusNode = FocusNode();
TextEditingController _phoneController2 = TextEditingController();
FocusNode _phoneFocusNode2 = FocusNode();
Map<String, dynamic> mapAddress;
... ... @@ -54,6 +59,11 @@ class _StoreBaseInfoPageState extends State<StoreBaseInfoPage> {
UploadImageProvider _uploadImageProvider;
StoreBaseIndoProvider _baseIndoProvider;
int _countName = 0;
final int maxWordLengthName = 15;
int _countAddress = 0;
final int maxWordLengthAddress = 30;
@override
void initState() {
super.initState();
... ... @@ -62,11 +72,12 @@ class _StoreBaseInfoPageState extends State<StoreBaseInfoPage> {
'lat': '',
'lng': '',
};
Utils.changeStatusColor(color: MyColours.color_F8F9FD);
_scrollController = ScrollController();
WidgetsBinding.instance.addPostFrameCallback((_) {
_uploadImageProvider.mentou.process = 0.01;
_uploadImageProvider.mentou.qiniuUrl = '';
_uploadImageProvider.imgSizeMenTou = 64;
// _uploadImageProvider.mentou.file = null;
_getQiniuInfo();
_getStoreBaseinfo();
... ... @@ -85,6 +96,8 @@ class _StoreBaseInfoPageState extends State<StoreBaseInfoPage> {
_introductionController.text = itemModel.data.sellerdesc;
_uploadImageProvider.mentou.qiniuUrl = itemModel.data.sellerImage;
// _uploadImageProvider.notifyListeners();
_countName = _nameController.text.trim().length;
_countAddress = _addressController.text.trim().length;
mapAddress = {
"address": itemModel.data.mapAddress,
'lat': itemModel.data.lat,
... ... @@ -271,7 +284,6 @@ class _StoreBaseInfoPageState extends State<StoreBaseInfoPage> {
}
});
if (pickedFile != null) {
_uploadImageProvider.imgSizeMenTou = 64;
_uploadImageProvider.mentou.qiniuUrl = null;
_uploadImageProvider.mentou.file = File(pickedFile.path);
_uploadImageProvider.mentou.path = pickedFile.path;
... ... @@ -439,6 +451,33 @@ class _StoreBaseInfoPageState extends State<StoreBaseInfoPage> {
);
}
Widget _buildCompute(int count, int max) {
return RichText(
text: TextSpan(
style: TextStyle(
fontSize: ScreenUtil().setSp(24),
color: MyColours.color_BFC4D4),
children: [
// const TextSpan(text: '('),
TextSpan(
text: count.toString(),
style: TextStyle(color: MyColours.color_BFC4D4)),
TextSpan(text: "/${max.toString()}"),
]));
}
void chageCount(int count) {
setState(() {
_countName = count;
});
}
void chageCountAddress(int count) {
setState(() {
_countAddress = count;
});
}
@override
Widget build(BuildContext context) {
_uploadImageProvider =
... ... @@ -446,9 +485,10 @@ class _StoreBaseInfoPageState extends State<StoreBaseInfoPage> {
_baseIndoProvider =
Provider.of<StoreBaseIndoProvider>(context, listen: true);
return Scaffold(
backgroundColor: MyColours.color_fefefe,
backgroundColor: MyColours.color_F8F9FD,
appBar: SystemAppBar(
'店铺信息',
bgColor: MyColours.color_F8F9FD,
onTap: () {
EventBus().emit('changeStatusColor');
Navigator.of(context).pop();
... ... @@ -463,123 +503,1038 @@ class _StoreBaseInfoPageState extends State<StoreBaseInfoPage> {
onTap: () {
FocusScope.of(context).requestFocus(FocusNode()); //点击空白处隐藏键盘
},
child: Column(children: [
Expanded(
child: SingleChildScrollView(
controller: _scrollController,
physics: BouncingScrollPhysics(),
child: Column(
children: [
Padding(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(40),
child: Container(
color: MyColours.color_F8F9FD,
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(24)),
child: Column(children: [
Expanded(
child: SingleChildScrollView(
controller: _scrollController,
physics: BouncingScrollPhysics(),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
VEmptyView(60),
Text(
'门头照片',
textAlign: TextAlign.left,
style: TextStyle(
color: MyColours.color_515151,
fontWeight: FontWeight.bold,
fontSize: ScreenUtil().setSp(32)),
),
child: _textfield('店铺名称', '请填写店铺名称',
_nameController, _nameFocusNode)),
VEmptyView(10),
_imageWidget('门头照片', _uploadImageProvider.mentou,
_uploadImageProvider.imgSizeMenTou, 64),
VEmptyView(30),
Container(
height: ScreenUtil().setWidth(2),
color: MyColours.color_efefef,
margin: EdgeInsets.only(
left: ScreenUtil().setWidth(108 * 2),
right: ScreenUtil().setWidth(40)),
),
VEmptyView(10),
Padding(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(40),
VEmptyView(34),
InkWell(
onTap: () {
double process;
String qiniuUrl;
List<String> tempList = [];
process =
_uploadImageProvider.mentou.process;
qiniuUrl =
_uploadImageProvider.mentou.qiniuUrl;
if (qiniuUrl != null && qiniuUrl != '') {
tempList.add(qiniuUrl);
///没有上传完成的不可以点击
_showPhotoView(context, 0, tempList);
} else {
Utils.getPickPermission(context, () {
_getFromPictureOrCamera(
'门头照片',
_uploadImageProvider.mentou,
ImageSource.gallery);
},
Platform.isAndroid
? Permission.storage
: Permission.photos);
}
},
child: Center(
// alignment: Alignment.center,
child: Container(
width: ScreenUtil().setWidth(76 * 2),
height: ScreenUtil().setWidth(76 * 2),
decoration: BoxDecoration(
boxShadow: [
// BoxShadow(
// color: Color.fromRGBO(0, 0, 0, 0.4),
// offset: Offset(0, ScreenUtil().setWidth(8)),
// spreadRadius: ScreenUtil().setWidth(2),
// blurRadius: ScreenUtil().setWidth(34))
BoxShadow(
color: Color.fromRGBO(
0, 0, 0, 0.25),
offset: Offset(0,
ScreenUtil().setWidth(6)),
blurRadius:
ScreenUtil().setWidth(18),
spreadRadius:
ScreenUtil().setWidth(2))
],
borderRadius: BorderRadius.circular(
ScreenUtil().setWidth(44)),
),
child: Stack(
clipBehavior: Clip.none,
children: [
ClipRRect(
borderRadius:
BorderRadius.circular(
ScreenUtil()
.setWidth(44)),
child: _uploadImageProvider
.mentou.file ==
null
? _uploadImageProvider
.mentou
.qiniuUrl !=
null &&
_uploadImageProvider
.mentou
.qiniuUrl !=
''
? Image.network(
_uploadImageProvider
.mentou
.qiniuUrl,
fit: BoxFit.cover,
width: ScreenUtil()
.setWidth(
76 * 2),
height: ScreenUtil()
.setWidth(
76 * 2),
)
: Container(
width: ScreenUtil()
.setWidth(
76 * 2),
height: ScreenUtil()
.setWidth(
76 * 2),
padding: EdgeInsets
.all(ScreenUtil()
.setWidth(
32)),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(
ScreenUtil()
.setWidth(
44)),
color: MyColours
.color_DBDBDB),
child: Image.asset(
Utils.getImgPath(
'store_no_image'),
fit: BoxFit.cover,
width: ScreenUtil()
.setWidth(
44 * 2),
height:
ScreenUtil()
.setWidth(
44 *
2),
),
)
: Image.file(
_uploadImageProvider
.mentou.file,
fit: BoxFit.cover,
width: ScreenUtil()
.setWidth(76 * 2),
height: ScreenUtil()
.setWidth(76 * 2),
)),
(_uploadImageProvider.mentou.file !=
null) &&
_uploadImageProvider
.mentou.process !=
1 &&
_uploadImageProvider
.mentou.process !=
0.01
? Container(
width: ScreenUtil()
.setWidth(76 * 2),
height: ScreenUtil()
.setWidth(76 * 2),
decoration: BoxDecoration(
borderRadius:
BorderRadius.circular(
ScreenUtil()
.setWidth(
44)),
color: Color.fromRGBO(
0, 0, 0, 0.6)),
child: Center(
child: Text('上传中',
style: TextStyle(
color: MyColours
.color_999999)),
),
)
: Container(),
Positioned(
bottom:
ScreenUtil().setWidth(-6),
right:
ScreenUtil().setWidth(-6),
child: InkWell(
onTap: () {
Utils.getPickPermission(
context, () {
_getFromPictureOrCamera(
'门头照片',
_uploadImageProvider
.mentou,
ImageSource.gallery);
},
Platform.isAndroid
? Permission.storage
: Permission
.photos);
},
child: Image.asset(
Utils.getImgPath(
'store_upload'),
fit: BoxFit.cover,
width: ScreenUtil()
.setWidth(28 * 2),
height: ScreenUtil()
.setWidth(28 * 2),
),
))
],
)),
),
),
child: _textfield('店铺电话', '请填写店铺电话',
_phoneController, _phoneFocusNode)),
VEmptyView(10),
Container(
height: ScreenUtil().setWidth(2),
color: MyColours.color_efefef,
margin: EdgeInsets.only(
left: ScreenUtil().setWidth(108 * 2),
right: ScreenUtil().setWidth(40)),
),
VEmptyView(10),
Padding(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(40),
VEmptyView(76),
RichText(
text: TextSpan(
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: ScreenUtil().setSp(32)),
children: [
// const TextSpan(text: '('),
TextSpan(
text: '店铺名称',
style: TextStyle(
color: MyColours.color_515151)),
TextSpan(
text: '*',
style: TextStyle(
color: MyColours.color_E34D59)),
])),
VEmptyView(24),
Container(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(24)),
decoration: BoxDecoration(
color: MyColours.color_ffffff,
borderRadius: BorderRadius.circular(
ScreenUtil().setWidth(26))),
child: Row(
children: [
Expanded(
child: TextInputFieldWidget(
textInputFormatters: [
// FilteringTextInputFormatter.allow(
// RegExp(r"[a-z\s_-]+")),
MaxWordTextInputFormater(
maxWords: 15,
currentLength: chageCount)
],
hasFocusColor: MyColours.color_515151,
hitColor: MyColours.color_BFC4D4,
hintText: "请输入店铺名称",
maxLines: 1,
lineHeight: 1,
fontSize: ScreenUtil().setSp(24),
textEditingController:
_nameController,
focusNode: _nameFocusNode,
)),
_buildCompute(
_countName, maxWordLengthName),
],
)),
VEmptyView(106),
Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
RichText(
text: TextSpan(
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize:
ScreenUtil().setSp(32)),
children: [
// const TextSpan(text: '('),
TextSpan(
text: '店铺电话',
style: TextStyle(
color:
MyColours.color_515151)),
TextSpan(
text: '*',
style: TextStyle(
color:
MyColours.color_E34D59)),
])),
Padding(
padding: EdgeInsets.only(
right: ScreenUtil().setWidth(26)),
child: Image.asset(
Utils.getImgPath('stoore_add'),
width: ScreenUtil().setWidth(44)))
],
),
child: _textfield(
'营业时间',
'请填写营业时间,如09:00-23:00',
_timeController,
_timeFocusNode)),
VEmptyView(10),
Container(
height: ScreenUtil().setWidth(2),
color: MyColours.color_efefef,
margin: EdgeInsets.only(
left: ScreenUtil().setWidth(108 * 2),
right: ScreenUtil().setWidth(40)),
),
VEmptyView(10),
Padding(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(40),
vertical: ScreenUtil().setWidth(40),
VEmptyView(44),
Padding(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(26)),
child: Row(
children: [
Text('电话1:',
style: TextStyle(
fontSize:
ScreenUtil().setSp(28),
color: MyColours.color_999999)),
HEmptyView(32),
Expanded(
child: Container(
height: ScreenUtil().setWidth(60),
padding: EdgeInsets.symmetric(
horizontal:
ScreenUtil().setWidth(24)),
decoration: BoxDecoration(
color: MyColours.color_ffffff,
borderRadius:
BorderRadius.circular(
ScreenUtil()
.setWidth(26))),
child: TextField(
controller: _phoneController,
maxLines: 1,
// inputFormatters: [
// LengthLimitingTextInputFormatter(
// 15),
// // WhitelistingTextInputFormatter.digitsOnly
// ],
// //光标颜色
// cursorColor:
// widget.isSelect ? Colors.white : MyColours.color_199095,
//输入文本的样式
style: TextStyle(
fontSize:
ScreenUtil().setSp(24),
color: MyColours.color_515151),
focusNode: _phoneFocusNode,
decoration: InputDecoration(
border: OutlineInputBorder(
borderSide: BorderSide.none),
hintText: '请输入区号+固定电话或11位手机号',
hintStyle: TextStyle(
color: MyColours.color_BFC4D4,
fontSize:
ScreenUtil().setSp(24),
),
enabledBorder:
new UnderlineInputBorder(
borderSide: BorderSide.none,
),
focusedBorder:
new UnderlineInputBorder(
borderSide: BorderSide.none,
),
),
onChanged: (value) {
// if (editingController == _nameController) {
// _nameController.text = value;
// }
},
onEditingComplete: () {
FocusScope.of(context)
.requestFocus(
FocusNode()); //点击空白处隐藏键盘
},
keyboardType: TextInputType.text,
),
)),
HEmptyView(20),
Image.asset(
Utils.getImgPath('store_jian'),
width: ScreenUtil().setWidth(44))
],
)),
VEmptyView(32),
Padding(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(26)),
child: Row(
children: [
Text('电话2:',
style: TextStyle(
fontSize:
ScreenUtil().setSp(28),
color: MyColours.color_999999)),
HEmptyView(32),
Expanded(
child: Container(
height: ScreenUtil().setWidth(60),
padding: EdgeInsets.symmetric(
horizontal:
ScreenUtil().setWidth(24)),
decoration: BoxDecoration(
color: MyColours.color_ffffff,
borderRadius:
BorderRadius.circular(
ScreenUtil()
.setWidth(26))),
child: TextField(
controller: _phoneController2,
maxLines: 1,
// inputFormatters: [
// LengthLimitingTextInputFormatter(
// 15),
// // WhitelistingTextInputFormatter.digitsOnly
// ],
// //光标颜色
// cursorColor:
// widget.isSelect ? Colors.white : MyColours.color_199095,
//输入文本的样式
style: TextStyle(
fontSize:
ScreenUtil().setSp(24),
color: MyColours.color_515151),
focusNode: _phoneFocusNode2,
decoration: InputDecoration(
border: OutlineInputBorder(
borderSide: BorderSide.none),
hintText: '请输入区号+固定电话或11位手机号',
hintStyle: TextStyle(
color: MyColours.color_BFC4D4,
fontSize:
ScreenUtil().setSp(24),
),
enabledBorder:
new UnderlineInputBorder(
borderSide: BorderSide.none,
),
focusedBorder:
new UnderlineInputBorder(
borderSide: BorderSide.none,
),
),
onChanged: (value) {
// if (editingController == _nameController) {
// _nameController.text = value;
// }
},
onEditingComplete: () {
FocusScope.of(context)
.requestFocus(
FocusNode()); //点击空白处隐藏键盘
},
keyboardType: TextInputType.text,
),
)),
HEmptyView(20),
Image.asset(
Utils.getImgPath('store_jian'),
width: ScreenUtil().setWidth(44))
],
)),
VEmptyView(112),
RichText(
text: TextSpan(
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: ScreenUtil().setSp(32)),
children: [
// const TextSpan(text: '('),
TextSpan(
text: '营业时间',
style: TextStyle(
color: MyColours.color_515151)),
TextSpan(
text: '*',
style: TextStyle(
color: MyColours.color_E34D59)),
])),
VEmptyView(44),
Container(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(24)),
decoration: BoxDecoration(
color: MyColours.color_ffffff,
borderRadius: BorderRadius.circular(
ScreenUtil().setWidth(26))),
child: TextField(
controller: _timeController,
maxLines: 1,
// inputFormatters: [
// LengthLimitingTextInputFormatter(
// 15),
// // WhitelistingTextInputFormatter.digitsOnly
// ],
// //光标颜色
// cursorColor:
// widget.isSelect ? Colors.white : MyColours.color_199095,
//输入文本的样式
style: TextStyle(
fontSize: ScreenUtil().setSp(24),
color: MyColours.color_515151),
focusNode: _timeFocusNode,
decoration: InputDecoration(
border: OutlineInputBorder(
borderSide: BorderSide.none),
hintText: '如:9:00-21:00',
hintStyle: TextStyle(
color: MyColours.color_BFC4D4,
fontSize: ScreenUtil().setSp(24),
),
enabledBorder: new UnderlineInputBorder(
borderSide: BorderSide.none,
),
focusedBorder: new UnderlineInputBorder(
borderSide: BorderSide.none,
),
),
onChanged: (value) {
// if (editingController == _nameController) {
// _nameController.text = value;
// }
},
onEditingComplete: () {
FocusScope.of(context).requestFocus(
FocusNode()); //点击空白处隐藏键盘
},
keyboardType: TextInputType.text,
),
),
child: _select('地图地址', mapAddress['address'])),
VEmptyView(10),
Container(
height: ScreenUtil().setWidth(2),
color: MyColours.color_efefef,
margin: EdgeInsets.only(
left: ScreenUtil().setWidth(108 * 2),
right: ScreenUtil().setWidth(40)),
),
VEmptyView(10),
Padding(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(40),
VEmptyView(104),
RichText(
text: TextSpan(
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: ScreenUtil().setSp(32)),
children: [
// const TextSpan(text: '('),
TextSpan(
text: '店铺地址',
style: TextStyle(
color: MyColours.color_515151)),
TextSpan(
text: '*',
style: TextStyle(
color: MyColours.color_E34D59)),
])),
VEmptyView(44),
Padding(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(24),
),
child: Container(
height: ScreenUtil().setWidth(48 * 2),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(
ScreenUtil().setWidth(10)),
border: Border.all(
width: ScreenUtil().setWidth(2),
color: MyColours.color_438E93)),
child: Row(
mainAxisAlignment:
MainAxisAlignment.center,
children: [
Text(
'选择地图定位',
style: TextStyle(
color: MyColours.color_438E93,
fontSize:
ScreenUtil().setSp(28)),
),
HEmptyView(30),
Image.asset(
Utils.getImgPath('store_address'),
width: ScreenUtil().setWidth(44)),
],
),
)),
VEmptyView(40),
Padding(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(24),
),
child: Row(children: [
Text('详细地址:',
style: TextStyle(
fontSize: ScreenUtil().setSp(28),
color: MyColours.color_999999)),
HEmptyView(32),
Expanded(
child: TextInputFieldWidget(
textInputFormatters: [
// FilteringTextInputFormatter.allow(
// RegExp(r"[a-z\s_-]+")),
MaxWordTextInputFormater(
maxWords: 15,
currentLength: chageCountAddress)
],
hasFocusColor: MyColours.color_515151,
hitColor: MyColours.color_BFC4D4,
hintText: "输入店铺详细地址",
maxLines: 1,
lineHeight: 1,
fontSize: ScreenUtil().setSp(24),
textEditingController:
_addressController,
focusNode: _addressFocusNode,
)),
_buildCompute(
_countAddress, maxWordLengthAddress)
])),
VEmptyView(120),
Text('可预订时段',
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: ScreenUtil().setSp(32),
color: MyColours.color_515151)),
VEmptyView(34),
Padding(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(24),
),
child: Column(
children: [
Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Text('早市:',
style: TextStyle(
fontSize:
ScreenUtil().setSp(28),
color: MyColours
.color_999999)),
Image.asset(
Utils.getImgPath(
'store_swich_on'),
width: ScreenUtil()
.setWidth(38 * 2)),
],
),
VEmptyView(34),
Row(
children: [
Expanded(
child: Container(
height:
ScreenUtil().setWidth(34 * 2),
alignment: Alignment.center,
decoration: BoxDecoration(
borderRadius:
BorderRadius.circular(
ScreenUtil()
.setWidth(10)),
border: Border.all(
width: ScreenUtil()
.setWidth(2),
color: MyColours
.color_438E93)),
child: RichText(
text: TextSpan(
style: TextStyle(
fontSize: ScreenUtil()
.setSp(24)),
children: [
// const TextSpan(text: '('),
TextSpan(
text: '选择开始时间',
style: TextStyle(
color: MyColours
.color_438E93)),
TextSpan(
text: '*',
style: TextStyle(
color: MyColours
.color_E34D59)),
])),
)),
HEmptyView(52),
Text('至',
style: TextStyle(
fontSize:
ScreenUtil().setSp(24),
color: MyColours
.color_515151)),
HEmptyView(52),
Expanded(
child: Container(
height:
ScreenUtil().setWidth(34 * 2),
alignment: Alignment.center,
decoration: BoxDecoration(
borderRadius:
BorderRadius.circular(
ScreenUtil()
.setWidth(10)),
border: Border.all(
width: ScreenUtil()
.setWidth(2),
color: MyColours
.color_438E93)),
child: RichText(
text: TextSpan(
style: TextStyle(
fontSize: ScreenUtil()
.setSp(24)),
children: [
// const TextSpan(text: '('),
TextSpan(
text: '选择结束时间',
style: TextStyle(
color: MyColours
.color_438E93)),
TextSpan(
text: '*',
style: TextStyle(
color: MyColours
.color_E34D59)),
])),
)),
],
),
VEmptyView(32),
Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Text('午市:',
style: TextStyle(
fontSize:
ScreenUtil().setSp(28),
color: MyColours
.color_999999)),
Image.asset(
Utils.getImgPath(
'store_swich_on'),
width: ScreenUtil()
.setWidth(38 * 2)),
],
),
VEmptyView(34),
Row(
children: [
Expanded(
child: Container(
height:
ScreenUtil().setWidth(34 * 2),
alignment: Alignment.center,
decoration: BoxDecoration(
borderRadius:
BorderRadius.circular(
ScreenUtil()
.setWidth(10)),
border: Border.all(
width: ScreenUtil()
.setWidth(2),
color: MyColours
.color_438E93)),
child: RichText(
text: TextSpan(
style: TextStyle(
fontSize: ScreenUtil()
.setSp(24)),
children: [
// const TextSpan(text: '('),
TextSpan(
text: '选择开始时间',
style: TextStyle(
color: MyColours
.color_438E93)),
TextSpan(
text: '*',
style: TextStyle(
color: MyColours
.color_E34D59)),
])),
)),
HEmptyView(52),
Text('至',
style: TextStyle(
fontSize:
ScreenUtil().setSp(24),
color: MyColours
.color_515151)),
HEmptyView(52),
Expanded(
child: Container(
height:
ScreenUtil().setWidth(34 * 2),
alignment: Alignment.center,
decoration: BoxDecoration(
borderRadius:
BorderRadius.circular(
ScreenUtil()
.setWidth(10)),
border: Border.all(
width: ScreenUtil()
.setWidth(2),
color: MyColours
.color_438E93)),
child: RichText(
text: TextSpan(
style: TextStyle(
fontSize: ScreenUtil()
.setSp(24)),
children: [
// const TextSpan(text: '('),
TextSpan(
text: '选择结束时间',
style: TextStyle(
color: MyColours
.color_438E93)),
TextSpan(
text: '*',
style: TextStyle(
color: MyColours
.color_E34D59)),
])),
)),
],
),
VEmptyView(32),
Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Text('晚市:',
style: TextStyle(
fontSize:
ScreenUtil().setSp(28),
color: MyColours
.color_999999)),
Image.asset(
Utils.getImgPath(
'store_swich_on'),
width: ScreenUtil()
.setWidth(38 * 2)),
],
),
VEmptyView(34),
Row(
children: [
Expanded(
child: Container(
height:
ScreenUtil().setWidth(34 * 2),
alignment: Alignment.center,
decoration: BoxDecoration(
borderRadius:
BorderRadius.circular(
ScreenUtil()
.setWidth(10)),
border: Border.all(
width: ScreenUtil()
.setWidth(2),
color: MyColours
.color_438E93)),
child: RichText(
text: TextSpan(
style: TextStyle(
fontSize: ScreenUtil()
.setSp(24)),
children: [
// const TextSpan(text: '('),
TextSpan(
text: '选择开始时间',
style: TextStyle(
color: MyColours
.color_438E93)),
TextSpan(
text: '*',
style: TextStyle(
color: MyColours
.color_E34D59)),
])),
)),
HEmptyView(52),
Text('至',
style: TextStyle(
fontSize:
ScreenUtil().setSp(24),
color: MyColours
.color_515151)),
HEmptyView(52),
Expanded(
child: Container(
height:
ScreenUtil().setWidth(34 * 2),
alignment: Alignment.center,
decoration: BoxDecoration(
borderRadius:
BorderRadius.circular(
ScreenUtil()
.setWidth(10)),
border: Border.all(
width: ScreenUtil()
.setWidth(2),
color: MyColours
.color_438E93)),
child: RichText(
text: TextSpan(
style: TextStyle(
fontSize: ScreenUtil()
.setSp(24)),
children: [
// const TextSpan(text: '('),
TextSpan(
text: '选择结束时间',
style: TextStyle(
color: MyColours
.color_438E93)),
TextSpan(
text: '*',
style: TextStyle(
color: MyColours
.color_E34D59)),
])),
)),
],
),
],
)),
VEmptyView(96),
Text('接单时间',
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: ScreenUtil().setSp(32),
color: MyColours.color_515151)),
VEmptyView(32),
Padding(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(40),
),
child: _textfield('店铺名称', '请填写店铺名称',
_nameController, _nameFocusNode)),
VEmptyView(10),
_imageWidget('门头照片',
_uploadImageProvider.mentou, 76, 64),
VEmptyView(30),
Container(
height: ScreenUtil().setWidth(2),
color: MyColours.color_efefef,
margin: EdgeInsets.only(
left: ScreenUtil().setWidth(108 * 2),
right: ScreenUtil().setWidth(40)),
),
child: _textfield('详细地址', '请填写店铺详细地址',
_addressController, _addressFocusNode)),
VEmptyView(10),
Container(
height: ScreenUtil().setWidth(2),
color: MyColours.color_efefef,
margin: EdgeInsets.only(
left: ScreenUtil().setWidth(108 * 2),
right: ScreenUtil().setWidth(40)),
),
VEmptyView(10),
Padding(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(40),
VEmptyView(10),
Padding(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(40),
),
child: _textfield('店铺电话', '请填写店铺电话',
_phoneController, _phoneFocusNode)),
VEmptyView(10),
Container(
height: ScreenUtil().setWidth(2),
color: MyColours.color_efefef,
margin: EdgeInsets.only(
left: ScreenUtil().setWidth(108 * 2),
right: ScreenUtil().setWidth(40)),
),
child: _textfield(
'店铺简介',
'请填写店铺简介',
_introductionController,
_introductionFocusNode)),
VEmptyView(10),
],
)),
),
VEmptyView(20),
Padding(
padding: EdgeInsets.fromLTRB(ScreenUtil().setWidth(40), 0,
ScreenUtil().setWidth(40), ScreenUtil().setWidth(40)),
child: RoundButton(
onPressed: () {
//接口
_setSellerInfoById();
},
text: '保存',
fontSize: 34,
isBold: false,
height: ScreenUtil().setWidth(80),
width: double.infinity,
radius: ScreenUtil().setWidth(10),
))
]))));
VEmptyView(10),
Padding(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(40),
),
child: _textfield(
'营业时间',
'请填写营业时间,如09:00-23:00',
_timeController,
_timeFocusNode)),
VEmptyView(10),
Container(
height: ScreenUtil().setWidth(2),
color: MyColours.color_efefef,
margin: EdgeInsets.only(
left: ScreenUtil().setWidth(108 * 2),
right: ScreenUtil().setWidth(40)),
),
VEmptyView(10),
Padding(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(40),
vertical: ScreenUtil().setWidth(40),
),
child:
_select('地图地址', mapAddress['address'])),
VEmptyView(10),
Container(
height: ScreenUtil().setWidth(2),
color: MyColours.color_efefef,
margin: EdgeInsets.only(
left: ScreenUtil().setWidth(108 * 2),
right: ScreenUtil().setWidth(40)),
),
VEmptyView(10),
Padding(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(40),
),
child: _textfield('详细地址', '请填写店铺详细地址',
_addressController, _addressFocusNode)),
VEmptyView(10),
Container(
height: ScreenUtil().setWidth(2),
color: MyColours.color_efefef,
margin: EdgeInsets.only(
left: ScreenUtil().setWidth(108 * 2),
right: ScreenUtil().setWidth(40)),
),
VEmptyView(10),
Padding(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(40),
),
child: _textfield(
'店铺简介',
'请填写店铺简介',
_introductionController,
_introductionFocusNode)),
VEmptyView(10),
],
)),
),
VEmptyView(20),
Padding(
padding: EdgeInsets.fromLTRB(
ScreenUtil().setWidth(40),
0,
ScreenUtil().setWidth(40),
ScreenUtil().setWidth(40)),
child: RoundButton(
onPressed: () {
//接口
_setSellerInfoById();
},
text: '保存',
fontSize: 34,
isBold: false,
height: ScreenUtil().setWidth(80),
width: double.infinity,
radius: ScreenUtil().setWidth(10),
))
])))));
}
}
... ...
// import 'dart:io';
// import 'package:cached_network_image/cached_network_image.dart';
// import 'package:dio/dio.dart';
// import 'package:flutter/material.dart';
// import 'package:flutter/services.dart';
// import 'package:flutter_screenutil/screenutil.dart';
// import 'package:one_key/models/get_seller_info_model.dart';
// import 'package:one_key/models/set_seller_info_model.dart';
// import 'package:one_key/models/upload_img_model.dart';
// import 'package:one_key/models/user.dart';
// import 'package:one_key/pages/online_check/photo_view_wiget.dart';
// import 'package:one_key/pages/online_check/progress.dart';
// import 'package:one_key/provider/base_info_provider.dart';
// import 'package:one_key/provider/store_base_info_provider.dart';
// import 'package:one_key/provider/upload_img_provider.dart';
// import 'package:one_key/provider/user_model.dart';
// import 'package:one_key/res/colors.dart';
// import 'package:one_key/route/navigator_util.dart';
// import 'package:one_key/utils/event_bus.dart';
// import 'package:one_key/utils/upload_image_util.dart';
// import 'package:one_key/utils/utils.dart';
// import 'package:one_key/widgets/h_empty_view.dart';
// import 'package:one_key/widgets/round_button.dart';
// import 'package:one_key/widgets/system_app_bar.dart';
// import 'package:one_key/widgets/v_empty_view.dart';
// import 'package:image_picker/image_picker.dart';
// import 'package:permission_handler/permission_handler.dart';
// import 'package:provider/provider.dart';
// class StoreBaseInfoPage extends StatefulWidget {
// StoreBaseInfoPage({Key key}) : super(key: key);
// @override
// _StoreBaseInfoPageState createState() => _StoreBaseInfoPageState();
// }
// class _StoreBaseInfoPageState extends State<StoreBaseInfoPage> {
// ScrollController _scrollController;
// TextEditingController _nameController = TextEditingController();
// TextEditingController _phoneController = TextEditingController();
// TextEditingController _timeController = TextEditingController();
// TextEditingController _addressController = TextEditingController();
// TextEditingController _introductionController = TextEditingController();
// FocusNode _nameFocusNode = FocusNode();
// FocusNode _phoneFocusNode = FocusNode();
// FocusNode _timeFocusNode = FocusNode();
// FocusNode _addressFocusNode = FocusNode();
// FocusNode _introductionFocusNode = FocusNode();
// Map<String, dynamic> mapAddress;
// final picker = ImagePicker();
// UploadImageProvider _uploadImageProvider;
// StoreBaseIndoProvider _baseIndoProvider;
// @override
// void initState() {
// super.initState();
// mapAddress = {
// "address": '点击选择',
// 'lat': '',
// 'lng': '',
// };
// _scrollController = ScrollController();
// WidgetsBinding.instance.addPostFrameCallback((_) {
// _uploadImageProvider.mentou.process = 0.01;
// _uploadImageProvider.mentou.qiniuUrl = '';
// _uploadImageProvider.imgSizeMenTou = 64;
// // _uploadImageProvider.mentou.file = null;
// _getQiniuInfo();
// _getStoreBaseinfo();
// });
// }
// ///获取店铺信息
// _getStoreBaseinfo() async {
// GetSellerInfoSunModel itemModel =
// await _baseIndoProvider.getSellerById(context);
// if (itemModel != null) {
// _nameController.text = itemModel.data.sellername;
// _phoneController.text = itemModel.data.sellerTel;
// _timeController.text = itemModel.data.dailyTime;
// _addressController.text = itemModel.data.realAddress;
// _introductionController.text = itemModel.data.sellerdesc;
// _uploadImageProvider.mentou.qiniuUrl = itemModel.data.sellerImage;
// // _uploadImageProvider.notifyListeners();
// mapAddress = {
// "address": itemModel.data.mapAddress,
// 'lat': itemModel.data.lat,
// 'lng': itemModel.data.long,
// };
// setState(() {});
// }
// }
// ///获取七牛云token
// ///
// _getQiniuInfo() async {
// await _uploadImageProvider.getQiniuInfo(context, {});
// }
// /// 修改店铺基本信息
// _setSellerInfoById() async {
// FocusScope.of(context).requestFocus(FocusNode()); //点击空白处隐藏键盘
// User user = Provider.of<UserModel>(context, listen: false).user;
// Map<String, dynamic> params = {
// 'id': user.sellerid,
// };
// params['name'] = _nameController.text;
// if (_uploadImageProvider.mentou.path != null &&
// _uploadImageProvider.mentou.path != '') {
// params['image'] =
// await MultipartFile.fromFile(_uploadImageProvider.mentou.path);
// }
// params['phone'] = _phoneController.text;
// if (mapAddress != null && mapAddress['address'] != '') {
// params['map_address'] = mapAddress['address'];
// }
// if (mapAddress != null && mapAddress['lng'] != '') {
// params['long'] = mapAddress['lng'];
// }
// if (mapAddress != null && mapAddress['lat'] != '') {
// params['lat'] = mapAddress['lat'];
// }
// params['real_address'] = _addressController.text;
// params['sellerdesc'] = _introductionController.text;
// params['daily_time'] = _timeController.text;
// FormData formData = FormData.fromMap(params);
// SetSellerInfoSunModel sunModel =
// await _baseIndoProvider.setSellerInfoById(context, formData);
// if (sunModel != null) {
// //修改成功
// Utils.showToast('保存成功');
// EventBus().emit('changeStatusColor');
// Navigator.pop(
// context,
// _uploadImageProvider.mentou.qiniuUrl != null &&
// _uploadImageProvider.mentou.qiniuUrl != ''
// ? {'image': _uploadImageProvider.mentou.qiniuUrl}
// : {'image': ''});
// } else {
// // Utils.showToast('保存失败');
// }
// }
// ///输入框
// Widget _textfield(String title, String hintText,
// TextEditingController editingController, FocusNode focusNode) {
// return Container(
// child: Row(
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
// children: [
// Container(
// child: Text(
// title,
// style: TextStyle(
// color: MyColours.color_333333,
// fontWeight: FontWeight.bold,
// fontSize: ScreenUtil().setSp(34)),
// ),
// ),
// HEmptyView(20),
// Spacer(),
// Container(
// width: ScreenUtil().setWidth(231 * 2),
// child: TextField(
// controller: editingController,
// textAlign: TextAlign.right,
// textAlignVertical: TextAlignVertical.bottom,
// maxLines: 1,
// inputFormatters: title == '详细地址'
// ? [
// LengthLimitingTextInputFormatter(20),
// // WhitelistingTextInputFormatter.digitsOnly
// ]
// : [],
// // //光标颜色
// // cursorColor:
// // widget.isSelect ? Colors.white : MyColours.color_199095,
// //输入文本的样式
// style: TextStyle(
// fontSize: ScreenUtil().setSp(32),
// ),
// focusNode: focusNode,
// decoration: InputDecoration(
// border: OutlineInputBorder(borderSide: BorderSide.none),
// hintText: hintText,
// hintStyle: TextStyle(
// color: MyColours.color_999999,
// fontSize: ScreenUtil().setSp(32),
// ),
// enabledBorder: new UnderlineInputBorder(
// borderSide: BorderSide.none,
// ),
// focusedBorder: new UnderlineInputBorder(
// borderSide: BorderSide.none,
// ),
// ),
// onChanged: (value) {
// // if (editingController == _nameController) {
// // _nameController.text = value;
// // }
// },
// onEditingComplete: () {
// FocusScope.of(context).requestFocus(FocusNode()); //点击空白处隐藏键盘
// },
// keyboardType: TextInputType.text,
// ),
// )
// ],
// ),
// );
// }
// //查看大图
// _showPhotoView(BuildContext context, int index, List imgs,
// {isShow = false, List dashName}) async {
// // if (imgs.length == 1 &&
// // imgs[0] ==
// // 'http://nosqn.colorcun.com/custom/lite-online/image/def-banner.png') {
// // imgs[0] = 'http://nosqn.colorcun.com/app/seller-hj-empty.png';
// // }
// Utils.setBarStatus(false, color: Colors.black);
// dynamic result = await showGeneralDialog(
// context: context,
// barrierDismissible: false,
// // barrierColor: Colors.red,
// barrierLabel:
// MaterialLocalizations.of(context).modalBarrierDismissLabel,
// transitionDuration: const Duration(milliseconds: 150),
// pageBuilder: (BuildContext context, Animation animation,
// Animation secondaryAnimation) {
// Widget child = Stack(
// children: <Widget>[
// PhotoPreview(
// initialIndex: index,
// photoList: imgs,
// isShow: isShow,
// dashName: dashName,
// needMask: false,
// )
// ],
// );
// return child;
// });
// Utils.setBarStatus(true, color: Colors.white);
// }
// ///#相机拍照,单图选择
// Future _getFromPictureOrCamera(
// String title, UploadImgModel imgModel, imageSource) async {
// final pickedFile = await picker.getImage(source: imageSource);
// setState(() {
// if (pickedFile != null) {
// imgModel.file = File(pickedFile.path);
// imgModel.process = 0.01;
// } else {
// print('No image selected.');
// }
// });
// if (pickedFile != null) {
// _uploadImageProvider.imgSizeMenTou = 64;
// _uploadImageProvider.mentou.qiniuUrl = null;
// _uploadImageProvider.mentou.file = File(pickedFile.path);
// _uploadImageProvider.mentou.path = pickedFile.path;
// UploadImageUtil().startUploadOnly(
// context, File(pickedFile.path), 2, true, _uploadImageProvider);
// }
// }
// ///图片 头像和二维码
// Widget _imageWidget(
// String title, UploadImgModel model, double imgSize, double radius) {
// return InkWell(
// onTap: () {
// Utils.getPickPermission(context, () {
// _getFromPictureOrCamera(title, model, ImageSource.gallery);
// }, Platform.isAndroid ? Permission.storage : Permission.photos);
// },
// child: Container(
// margin: EdgeInsets.only(
// top: ScreenUtil().setWidth(40),
// left: ScreenUtil().setWidth(40),
// right: ScreenUtil().setWidth(40)),
// height: ScreenUtil().setWidth(imgSize * 2),
// child: Row(
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
// children: [
// Text(
// title,
// textAlign: TextAlign.left,
// style: TextStyle(
// color: MyColours.color_333333,
// fontWeight: FontWeight.bold,
// fontSize: ScreenUtil().setSp(34)),
// ),
// Spacer(),
// Stack(
// children: [
// InkWell(
// onTap: () {
// double process;
// String qiniuUrl;
// List<String> tempList = [];
// process = _uploadImageProvider.mentou.process;
// qiniuUrl = _uploadImageProvider.mentou.qiniuUrl;
// if (qiniuUrl != null && qiniuUrl != '') {
// tempList.add(qiniuUrl);
// ///没有上传完成的不可以点击
// _showPhotoView(context, 0, tempList);
// } else {
// Utils.getPickPermission(context, () {
// _getFromPictureOrCamera(
// title, model, ImageSource.gallery);
// },
// Platform.isAndroid
// ? Permission.storage
// : Permission.photos);
// }
// },
// child: ClipRRect(
// borderRadius:
// BorderRadius.circular(ScreenUtil().setWidth(radius)),
// child: model.file == null
// ? model.qiniuUrl != null && model.qiniuUrl != ''
// ? Image.network(
// model.qiniuUrl,
// fit: BoxFit.cover,
// width: ScreenUtil().setWidth(imgSize * 2),
// height: ScreenUtil().setWidth(imgSize * 2),
// )
// : Image.asset(
// Utils.getImgPath('no_image'),
// fit: BoxFit.cover,
// width: ScreenUtil().setWidth(imgSize * 2),
// height: ScreenUtil().setWidth(imgSize * 2),
// )
// : Image.file(
// model.file,
// fit: BoxFit.cover,
// width: ScreenUtil().setWidth(imgSize * 2),
// height: ScreenUtil().setWidth(imgSize * 2),
// ),
// ),
// ),
// (model.file != null) &&
// model.process != 1 &&
// model.process != 0.01
// ? Container(
// width: ScreenUtil().setWidth(imgSize * 2),
// height: ScreenUtil().setWidth(imgSize * 2),
// decoration: BoxDecoration(
// borderRadius: BorderRadius.circular(radius),
// color: Color.fromRGBO(0, 0, 0, 0.6)),
// child: Center(
// child: Text('上传中',
// style:
// TextStyle(color: MyColours.color_999999)),
// ),
// )
// : Container(),
// ],
// ),
// HEmptyView(30),
// Image.asset(
// "assets/arr_right_gray.png",
// width: ScreenUtil().setWidth(14),
// height: ScreenUtil().setWidth(22),
// )
// ],
// ),
// ));
// }
// ///地图地址选择
// Widget _select(String title, String hintText) {
// return InkWell(
// onTap: () {
// Utils.getPickPermission(context, () async {
// mapAddress = await NavigatorUtil.goMapChoicePointPage(context);
// if (mapAddress != null) {
// setState(() {
// // storeMapAddress = address['address'];
// // // createStoreModel.storeInfo?.address = storeAddress;
// // // createStoreModel.storeInfo?.lat = address['lat'];
// // // createStoreModel.storeInfo?.lng = address['lng'];
// });
// }
// }, Permission.location);
// },
// child: Container(
// child: Row(
// crossAxisAlignment: CrossAxisAlignment.center,
// mainAxisAlignment: MainAxisAlignment.center,
// children: [
// Container(
// child: Text(
// title,
// style: TextStyle(
// color: MyColours.color_333333,
// fontWeight: FontWeight.bold,
// fontSize: ScreenUtil().setSp(34)),
// ),
// ),
// HEmptyView(40),
// Expanded(
// child: Text(hintText,
// textAlign: TextAlign.right,
// style: TextStyle(
// color: hintText == '点击选择'
// ? MyColours.color_999999
// : MyColours.color_333333,
// fontSize: ScreenUtil().setSp(32),
// ))),
// HEmptyView(20),
// Image.asset(
// Utils.getImgPath('arr_right_gray'),
// width: ScreenUtil().setWidth(12),
// height: ScreenUtil().setWidth(22),
// )
// ],
// ),
// ),
// );
// }
// @override
// Widget build(BuildContext context) {
// _uploadImageProvider =
// Provider.of<UploadImageProvider>(context, listen: true);
// _baseIndoProvider =
// Provider.of<StoreBaseIndoProvider>(context, listen: true);
// return Scaffold(
// backgroundColor: MyColours.color_fefefe,
// appBar: SystemAppBar(
// '店铺信息',
// onTap: () {
// EventBus().emit('changeStatusColor');
// Navigator.of(context).pop();
// },
// ),
// body: WillPopScope(
// onWillPop: () {
// EventBus().emit('changeStatusColor');
// Navigator.of(context).pop();
// },
// child: InkWell(
// onTap: () {
// FocusScope.of(context).requestFocus(FocusNode()); //点击空白处隐藏键盘
// },
// child: Column(children: [
// Expanded(
// child: SingleChildScrollView(
// controller: _scrollController,
// physics: BouncingScrollPhysics(),
// child: Column(
// children: [
// Padding(
// padding: EdgeInsets.symmetric(
// horizontal: ScreenUtil().setWidth(40),
// ),
// child: _textfield('店铺名称', '请填写店铺名称',
// _nameController, _nameFocusNode)),
// VEmptyView(10),
// _imageWidget('门头照片', _uploadImageProvider.mentou,
// _uploadImageProvider.imgSizeMenTou, 64),
// VEmptyView(30),
// Container(
// height: ScreenUtil().setWidth(2),
// color: MyColours.color_efefef,
// margin: EdgeInsets.only(
// left: ScreenUtil().setWidth(108 * 2),
// right: ScreenUtil().setWidth(40)),
// ),
// VEmptyView(10),
// Padding(
// padding: EdgeInsets.symmetric(
// horizontal: ScreenUtil().setWidth(40),
// ),
// child: _textfield('店铺电话', '请填写店铺电话',
// _phoneController, _phoneFocusNode)),
// VEmptyView(10),
// Container(
// height: ScreenUtil().setWidth(2),
// color: MyColours.color_efefef,
// margin: EdgeInsets.only(
// left: ScreenUtil().setWidth(108 * 2),
// right: ScreenUtil().setWidth(40)),
// ),
// VEmptyView(10),
// Padding(
// padding: EdgeInsets.symmetric(
// horizontal: ScreenUtil().setWidth(40),
// ),
// child: _textfield(
// '营业时间',
// '请填写营业时间,如09:00-23:00',
// _timeController,
// _timeFocusNode)),
// VEmptyView(10),
// Container(
// height: ScreenUtil().setWidth(2),
// color: MyColours.color_efefef,
// margin: EdgeInsets.only(
// left: ScreenUtil().setWidth(108 * 2),
// right: ScreenUtil().setWidth(40)),
// ),
// VEmptyView(10),
// Padding(
// padding: EdgeInsets.symmetric(
// horizontal: ScreenUtil().setWidth(40),
// vertical: ScreenUtil().setWidth(40),
// ),
// child: _select('地图地址', mapAddress['address'])),
// VEmptyView(10),
// Container(
// height: ScreenUtil().setWidth(2),
// color: MyColours.color_efefef,
// margin: EdgeInsets.only(
// left: ScreenUtil().setWidth(108 * 2),
// right: ScreenUtil().setWidth(40)),
// ),
// VEmptyView(10),
// Padding(
// padding: EdgeInsets.symmetric(
// horizontal: ScreenUtil().setWidth(40),
// ),
// child: _textfield('详细地址', '请填写店铺详细地址',
// _addressController, _addressFocusNode)),
// VEmptyView(10),
// Container(
// height: ScreenUtil().setWidth(2),
// color: MyColours.color_efefef,
// margin: EdgeInsets.only(
// left: ScreenUtil().setWidth(108 * 2),
// right: ScreenUtil().setWidth(40)),
// ),
// VEmptyView(10),
// Padding(
// padding: EdgeInsets.symmetric(
// horizontal: ScreenUtil().setWidth(40),
// ),
// child: _textfield(
// '店铺简介',
// '请填写店铺简介',
// _introductionController,
// _introductionFocusNode)),
// VEmptyView(10),
// ],
// )),
// ),
// VEmptyView(20),
// Padding(
// padding: EdgeInsets.fromLTRB(ScreenUtil().setWidth(40), 0,
// ScreenUtil().setWidth(40), ScreenUtil().setWidth(40)),
// child: RoundButton(
// onPressed: () {
// //接口
// _setSellerInfoById();
// },
// text: '保存',
// fontSize: 34,
// isBold: false,
// height: ScreenUtil().setWidth(80),
// width: double.infinity,
// radius: ScreenUtil().setWidth(10),
// ))
// ]))));
// }
// }
... ...
import 'package:flutter/material.dart';
class MyColours {
static const Color color_DBDBDB = Color(0xffDBDBDB);
static const Color color_F8F9FD = Color(0xffF8F9FD);
static const Color color_5F7292 = Color(0xff5F7292);
static const Color color_F2995F = Color(0xffF2995F);
... ...
class RegexUtil {
RegexUtil._();
static final spaceOrNewLine = RegExp(r'[ \s]+');
}
... ...
import 'package:flutter/foundation.dart';
import 'package:flutter/services.dart';
import 'package:one_key/utils/regex_util.dart';
// import 'package:textfield_length_limit_word/util/regex_util.dart';
class MaxWordTextInputFormater extends TextInputFormatter {
final int maxWords;
final ValueChanged<int> currentLength;
MaxWordTextInputFormater({this.maxWords = 1, this.currentLength});
@override
TextEditingValue formatEditUpdate(
TextEditingValue oldValue, TextEditingValue newValue) {
int count = 0;
if (newValue.text.isEmpty) {
count = 0;
} else {
count = newValue.text.trim().length;
// count = newValue.text.trim().split(RegexUtil.spaceOrNewLine).length;
}
if (count > maxWords) {
return oldValue;
}
currentLength?.call(count);
return newValue;
}
}
... ...
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:one_key/widgets/max_word_textinput_formater.dart';
import 'package:one_key/widgets/text_input_field_widget.dart';
// import 'package:textfield_length_limit_word/component/max_word_textinput_formater.dart';
// import 'package:textfield_length_limit_word/component/text_input_field_widget.dart';
class TextFieldPage extends StatefulWidget {
const TextFieldPage({Key key}) : super(key: key);
@override
State<StatefulWidget> createState() {
return TextFieldPageState();
}
}
class TextFieldPageState extends State<TextFieldPage> {
final Color _color = const Color(0xFFF5F6F7);
int _count = 0;
final int maxWordLength = 6;
@override
Widget build(BuildContext context) {
return buildPage(
_buildBody(),
const Text(
"TextField Max Words Limit",
style: TextStyle(fontSize: 16, color: Colors.black),
));
}
Widget _buildBody() {
return Container(
color: _color,
child: Column(children: [
const SizedBox(
height: 12,
),
_buildTextField()
]));
}
Widget _buildTextField() {
return _buildContain(
Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
const Text(
"TextField",
style: TextStyle(fontSize: 16, color: Colors.black),
),
_buildCompute(),
],
),
TextInputFieldWidget(
textInputFormatters: [
FilteringTextInputFormatter.allow(RegExp(r"[a-z\s_-]+")),
MaxWordTextInputFormater(maxWords: 6, currentLength: chageCount)
],
hintText: "please fill words ",
maxLines: 4,
lineHeight: 1.5,
)
],
),
);
}
Widget _buildCompute() {
return RichText(
text: TextSpan(
style: const TextStyle(fontSize: 14, color: Color(0xFF909399)),
children: [
const TextSpan(text: '('),
TextSpan(
text: _count.toString(),
style: TextStyle(
color: _count > 0
? const Color(0xFF5269FF)
: const Color(0xFF909399))),
TextSpan(text: "/${maxWordLength.toString()})"),
]));
}
void chageCount(int count) {
setState(() {
_count = count;
});
}
Scaffold buildPage(
Widget body,
Widget titleWidget,
) {
return Scaffold(
resizeToAvoidBottomInset: false,
appBar: AppBar(
toolbarHeight: 40,
backgroundColor: _color,
// status bar color
automaticallyImplyLeading: false,
systemOverlayStyle: SystemUiOverlayStyle(
statusBarColor: _color, statusBarIconBrightness: Brightness.dark),
foregroundColor: _color,
shadowColor: Colors.transparent,
title: titleWidget,
),
body: SafeArea(
child: body,
),
);
}
Widget _buildContain(Widget child) {
return Container(
padding: const EdgeInsets.all(16),
margin: const EdgeInsets.only(left: 16, right: 16, top: 12),
decoration: const BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.all(Radius.circular(12))),
child: child);
}
}
... ...
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
class TextInputFieldWidget extends StatefulWidget {
final String hintText;
final ValueChanged<String> textChanged;
final bool obscureText;
final Color hasFocusColor;
final Color hitColor;
final double fontSize;
final int maxLines;
final double lineHeight;
final List<TextInputFormatter> textInputFormatters;
final ValueChanged<String> onChanged;
final TextEditingController textEditingController;
final FocusNode focusNode;
const TextInputFieldWidget(
{Key key,
this.hintText = "",
this.textChanged,
this.obscureText = false,
this.hasFocusColor = const Color(0xFF303133),
this.hitColor = const Color(0xFFC0C4CC),
this.fontSize = 14,
this.lineHeight = 1,
this.maxLines = 1,
this.onChanged,
this.textInputFormatters,
this.textEditingController,
this.focusNode})
: super(key: key);
@override
State<StatefulWidget> createState() {
return _TextInputFieldWidgetState();
}
}
class _TextInputFieldWidgetState extends State<TextInputFieldWidget> {
String inputText = "";
@override
void initState() {
widget.textEditingController.addListener(_handleTextInput);
super.initState();
}
void _handleTextInput() {
widget.textChanged?.call(widget.textEditingController.text);
setState(() {
inputText = widget.textEditingController.text;
});
}
@override
Widget build(BuildContext context) {
return TextField(
focusNode: widget.focusNode,
maxLines: widget.maxLines,
controller: widget.textEditingController,
obscureText: widget.obscureText,
onChanged: widget.onChanged,
inputFormatters: [...?widget.textInputFormatters],
style: TextStyle(
fontSize: widget.fontSize,
height: widget.lineHeight,
color: widget.hasFocusColor),
decoration: InputDecoration(
hintText: widget.hintText,
border: InputBorder.none,
hintStyle: TextStyle(
color: widget.hitColor,
height: widget.lineHeight,
fontSize: widget.fontSize,
),
),
);
}
@override
void dispose() {
super.dispose();
}
}
... ...