Commit adcff6f206aae3e8d69d2ca603404a55c53fc6bd

Authored by wdn127929
1 parent 64c7c9a3

合并

1.81 KB | W: | H:

2.22 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin
... ... @@ -13,6 +13,7 @@ import 'package:fluwx/fluwx.dart';
import 'package:one_key/pages/detail/handle_online_page.dart';
import 'package:one_key/provider/base_info_provider.dart';
import 'package:one_key/provider/coupon_provider.dart';
import 'package:one_key/provider/create_store_model.dart';
import 'package:one_key/provider/message_dialog_model.dart';
import 'package:intl/date_symbol_data_local.dart';
import 'package:one_key/provider/notebook_detail_model.dart';
... ... @@ -74,6 +75,9 @@ Future<void> main() async {
ChangeNotifierProvider<BaseIndoProvider>(
create: (_) => BaseIndoProvider(),
),
ChangeNotifierProvider<CreateStoreModel>(
create: (_) => CreateStoreModel(),
),
],
child: MyApp(),
));
... ...
... ... @@ -89,5 +89,6 @@ class HttpUrl {
"?service=App.Photo.getSellerPhotoById"; //查看商家图片
static const String send_vc_code =
"?service=App.SendSMS.SendVcCode"; //绑定手机号码时,给用户发送短信验证码接口
static const String check_seller_acc =
"?service=App.User.CheckSellerAcc"; //APP微信登录后检测是否存在商家
}
... ...
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/screenutil.dart';
import 'package:one_key/provider/create_store_model.dart';
import 'package:one_key/res/colors.dart';
import 'package:one_key/utils/navigator_util.dart';
import 'package:one_key/utils/utils.dart';
... ... @@ -7,6 +8,7 @@ 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:permission_handler/permission_handler.dart';
import 'package:provider/provider.dart';
class EnterStoreAddressPage extends StatefulWidget {
EnterStoreAddressPage({Key key}) : super(key: key);
... ... @@ -17,8 +19,23 @@ class EnterStoreAddressPage extends StatefulWidget {
class _EnterStoreAddressPageState extends State<EnterStoreAddressPage> {
String storeAddress = '请选择地图地址';
TextEditingController _controller = TextEditingController();
@override
void initState() {
// TODO: implement initState
super.initState();
}
@override
Widget build(BuildContext context) {
CreateStoreModel createStoreModel =
Provider.of<CreateStoreModel>(context, listen: false);
_controller.text = createStoreModel.storeInfo.addressDetail;
if (createStoreModel.storeInfo.address != null) {
storeAddress = createStoreModel.storeInfo.address;
}
return Scaffold(
backgroundColor: Colors.white,
appBar: SystemAppBar(
... ... @@ -55,9 +72,10 @@ class _EnterStoreAddressPageState extends State<EnterStoreAddressPage> {
if (address != null) {
setState(() {
storeAddress = address['address'];
// 'address':
// 'lat':
// 'lng
createStoreModel.storeInfo.address =
storeAddress;
createStoreModel.storeInfo.lat = address['lat'];
createStoreModel.storeInfo.lng = address['lng'];
});
}
}, PermissionGroup.location);
... ... @@ -86,6 +104,7 @@ class _EnterStoreAddressPageState extends State<EnterStoreAddressPage> {
),
VEmptyView(20),
TextField(
controller: _controller,
// textAlignVertical: TextAlignVertical.bottom,
maxLines: 1,
// //光标颜色
... ... @@ -116,7 +135,9 @@ class _EnterStoreAddressPageState extends State<EnterStoreAddressPage> {
color: MyColours.color_bff6f7,
width: ScreenUtil().setWidth(2))),
),
onChanged: (value) {},
onChanged: (value) {
createStoreModel.storeInfo.addressDetail = value;
},
onEditingComplete: () {
FocusScope.of(context)
.requestFocus(FocusNode()); //点击空白处隐藏键盘
... ...
... ... @@ -19,7 +19,9 @@ class EnterStoreEnvironmentPage extends StatefulWidget {
_EnterStoreEnvironmentPageState();
}
class _EnterStoreEnvironmentPageState extends State<EnterStoreEnvironmentPage> {
class _EnterStoreEnvironmentPageState extends State<EnterStoreEnvironmentPage> with AutomaticKeepAliveClientMixin {
@override
bool get wantKeepAlive => true;
ScrollController _controller = ScrollController();
@override
Widget build(BuildContext context) {
... ... @@ -27,6 +29,7 @@ class _EnterStoreEnvironmentPageState extends State<EnterStoreEnvironmentPage> {
backgroundColor: Colors.white,
appBar: SystemAppBar(
'',
leftTitle: '上一步',
onTap: () {
Navigator.pop(context);
},
... ... @@ -36,19 +39,22 @@ class _EnterStoreEnvironmentPageState extends State<EnterStoreEnvironmentPage> {
FocusScope.of(context).requestFocus(FocusNode()); //点击空白处隐藏键盘
},
child: Container(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(70),
vertical: ScreenUtil().setWidth(60)),
padding:
EdgeInsets.symmetric(vertical: ScreenUtil().setWidth(60)),
child: SingleChildScrollView(
controller: _controller,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('请上传店内环境照片或视频(选传)',
style: TextStyle(
color: MyColours.color_333333,
fontSize: ScreenUtil().setSp(40),
fontWeight: FontWeight.bold)),
Padding(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(70)),
child: Text('请上传店内环境照片或视频(选传)',
style: TextStyle(
color: MyColours.color_333333,
fontSize: ScreenUtil().setSp(40),
fontWeight: FontWeight.bold)),
),
VEmptyView(100),
Consumer<UploadImageProvider>(
builder: (context, model, _) {
... ... @@ -58,18 +64,22 @@ class _EnterStoreEnvironmentPageState extends State<EnterStoreEnvironmentPage> {
scrollController: _controller);
}),
VEmptyView(160),
RoundButton(
text: '下一步',
gradientStart: MyColours.color_199095,
gradientEnd: MyColours.color_199095,
// borderColor: MyColours.color_999999,
radius: ScreenUtil().setWidth(20),
fontSize: 28,
isBold: false,
onPressed: () {
NavigatorUtil.goEnterStoreAddressPage(context);
},
)
Padding(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(70)),
child: RoundButton(
text: '完成',
gradientStart: MyColours.color_199095,
gradientEnd: MyColours.color_199095,
// borderColor: MyColours.color_999999,
radius: ScreenUtil().setWidth(20),
fontSize: 28,
isBold: false,
onPressed: () {
// NavigatorUtil.goEnterStoreAddressPage(
// context);
},
))
])))));
;
}
... ...
... ... @@ -26,6 +26,7 @@ class _EnterStoreFrontPhotoPageState extends State<EnterStoreFrontPhotoPage> {
backgroundColor: Colors.white,
appBar: SystemAppBar(
'',
leftTitle: '上一步',
onTap: () {
Navigator.pop(context);
},
... ...
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/screenutil.dart';
import 'package:one_key/provider/create_store_model.dart';
import 'package:one_key/res/colors.dart';
import 'package:one_key/utils/navigator_util.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:provider/provider.dart';
class EnterStoreNamePage extends StatefulWidget {
EnterStoreNamePage({Key key}) : super(key: key);
... ... @@ -14,8 +16,19 @@ class EnterStoreNamePage extends StatefulWidget {
}
class _EnterStoreNamePageState extends State<EnterStoreNamePage> {
TextEditingController _controller = TextEditingController();
@override
void initState() {
// TODO: implement initState
super.initState();
}
@override
Widget build(BuildContext context) {
CreateStoreModel createStoreModel =
Provider.of<CreateStoreModel>(context, listen: false);
_controller.text = createStoreModel.storeInfo.name;
return Scaffold(
backgroundColor: Colors.white,
appBar: SystemAppBar(
... ... @@ -43,6 +56,7 @@ class _EnterStoreNamePageState extends State<EnterStoreNamePage> {
fontWeight: FontWeight.bold)),
VEmptyView(100),
TextField(
controller: _controller,
// textAlignVertical: TextAlignVertical.bottom,
maxLines: 1,
// //光标颜色
... ... @@ -73,7 +87,9 @@ class _EnterStoreNamePageState extends State<EnterStoreNamePage> {
color: MyColours.color_bff6f7,
width: ScreenUtil().setWidth(2))),
),
onChanged: (value) {},
onChanged: (value) {
createStoreModel.storeInfo.name = value;
},
onEditingComplete: () {
FocusScope.of(context)
.requestFocus(FocusNode()); //点击空白处隐藏键盘
... ...
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/screenutil.dart';
import 'package:one_key/provider/create_store_model.dart';
import 'package:one_key/provider/other_login_provider.dart';
import 'package:one_key/provider/user_model.dart';
import 'package:one_key/res/colors.dart';
import 'package:one_key/route/route_handles.dart';
import 'package:one_key/utils/navigator_util.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:provider/provider.dart';
class EnterStorePhonePage extends StatefulWidget {
EnterStorePhonePage({Key key}) : super(key: key);
... ... @@ -14,12 +19,21 @@ class EnterStorePhonePage extends StatefulWidget {
}
class _EnterStorePhonePageState extends State<EnterStorePhonePage> {
TextEditingController _controller = TextEditingController();
@override
void initState() {
// TODO: implement initState
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
appBar: SystemAppBar(
'',
leftTitle: '上一步',
onTap: () {
Navigator.pop(context);
},
... ... @@ -42,44 +56,50 @@ class _EnterStorePhonePageState extends State<EnterStorePhonePage> {
fontSize: ScreenUtil().setSp(40),
fontWeight: FontWeight.bold)),
VEmptyView(100),
TextField(
// textAlignVertical: TextAlignVertical.bottom,
maxLines: 1,
// //光标颜色
// cursorColor:
// widget.isSelect ? Colors.white : MyColours.color_199095,
//输入文本的样式
style: TextStyle(
color: MyColours.color_333333,
fontSize: ScreenUtil().setSp(28),
),
// focusNode: _codeNode,
decoration: InputDecoration(
contentPadding: EdgeInsets.symmetric(
vertical: ScreenUtil().setWidth(32),
horizontal: ScreenUtil().setWidth(40)),
border: OutlineInputBorder(),
hintText: '请输入接单电话',
hintStyle: TextStyle(
color: MyColours.color_999999,
Consumer<CreateStoreModel>(builder: (context, model, _) {
_controller.text = model.storeInfo.phone;
return TextField(
// textAlignVertical: TextAlignVertical.bottom,
maxLines: 1,
controller: _controller,
// //光标颜色
// cursorColor:
// widget.isSelect ? Colors.white : MyColours.color_199095,
//输入文本的样式
style: TextStyle(
color: MyColours.color_333333,
fontSize: ScreenUtil().setSp(28),
),
enabledBorder: OutlineInputBorder(
borderSide: BorderSide(
color: MyColours.color_bff6f7,
width: ScreenUtil().setWidth(2))),
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(
color: MyColours.color_bff6f7,
width: ScreenUtil().setWidth(2))),
),
onChanged: (value) {},
onEditingComplete: () {
FocusScope.of(context)
.requestFocus(FocusNode()); //点击空白处隐藏键盘
},
keyboardType: TextInputType.text,
),
// focusNode: _codeNode,
decoration: InputDecoration(
contentPadding: EdgeInsets.symmetric(
vertical: ScreenUtil().setWidth(32),
horizontal: ScreenUtil().setWidth(40)),
border: OutlineInputBorder(),
hintText: '请输入接单电话',
hintStyle: TextStyle(
color: MyColours.color_999999,
fontSize: ScreenUtil().setSp(28),
),
enabledBorder: OutlineInputBorder(
borderSide: BorderSide(
color: MyColours.color_bff6f7,
width: ScreenUtil().setWidth(2))),
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(
color: MyColours.color_bff6f7,
width: ScreenUtil().setWidth(2))),
),
onChanged: (value) {
model.storeInfo.phone = value;
},
onEditingComplete: () {
FocusScope.of(context)
.requestFocus(FocusNode()); //点击空白处隐藏键盘
},
keyboardType: TextInputType.text,
);
}),
VEmptyView(160),
RoundButton(
text: '下一步',
... ... @@ -94,6 +114,5 @@ class _EnterStorePhonePageState extends State<EnterStorePhonePage> {
},
)
])))));
;
}
}
... ...
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/screenutil.dart';
import 'package:one_key/provider/create_store_model.dart';
import 'package:one_key/res/colors.dart';
import 'package:one_key/utils/navigator_util.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:provider/provider.dart';
class EnterStorePositionPage extends StatefulWidget {
EnterStorePositionPage({Key key}) : super(key: key);
... ... @@ -14,12 +16,24 @@ class EnterStorePositionPage extends StatefulWidget {
}
class _EnterStorePositionPageState extends State<EnterStorePositionPage> {
TextEditingController _controller = TextEditingController();
@override
void initState() {
// TODO: implement initState
super.initState();
}
@override
Widget build(BuildContext context) {
CreateStoreModel createStoreModel =
Provider.of<CreateStoreModel>(context, listen: false);
_controller.text = createStoreModel.storeInfo.position;
return Scaffold(
backgroundColor: Colors.white,
appBar: SystemAppBar(
'',
leftTitle: '上一步',
onTap: () {
Navigator.pop(context);
},
... ... @@ -43,6 +57,7 @@ class _EnterStorePositionPageState extends State<EnterStorePositionPage> {
fontWeight: FontWeight.bold)),
VEmptyView(100),
TextField(
controller: _controller,
// textAlignVertical: TextAlignVertical.bottom,
maxLines: 1,
// //光标颜色
... ... @@ -73,7 +88,9 @@ class _EnterStorePositionPageState extends State<EnterStorePositionPage> {
color: MyColours.color_bff6f7,
width: ScreenUtil().setWidth(2))),
),
onChanged: (value) {},
onChanged: (value) {
createStoreModel.storeInfo.position = value;
},
onEditingComplete: () {
FocusScope.of(context)
.requestFocus(FocusNode()); //点击空白处隐藏键盘
... ...
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/screenutil.dart';
import 'package:one_key/provider/create_store_model.dart';
import 'package:one_key/res/colors.dart';
import 'package:one_key/utils/navigator_util.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:provider/provider.dart';
class EnterStoreTimePage extends StatefulWidget {
EnterStoreTimePage({Key key}) : super(key: key);
... ... @@ -14,12 +16,24 @@ class EnterStoreTimePage extends StatefulWidget {
}
class _EnterStoreTimePageState extends State<EnterStoreTimePage> {
TextEditingController _controller = TextEditingController();
@override
void initState() {
// TODO: implement initState
super.initState();
}
@override
Widget build(BuildContext context) {
CreateStoreModel createStoreModel =
Provider.of<CreateStoreModel>(context, listen: false);
_controller.text = createStoreModel.storeInfo.time;
return Scaffold(
backgroundColor: Colors.white,
appBar: SystemAppBar(
'',
leftTitle: '上一步',
onTap: () {
Navigator.pop(context);
},
... ... @@ -44,6 +58,7 @@ class _EnterStoreTimePageState extends State<EnterStoreTimePage> {
VEmptyView(100),
TextField(
// textAlignVertical: TextAlignVertical.bottom,
controller: _controller,
maxLines: 1,
// //光标颜色
// cursorColor:
... ... @@ -73,7 +88,9 @@ class _EnterStoreTimePageState extends State<EnterStoreTimePage> {
color: MyColours.color_bff6f7,
width: ScreenUtil().setWidth(2))),
),
onChanged: (value) {},
onChanged: (value) {
createStoreModel.storeInfo.time = value;
},
onEditingComplete: () {
FocusScope.of(context)
.requestFocus(FocusNode()); //点击空白处隐藏键盘
... ...
... ... @@ -2,6 +2,7 @@ import 'dart:io';
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter_ijkplayer/flutter_ijkplayer.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/models/upload_img_model.dart';
... ... @@ -72,6 +73,8 @@ class _VideoPickerWidgetState extends DisposableState<VideoPickerWidget> {
//////#相机拍照,单图选择
Future _getImageFromPictureOrCamera(ImageSource imageSource) async {
final pickedFile = await picker.getImage(source: imageSource);
// String ddd = Utils.getPicSuffix(pickedFile.path);
// print(ddd);
setState(() {
if (pickedFile != null) {
UploadImgModel imgModel = UploadImgModel();
... ... @@ -98,7 +101,8 @@ class _VideoPickerWidgetState extends DisposableState<VideoPickerWidget> {
Future _getVideoFromPictureOrCamera(ImageSource imageSource) async {
final pickedFile = await picker.getVideo(
source: imageSource, maxDuration: const Duration(seconds: 15));
String ddd = Utils.getPicSuffix(pickedFile.path);
print(ddd);
await VideoCompress.setLogLevel(0);
final info = await VideoCompress.getMediaInfo(pickedFile.path);
String duration = '00';
... ... @@ -352,240 +356,255 @@ class _VideoPickerWidgetState extends DisposableState<VideoPickerWidget> {
/// 九宫格
Widget _getGridImg(count, context, isLinjie) {
return GridView.builder(
controller: widget.scrollController,
// padding: EdgeInsets.only(top: ScreenUtil().getAdapterSize(10)),
shrinkWrap: true,
itemCount: count,
//SliverGridDelegateWithFixedCrossAxisCount 构建一个横轴固定数量Widget
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
//横轴元素个数
crossAxisCount: 3,
//纵轴间距
mainAxisSpacing: ScreenUtil().setWidth(30),
//横轴间距
crossAxisSpacing: ScreenUtil().setWidth(30),
//子组件宽高长度比例
childAspectRatio: 1.0),
itemBuilder: (BuildContext context, int index) {
var linjie = widget.maxImageNumber;
if (isLinjie) {
linjie = widget.maxImageNumber - 2;
}
if (index == count - 2 && index < linjie) {
return InkWell(
onTap: () {
// 触摸收起键盘
FocusScope.of(context).requestFocus(FocusNode());
_openModalBottomSheet(context, FileType.image);
},
child: Container(
width: ScreenUtil().setWidth(90 * 2),
height: ScreenUtil().setWidth(90 * 2),
decoration: BoxDecoration(
border: Border.all(
color: MyColours.color_E0E0E0,
width: ScreenUtil().setWidth(2)),
),
child: Column(
children: [
VEmptyView(74),
Image.asset(
Utils.getImgPath('add_image'),
width: ScreenUtil().setWidth(32),
height: ScreenUtil().setWidth(32),
return Container(
height: ScreenUtil().setWidth(90 * 2),
child: ListView.builder(
controller: widget.scrollController,
// padding: EdgeInsets.only(top: ScreenUtil().getAdapterSize(10)),
shrinkWrap: true,
itemCount: count,
//列表高度
itemExtent: ScreenUtil().setWidth(100 * 2),
scrollDirection: Axis.horizontal,
padding:
EdgeInsets.symmetric(horizontal: ScreenUtil().setWidth(70)),
//SliverGridDelegateWithFixedCrossAxisCount 构建一个横轴固定数量Widget
// gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
// //横轴元素个数
// crossAxisCount: 3,
// //纵轴间距
// mainAxisSpacing: ScreenUtil().setWidth(30),
// //横轴间距
// crossAxisSpacing: ScreenUtil().setWidth(30),
// //子组件宽高长度比例
// childAspectRatio: 1.0),
itemBuilder: (BuildContext context, int index) {
var linjie = widget.maxImageNumber;
if (isLinjie) {
linjie = widget.maxImageNumber - 2;
}
if (index == count - 2 && index < linjie) {
return InkWell(
onTap: () {
// 触摸收起键盘
FocusScope.of(context).requestFocus(FocusNode());
_openModalBottomSheet(context, FileType.image);
},
child: Container(
width: ScreenUtil().setWidth(110 * 2),
height: ScreenUtil().setWidth(90 * 2),
margin: EdgeInsets.only(right: ScreenUtil().setWidth(20)),
decoration: BoxDecoration(
border: Border.all(
color: MyColours.color_E0E0E0,
width: ScreenUtil().setWidth(2)),
),
VEmptyView(10),
Text(
'添加图片',
style: TextStyle(
fontSize: ScreenUtil().setSp(24),
color: MyColours.color_999999),
)
],
)),
);
}
if (index == count - 1 && index <= linjie) {
return InkWell(
onTap: () {
// 触摸收起键盘
FocusScope.of(context).requestFocus(FocusNode());
_openModalBottomSheet(context, FileType.video);
},
child: Container(
width: ScreenUtil().setWidth(90 * 2),
height: ScreenUtil().setWidth(90 * 2),
decoration: BoxDecoration(
border: Border.all(
color: MyColours.color_E0E0E0,
width: ScreenUtil().setWidth(2)),
),
child: Column(
children: [
VEmptyView(74),
Image.asset(
Utils.getImgPath('add_image'),
width: ScreenUtil().setWidth(32),
height: ScreenUtil().setWidth(32),
child: Column(
children: [
VEmptyView(46),
Image.asset(
Utils.getImgPath('add_image'),
width: ScreenUtil().setWidth(44),
height: ScreenUtil().setWidth(40),
),
VEmptyView(10),
Text(
'上传照片',
style: TextStyle(
fontSize: ScreenUtil().setSp(24),
color: MyColours.color_999999),
)
],
)),
);
}
if (index == count - 1 && index <= linjie) {
return InkWell(
onTap: () {
// 触摸收起键盘
FocusScope.of(context).requestFocus(FocusNode());
_openModalBottomSheet(context, FileType.video);
},
child: Container(
width: ScreenUtil().setWidth(110 * 2),
height: ScreenUtil().setWidth(90 * 2),
margin: EdgeInsets.only(right: ScreenUtil().setWidth(20)),
decoration: BoxDecoration(
border: Border.all(
color: MyColours.color_E0E0E0,
width: ScreenUtil().setWidth(2)),
),
VEmptyView(10),
Text(
'添加视频',
style: TextStyle(
fontSize: ScreenUtil().setSp(24),
color: MyColours.color_999999),
)
],
)),
);
}
child: Column(
children: [
VEmptyView(46),
Image.asset(
Utils.getImgPath('add_video'),
width: ScreenUtil().setWidth(44),
height: ScreenUtil().setWidth(40),
),
VEmptyView(10),
Text(
'上传视频',
style: TextStyle(
fontSize: ScreenUtil().setSp(24),
color: MyColours.color_999999),
)
],
)),
);
}
return widget.model.imageListDenvironment.length < 1
? Text('')
: InkWell(
onTap: () {
if (widget.model.imageListDenvironment[index].process ==
1) {
widget.model.imageQiniuUrlList = [];
if (widget.model.imageListDenvironment[index].qiniuUrl !=
null) {
if (widget
.model.imageListDenvironment[index].fileType ==
FileType.image) {
List<UploadImgModel> temp = [];
temp.addAll(widget.model.imageListDenvironment);
temp.removeWhere(
(element) => element.fileType == FileType.video);
for (int i = 0; i < temp.length; i++) {
widget.model.imageQiniuUrlList
.add(temp[i].qiniuUrl);
}
return widget.model.imageListDenvironment.length < 1
? Text('')
: InkWell(
onTap: () {
if (widget.model.imageListDenvironment[index].process ==
1) {
widget.model.imageQiniuUrlList = [];
if (widget.model.imageListDenvironment[index]
.qiniuUrl !=
null) {
if (widget.model.imageListDenvironment[index]
.fileType ==
FileType.image) {
List<UploadImgModel> temp = [];
temp.addAll(widget.model.imageListDenvironment);
temp.removeWhere((element) =>
element.fileType == FileType.video);
for (int i = 0; i < temp.length; i++) {
widget.model.imageQiniuUrlList
.add(temp[i].qiniuUrl);
}
///没有上传完成的不可以点击
_showPhotoView(
context, index, widget.model.imageQiniuUrlList);
} else if (widget
.model.imageListDenvironment[index].fileType ==
FileType.video) {
NavigatorUtil.goPlayVideoPage(context,
urlStr: widget
.model.imageListDenvironment[index].qiniuUrl);
///没有上传完成的不可以点击
_showPhotoView(context, index,
widget.model.imageQiniuUrlList);
} else if (widget.model.imageListDenvironment[index]
.fileType ==
FileType.video) {
NavigatorUtil.goPlayVideoPage(context,
urlStr: widget.model
.imageListDenvironment[index].qiniuUrl);
}
}
}
}
}
},
child: Stack(
children: [
Stack(
alignment: Alignment.topRight,
},
child: Stack(
children: [
widget.model.imageListDenvironment[index].fileType ==
FileType.image
? Image.file(
widget
.model.imageListDenvironment[index].file,
fit: BoxFit.cover,
width: ScreenUtil().setWidth(100 * 2),
height: ScreenUtil().setWidth(100 * 2),
)
: Image.file(
widget.model.imageListDenvironment[index]
.thumbnailPath,
fit: BoxFit.cover,
width: ScreenUtil().setWidth(100 * 2),
height: ScreenUtil().setWidth(100 * 2),
)
// : FutureBuilder(
// //显示缩略图
// future: _initializeVideoPlayerFuture,
// builder: (context, snapshot) {
// print(snapshot.connectionState);
// if (snapshot.hasError)
// print(snapshot.error);
// if (snapshot.connectionState ==
// ConnectionState.done) {
// return Container(
// // width: ScreenUtil().setWidth(225),
// child: AspectRatio(
// aspectRatio: 1 / 1,
Stack(
alignment: Alignment.topRight,
children: [
widget.model.imageListDenvironment[index]
.fileType ==
FileType.image
? Image.file(
widget.model.imageListDenvironment[index]
.file,
fit: BoxFit.cover,
width: ScreenUtil().setWidth(90 * 2),
height: ScreenUtil().setWidth(90 * 2),
)
: Image.file(
widget.model.imageListDenvironment[index]
.thumbnailPath,
fit: BoxFit.cover,
width: ScreenUtil().setWidth(90 * 2),
height: ScreenUtil().setWidth(90 * 2),
)
// : FutureBuilder(
// //显示缩略图
// future: _initializeVideoPlayerFuture,
// builder: (context, snapshot) {
// print(snapshot.connectionState);
// if (snapshot.hasError)
// print(snapshot.error);
// if (snapshot.connectionState ==
// ConnectionState.done) {
// return Container(
// // width: ScreenUtil().setWidth(225),
// child: AspectRatio(
// aspectRatio: 1 / 1,
// // aspectRatio: _controller.value.aspectRatio,
// child: VideoPlayer(_controller),
// ),
// );
// } else {
// return Center(
// child: CircularProgressIndicator(),
// );
// }
// },
// ),
,
Offstage(
offstage: widget.model.imageListDenvironment[index]
.process <
1,
child: GestureDetector(
child: Image.asset(
Utils.getImgPath("delete"),
width: ScreenUtil().setWidth(40),
height: ScreenUtil().setWidth(40),
// // aspectRatio: _controller.value.aspectRatio,
// child: VideoPlayer(_controller),
// ),
// );
// } else {
// return Center(
// child: CircularProgressIndicator(),
// );
// }
// },
// ),
,
Offstage(
offstage: widget.model
.imageListDenvironment[index].process <
1,
child: GestureDetector(
child: Image.asset(
Utils.getImgPath("delete"),
width: ScreenUtil().setWidth(40),
height: ScreenUtil().setWidth(40),
),
onTap: () {
//点击删除按钮
setState(() {
widget.model.imageListDenvironment
.removeWhere((element) =>
element ==
widget.model
.imageListDenvironment[
index]);
widget.model.imageQiniuUrlList
.removeWhere((element) =>
element ==
widget.model
.imageQiniuUrlList[index]);
});
},
),
),
onTap: () {
//点击删除按钮
setState(() {
widget.model.imageListDenvironment
.removeWhere((element) =>
element ==
widget.model
.imageListDenvironment[index]);
widget.model.imageQiniuUrlList.removeWhere(
(element) =>
element ==
widget
.model.imageQiniuUrlList[index]);
});
},
),
],
),
// Offstage(
// offstage: widget.model.imageListDenvironment[index].process == 1,
// child: Progress(widget.model.imageListDenvironment[index].process),
// ),
widget.model.imageListDenvironment[index].process == 1
? widget.model.imageListDenvironment[index]
.fileType ==
FileType.video
? Align(
alignment: Alignment.center,
child: Image.asset(
Utils.getImgPath('play'),
width: ScreenUtil().setWidth(60),
))
: Container()
: Progress(
widget.model.imageListDenvironment[index]
.process,
size: 90.0,
),
// widget.model.imageListDenvironment[index].fileType ==
// FileType.video
// ? Align(
// alignment: Alignment.bottomRight,
// child: Padding(
// padding: EdgeInsets.only(
// bottom: ScreenUtil().setWidth(10),
// right: ScreenUtil().setWidth(10)),
// child: Text(
// '00:${widget.model.imageListDenvironment[index].duration}',
// style: TextStyle(
// color: MyColours.color_333333,
// fontSize: ScreenUtil().setSp(24)),
// )),
// )
// : Container()
],
),
// Offstage(
// offstage: widget.model.imageListDenvironment[index].process == 1,
// child: Progress(widget.model.imageListDenvironment[index].process),
// ),
widget.model.imageListDenvironment[index].process == 1
? widget.model.imageListDenvironment[index]
.fileType ==
FileType.video
? Align(
alignment: Alignment.center,
child: Image.asset(
Utils.getImgPath('check_g'),
width: ScreenUtil().setWidth(40),
))
: Container()
: Progress(widget
.model.imageListDenvironment[index].process),
widget.model.imageListDenvironment[index].fileType ==
FileType.video
? Align(
alignment: Alignment.bottomRight,
child: Padding(
padding: EdgeInsets.only(
bottom: ScreenUtil().setWidth(10),
right: ScreenUtil().setWidth(10)),
child: Text(
'00:${widget.model.imageListDenvironment[index].duration}',
style: TextStyle(
color: MyColours.color_333333,
fontSize: ScreenUtil().setSp(24)),
)),
)
: Container()
],
));
});
));
}));
}
}
... ...
... ... @@ -4,7 +4,10 @@ import 'package:common_utils/common_utils.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/screenutil.dart';
import 'package:one_key/app.dart';
import 'package:one_key/models/store_info.dart';
import 'package:one_key/provider/create_store_model.dart';
import 'package:one_key/provider/other_login_provider.dart';
import 'package:one_key/provider/user_model.dart';
import 'package:one_key/res/colors.dart';
import 'package:one_key/utils/navigator_util.dart';
import 'package:one_key/utils/utils.dart';
... ... @@ -268,39 +271,35 @@ class _BindingPhoneState extends State<BindingPhone> {
radius: ScreenUtil().setWidth(20),
fontSize: 34,
isBold: false,
onPressed: () {
NavigatorUtil.goIfNeedCreateStorePage(context);
if (phone == null || phone.trim().length == 0) {
Utils.showToast('请输入手机号码');
return;
}
if (code == null || code.trim().length == 0) {
Utils.showToast('请输入验证码');
return;
}
if (model.code != null && !codeEnabled) {
Utils.showToast('验证码已失效,请重新获取');
return;
}
if (model.code == null) {
Utils.showToast('请获取验证码');
return;
}
if (model.code != code) {
Utils.showToast('您输入的验证码不正确,请重新输入');
return;
}
// if (countdownTime < 1) {
onPressed: () async {
// if (phone == null || phone.trim().length == 0) {
// Utils.showToast('请输入手机号码');
// return;
// }
// if (code == null || code.trim().length == 0) {
// Utils.showToast('请输入验证码');
// return;
// }
// if (model.code != null && !codeEnabled) {
// Utils.showToast('验证码已失效,请重新获取');
// return;
// }
// if (model.code == null) {
// Utils.showToast('请获取验证码');
// return;
// }
// if (model.code != code) {
// Utils.showToast('您输入的验证码不正确,请重新输入');
// return;
// }
CreateStoreModel createStoreModel =
Provider.of<CreateStoreModel>(context,
listen: false);
// 正确
//真正登录成功标志
App.sp.setBool("isLogin", true);
createStoreModel.storeInfo = StoreInfo();
//新建店铺默认接单电话号码
createStoreModel.storeInfo.phone = phone;
NavigatorUtil.goIfNeedCreateStorePage(context);
//错误
// Utils.showToast('您输入的验证码有误,请重新输入');
},
)
... ...
import 'dart:convert';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:dotted_border/dotted_border.dart';
import 'package:flutter/material.dart';
import 'package:flutter_easyrefresh/easy_refresh.dart';
import 'package:flutter_screenutil/screenutil.dart';
import 'package:one_key/app.dart';
import 'package:one_key/constant/state.dart';
import 'package:one_key/models/check_seller_acc_model.dart';
import 'package:one_key/models/user.dart';
import 'package:one_key/pages/create_store/create_store.dart';
import 'package:one_key/pages/login/if_need_create_store_item.dart';
import 'package:one_key/provider/create_store_model.dart';
import 'package:one_key/provider/other_login_provider.dart';
import 'package:one_key/provider/user_model.dart';
import 'package:one_key/res/colors.dart';
import 'package:one_key/utils/navigator_util.dart';
import 'package:one_key/utils/utils.dart';
import 'package:one_key/widgets/page_exception.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:provider/provider.dart';
class IfNeedCreateStore extends StatefulWidget {
IfNeedCreateStore({Key key}) : super(key: key);
final List<CheckSellerAccSunModel> data;
IfNeedCreateStore({Key key, this.data}) : super(key: key);
@override
_IfNeedCreateStoreState createState() => _IfNeedCreateStoreState();
... ... @@ -16,9 +33,58 @@ class IfNeedCreateStore extends StatefulWidget {
class _IfNeedCreateStoreState extends State<IfNeedCreateStore> {
ScrollController _controller = ScrollController();
bool noStore = false;
OtherLoginProvider otherLoginProvider;
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) {
_checkSellerAcc();
});
}
///获取是否有店
_checkSellerAcc({showLoading = false}) async {
CreateStoreModel createStoreModel =
Provider.of<CreateStoreModel>(context, listen: false);
Map<String, String> params = {
"phone": createStoreModel.storeInfo.phone,
"unionid": App.sp.getString("unionid"),
};
await otherLoginProvider.checkSellerAcc(context, params,
showLoading: showLoading);
}
///进入某个店铺
_loginStore(context, CheckSellerAccSunModel sunModel) {
UserModel userModel = Provider.of<UserModel>(context, listen: false);
Map<String, dynamic> seller = sunModel.toJson();
Map<String, dynamic> userMap = {
"openid": seller['uid'],
"account": seller['account'],
"role_name": seller['role_name'],
"sellerid": seller['id'],
"sellercode": seller['seller_code'],
"sellername": seller['sellername'],
"sellerphone": seller['seller_tel'],
"sellerAddr": '',
"scatter": 0,
"room": 0,
"cassette": 0,
"morning": "",
"noon": "",
"night": "",
};
userModel.saveUserInfo(User.fromJson(userMap));
userModel.getSellerInfo(
context,
{"seller_id": seller['id'], "seller_openid": seller['openid']},
userMap);
}
@override
Widget build(BuildContext context) {
otherLoginProvider = Provider.of<OtherLoginProvider>(context, listen: true);
return Scaffold(
backgroundColor: Colors.white,
appBar: SystemAppBar(
... ... @@ -28,79 +94,266 @@ class _IfNeedCreateStoreState extends State<IfNeedCreateStore> {
Navigator.pop(context);
},
),
body: Container(
width: double.infinity,
padding: EdgeInsets.all(ScreenUtil().setWidth(40)),
child: Column(crossAxisAlignment: CrossAxisAlignment.center,
// mainAxisAlignment: MainAxisAlignment.center,
children: [
VEmptyView(80),
Image.asset(
noStore
? Utils.getImgPath('not_member')
: Utils.getImgPath('is_member'),
width: ScreenUtil().setWidth(120),
height: ScreenUtil().setWidth(120),
),
VEmptyView(60),
Text(
noStore ? '您还没有绑定任何店铺' : '您已经是“xxxxx”的员工',
style: TextStyle(
fontSize: ScreenUtil().setSp(32),
color: MyColours.color_333333,
fontWeight: FontWeight.bold),
),
VEmptyView(172),
InkWell(
onTap: () {
if (noStore) {
//跳转至新建店铺流程
NavigatorUtil.goEnterStoreNamePage(context);
} else {
//进入店铺
}
},
child: Container(
width: double.infinity,
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(40),
vertical: ScreenUtil().setWidth(18)),
decoration: BoxDecoration(
color: MyColours.color_24A4A8,
borderRadius: BorderRadius.circular(
ScreenUtil().setWidth(10))),
child: Text(
noStore ? '创建店铺' : '进入“xxxxxxx”',
textAlign: TextAlign.center,
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle(
color: MyColours.color_ffffff,
fontSize: ScreenUtil().setSp(34)),
),
)),
noStore
? Container()
: Container(
margin:
EdgeInsets.only(top: ScreenUtil().setWidth(40)),
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(30),
),
child: InkWell(
onTap: () {
//跳转至新建店铺流程
NavigatorUtil.goEnterStoreNamePage(context);
},
child: Text(
'不是我,我要重新建店',
textAlign: TextAlign.center,
body: Padding(
padding:
EdgeInsets.symmetric(horizontal: ScreenUtil().setWidth(70)),
child: Consumer<OtherLoginProvider>(builder: (context, model, _) {
if (model.pageState != PageState.Success) {
if (model.pageState == PageState.Empty) {
return Container(
width: double.infinity,
padding: EdgeInsets.all(ScreenUtil().setWidth(40)),
child:
Column(crossAxisAlignment: CrossAxisAlignment.center,
// mainAxisAlignment: MainAxisAlignment.center,
children: [
VEmptyView(80),
Image.asset(
Utils.getImgPath('not_member'),
width: ScreenUtil().setWidth(120),
height: ScreenUtil().setWidth(120),
),
VEmptyView(60),
Text(
'您还没有绑定任何店铺',
style: TextStyle(
color: MyColours.color_199095,
fontSize: ScreenUtil().setSp(30)),
fontSize: ScreenUtil().setSp(32),
color: MyColours.color_333333,
fontWeight: FontWeight.bold),
),
)),
])));
VEmptyView(172),
InkWell(
onTap: () {
//跳转至新建店铺流程
NavigatorUtil.goEnterStoreNamePage(context);
},
child: Container(
width: double.infinity,
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(40),
vertical: ScreenUtil().setWidth(18)),
decoration: BoxDecoration(
color: MyColours.color_24A4A8,
borderRadius: BorderRadius.circular(
ScreenUtil().setWidth(10))),
child: Text(
'创建店铺',
textAlign: TextAlign.center,
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle(
color: MyColours.color_ffffff,
fontSize: ScreenUtil().setSp(34)),
),
)),
]));
}
return ExceptionPage(
pageState: model.pageState,
callback: () {
_checkSellerAcc(showLoading: true);
},
emptyMsg: "",
emptyImg: "empty_search",
showMsg: "加载中,请稍后...",
);
} else {
return Column(
children: [
VEmptyView(40),
Text(
'请选择您要进入的店铺',
style: TextStyle(
fontSize: ScreenUtil().setWidth(32),
color: MyColours.color_333333,
fontWeight: FontWeight.bold),
),
VEmptyView(100),
Expanded(
child: GridView.builder(
// controller: widget.scrollController,
// padding: EdgeInsets.only(top: ScreenUtil().getAdapterSize(10)),
shrinkWrap: true,
itemCount: model.sellerList.length + 1,
cacheExtent: ScreenUtil().setWidth(197 * 2),
//SliverGridDelegateWithFixedCrossAxisCount 构建一个横轴固定数量Widget
gridDelegate:
SliverGridDelegateWithFixedCrossAxisCount(
//横轴元素个数
crossAxisCount: 2,
//纵轴间距
mainAxisSpacing: ScreenUtil().setWidth(50),
//横轴间距
crossAxisSpacing: ScreenUtil().setWidth(50),
//子组件宽高长度比例
childAspectRatio: 140 / 197),
itemBuilder: (BuildContext context, int index) {
if (index == model.sellerList.length) {
return InkWell(
onTap: () {
//跳转至新建店铺流程
NavigatorUtil.goEnterStoreNamePage(
context);
},
child: DottedBorder(
dashPattern: [5, 5, 5, 5],
borderType: BorderType.RRect,
radius: Radius.circular(
ScreenUtil().setWidth(10)),
// padding: EdgeInsets.all(ScreenUtil().setWidth(70)),
color: MyColours.color_cccccc,
strokeWidth: ScreenUtil().setWidth(2),
child: ClipRRect(
borderRadius: BorderRadius.all(
Radius.circular(12)),
child: Container(
height:
ScreenUtil().setWidth(197 * 2),
width: ScreenUtil().setWidth(140 * 2),
child: Column(
mainAxisAlignment:
MainAxisAlignment.center,
children: [
Image.asset(
Utils.getImgPath('add_store'),
width: ScreenUtil()
.setWidth(32)),
VEmptyView(10),
Text(
'创建店铺',
style: TextStyle(
color:
MyColours.color_999999,
fontSize:
ScreenUtil().setSp(24)),
)
],
),
),
),
));
}
return InkWell(
onTap: () {
_loginStore(context, model.sellerList[index]);
},
child: IfNeedCreateStoreItem(
model: model.sellerList[index]),
);
})),
// VEmptyView(40),
],
);
}
})));
}
}
// body:
// return Padding(
// padding: EdgeInsets.fromLTRB(ScreenUtil().setWidth(40), 0,
// ScreenUtil().setWidth(40), ScreenUtil().setWidth(40)),
// child: EasyRefresh.custom(
// // controller: _controller,
// slivers: [
// SliverList(
// delegate: SliverChildBuilderDelegate(
// (BuildContext context, int index) {
// return Container(
// child: Container(
// alignment: Alignment.centerLeft,
// height: ScreenUtil().setWidth(90),
// child: InkWell(
// onTap: () {
// //跳转至新建店铺流程
// NavigatorUtil.goEnterStoreNamePage(context);
// },
// child: Text(
// '不是我的店铺,我要重新建店',
// textAlign: TextAlign.center,
// style: TextStyle(
// color: MyColours.color_199095,
// fontSize: ScreenUtil().setSp(30)),
// ),
// )),
// );
// }, childCount: 1),
// ),
// SliverList(
// delegate: SliverChildBuilderDelegate(
// (BuildContext context, int index) {
// return DottedBorder(
// borderType: BorderType.RRect,
// radius: Radius.circular(ScreenUtil().setWidth(10)),
// // padding: EdgeInsets.all(ScreenUtil().setWidth(70)),
// color: MyColours.color_cccccc,
// strokeWidth: ScreenUtil().setWidth(2),
// child: ClipRRect(
// borderRadius: BorderRadius.all(Radius.circular(12)),
// child: Container(
// height: ScreenUtil().setWidth(197 * 2),
// width: ScreenUtil().setWidth(140 * 2),
// color: Colors.amber,
// ),
// ),
// );
// }, childCount: 1),
// ),
// SliverList(
// delegate: SliverChildBuilderDelegate(
// (BuildContext context, int index) {
// return ListTile(
// onTap: () {
// UserModel userModel = Provider.of<UserModel>(
// context,
// listen: false);
// Map<String, dynamic> seller =
// model.sellerList[index].toJson();
// Map<String, dynamic> daily =
// jsonDecode(model.sellerList[index].daily);
// Map<String, dynamic> user = {};
// user['sellerAddr'] = seller['real_address'] ??
// seller['map_address'];
// // user['scatter'] = baseResp.data['scatter'];
// // user['room'] = baseResp.data['room'];
// // user['cassette'] = baseResp.data['cassette'];
// user['morning'] = daily['morning'];
// user['noon'] = daily['noon'];
// user['night'] = daily['night'];
// userModel.saveUserInfo(User.fromJson(user));
// App.sp.setBool("isLogin", true);
// App.sp.setString("is_call_tel",
// seller['is_call_tel'].toString());
// NavigatorUtil.goHomePage(context);
// },
// leading: Container(
// width: ScreenUtil().setWidth(70),
// height: ScreenUtil().setWidth(70),
// decoration: BoxDecoration(
// shape: BoxShape.circle,
// image: DecorationImage(
// image: NetworkImage(
// '${model.sellerList[index].sellerImage}'),
// fit: BoxFit.cover))),
// title: Text(
// '${model.sellerList[index].sellername}',
// style: TextStyle(
// color: MyColours.color_333333,
// fontSize: ScreenUtil().setSp(28),
// ),
// ));
// }, childCount: model.sellerList.length),
// )
// ],
// onRefresh: () async {
// // offset = 0;
// // getMessage(showLoading: false);
// },
// onLoad: () async {
// // offset++;
// // getMessage(showLoading: false);
// },
// ));
// }
// }));
// }}
... ...
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/screenutil.dart';
import 'package:one_key/models/check_seller_acc_model.dart';
import 'package:one_key/res/colors.dart';
import 'package:one_key/widgets/v_empty_view.dart';
class IfNeedCreateStoreItem extends StatefulWidget {
final CheckSellerAccSunModel model;
IfNeedCreateStoreItem({Key key, this.model}) : super(key: key);
@override
_IfNeedCreateStoreItemState createState() => _IfNeedCreateStoreItemState();
}
class _IfNeedCreateStoreItemState extends State<IfNeedCreateStoreItem> {
@override
Widget build(BuildContext context) {
return Stack(
children: [
Container(
decoration: BoxDecoration(
border: Border.all(
width: ScreenUtil().setWidth(2),
color: MyColours.color_D7F7F7),
borderRadius: BorderRadius.circular(ScreenUtil().setWidth(10))),
),
Positioned(
top: 0,
left: 0,
child: ClipRRect(
//圆角图片
borderRadius: BorderRadius.only(
topRight: Radius.circular(ScreenUtil().setWidth(10)),
topLeft: Radius.circular(ScreenUtil().setWidth(10))),
child: Image.network(
widget.model.sellerImage,
fit: BoxFit.cover,
width: ScreenUtil().setWidth(140 * 2),
height: ScreenUtil().setWidth(140 * 2),
),
)),
Positioned(
bottom: 0,
left: ScreenUtil().setWidth(20),
right: ScreenUtil().setWidth(20),
child: Padding(
child: Column(
children: [
Text('${widget.model.sellername}',
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle(
fontSize: ScreenUtil().setWidth(30),
color: MyColours.color_333333)),
VEmptyView(10),
Text('店长',
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle(
fontSize: ScreenUtil().setWidth(24),
color: MyColours.color_666666))
],
),
padding:
EdgeInsets.symmetric(vertical: ScreenUtil().setWidth(14))))
],
);
}
}
... ...
... ... @@ -417,6 +417,7 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> {
// padding: EdgeInsets.only(top: ScreenUtil().getAdapterSize(10)),
shrinkWrap: true,
itemCount: count,
//SliverGridDelegateWithFixedCrossAxisCount 构建一个横轴固定数量Widget
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
//横轴元素个数
... ... @@ -450,15 +451,15 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> {
),
child: Column(
children: [
VEmptyView(74),
VEmptyView(46),
Image.asset(
Utils.getImgPath('add_image'),
width: ScreenUtil().setWidth(32),
height: ScreenUtil().setWidth(32),
width: ScreenUtil().setWidth(44),
height: ScreenUtil().setWidth(40),
),
VEmptyView(10),
Text(
'添加照片',
'上传照片',
style: TextStyle(
fontSize: ScreenUtil().setSp(24),
color: MyColours.color_999999),
... ... @@ -487,35 +488,40 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> {
child: Stack(
children: [
Stack(
alignment: Alignment.topRight,
// alignment: Alignment.topRight,
children: [
Image.file(
temp[index].file,
fit: BoxFit.cover,
width: ScreenUtil().setWidth(100 * 2),
height: ScreenUtil().setWidth(100 * 2),
Container(
color: Colors.red,
child: Image.file(
temp[index].file,
fit: BoxFit.cover,
width: ScreenUtil().setWidth(100 * 2),
height: ScreenUtil().setWidth(100 * 2),
),
),
Offstage(
offstage: temp[index].process < 1,
child: GestureDetector(
child: Image.asset(
Utils.getImgPath("delete"),
width: ScreenUtil().setWidth(40),
height: ScreenUtil().setWidth(40),
),
onTap: () {
//点击删除按钮
setState(() {
temp.removeWhere(
(element) => element == temp[index]);
widget.model.imageQiniuUrlList.removeWhere(
(element) =>
element ==
widget
.model.imageQiniuUrlList[index]);
});
},
),
child: Align(
alignment: Alignment.topRight,
child: GestureDetector(
child: Image.asset(
Utils.getImgPath("delete"),
width: ScreenUtil().setWidth(40),
height: ScreenUtil().setWidth(40),
),
onTap: () {
//点击删除按钮
setState(() {
temp.removeWhere(
(element) => element == temp[index]);
widget.model.imageQiniuUrlList
.removeWhere((element) =>
element ==
widget.model
.imageQiniuUrlList[index]);
});
},
)),
),
],
),
... ...
... ... @@ -4,14 +4,15 @@ import 'package:one_key/res/colors.dart';
class Progress extends StatelessWidget {
final double value;
Progress(this.value);
final double size;
Progress(this.value, {this.size = 100.0});
Widget get progress {
return Container(
width: ScreenUtil().setWidth(30),
height: ScreenUtil().setWidth(30),
padding: EdgeInsets.all(10),
color: Colors.red,
// color: Colors.red,
child: CircularProgressIndicator(
value: value,
// strokeWidth: 14,
... ... @@ -41,8 +42,8 @@ class Progress extends StatelessWidget {
// Column(
// children: [
Container(
width: ScreenUtil().setWidth(100 * 2),
height: ScreenUtil().setWidth(100 * 2),
width: ScreenUtil().setWidth(size * 2),
height: ScreenUtil().setWidth(size * 2),
color: Color.fromRGBO(0, 0, 0, 0.5),
child: Center(
child: Text('${integer}${unit}',
... ...
import 'package:flutter/material.dart';
import 'package:one_key/models/store_info.dart';
/**
* 第三方登陆
*/
class CreateStoreModel extends ChangeNotifier {
StoreInfo storeInfo; //新建店铺基本信息
}
... ...
import 'package:flutter/material.dart';
import 'package:one_key/constant/constant.dart';
import 'package:one_key/constant/state.dart';
import 'package:one_key/models/check_seller_acc_model.dart';
import 'package:one_key/models/phone_code_model.dart';
import 'package:one_key/net/base_resp.dart';
import 'package:one_key/net/dio_util.dart';
... ... @@ -10,9 +12,10 @@ import 'package:one_key/utils/utils.dart';
* 第三方登陆
*/
class OtherLoginProvider extends ChangeNotifier {
String phone; //手机号码
String code; //验证码
PhoneCodeSunModel phoneCodeSunModel;
PageState pageState = PageState.Loading; //是否有店铺
List<CheckSellerAccSunModel> sellerList = []; //绑定微信或者手机号码的商家列表
/// 给手机发送短信验证码
Future<bool> getPhoneCode(BuildContext context, Map<String, String> params,
... ... @@ -37,4 +40,30 @@ class OtherLoginProvider extends ChangeNotifier {
return false;
}
}
/// APP微信登录后检测是否存在商家
Future<List<CheckSellerAccSunModel>> checkSellerAcc(
BuildContext context, Map<String, String> params,
{isShowLoading = true, showLoading = false}) async {
BaseResp<dynamic> baseResp = await DioUtil()
.request<dynamic>(context, Method.get, HttpUrl.check_seller_acc,
data: params, showLoading: showLoading)
.catchError((error) {});
if (baseResp.code == Constant.status_success) {
if (baseResp.data.isNotEmpty) {
//解析解析
pageState = PageState.Success;
sellerList = CheckSellerAccModel.fromJson(baseResp.responseData).data;
} else {
pageState = PageState.Empty;
}
} else {
if (baseResp != null) {
Utils.showToast(baseResp.msg ?? "");
}
pageState = PageState.ConnectivityError;
}
notifyListeners();
return sellerList;
}
}
... ...
... ... @@ -71,7 +71,7 @@ class UserModel with ChangeNotifier {
"noon": "",
"night": "",
};
_saveUserInfo(User.fromJson(userMap));
saveUserInfo(User.fromJson(userMap));
return getSellerInfo(
context,
{"seller_id": seller['id'], "seller_openid": seller['openid']},
... ... @@ -101,7 +101,7 @@ class UserModel with ChangeNotifier {
user['morning'] = daily['morning'];
user['noon'] = daily['noon'];
user['night'] = daily['night'];
_saveUserInfo(User.fromJson(user));
saveUserInfo(User.fromJson(user));
App.sp.setBool("isLogin", true);
App.sp.setString("is_call_tel", seller['is_call_tel'].toString());
NavigatorUtil.goHomePage(context);
... ... @@ -253,7 +253,7 @@ class UserModel with ChangeNotifier {
}
/// 保存用户信息到 sp
_saveUserInfo(User user) {
saveUserInfo(User user) {
_user = user;
App.sp.setString('user', json.encode(user.toJson()));
}
... ...
... ... @@ -84,4 +84,5 @@ class MyColours {
static const Color color_C19E5B = Color(0xffC19E5B);
static const Color color_EEDBC4 = Color(0xffEEDBC4);
static const Color color_BA9953 = Color(0xffBA9953);
static const Color color_D7F7F7 = Color(0xffD7F7F7);
}
... ...
... ... @@ -3,7 +3,6 @@ import 'dart:convert';
import 'package:fluro/fluro.dart';
import 'package:flutter/material.dart';
import 'package:one_key/models/coupon_model.dart';
import 'package:one_key/models/notebook.dart';
import 'package:one_key/models/notebook_detail.dart';
import 'package:one_key/models/table_list.dart';
import 'package:one_key/pages/coupon/coupon_detail_page.dart';
... ... @@ -283,7 +282,8 @@ var baseInfoPageHandler = new Handler(
// CouponSunModel couponSunModel = CouponSunModel.fromJson(json.decode(
// FluroConvertUtils.fluroCnParamsDecode(params["couponSunModel"].first)));
return BaseInfoPage();
return ChangeNotifierProvider<UploadImageProvider>(
create: (_) => UploadImageProvider(), child: BaseInfoPage());
});
///绑定手机号码页面
... ... @@ -301,8 +301,9 @@ var ifNeedCreateStorePageHandler = new Handler(
handlerFunc: (BuildContext context, Map<String, List<Object>> params) {
// CouponSunModel couponSunModel = CouponSunModel.fromJson(json.decode(
// FluroConvertUtils.fluroCnParamsDecode(params["couponSunModel"].first)));
return IfNeedCreateStore();
return ChangeNotifierProvider<OtherLoginProvider>(
create: (_) => OtherLoginProvider(),
child: IfNeedCreateStore());
});
///新建店铺页面
... ... @@ -338,7 +339,8 @@ var enterStoreNamePageHandler = new Handler(
// CouponSunModel couponSunModel = CouponSunModel.fromJson(json.decode(
// FluroConvertUtils.fluroCnParamsDecode(params["couponSunModel"].first)));
// String urlStr = FluroConvertUtils.fluroCnParamsDecode(params["urlStr"].first);
return EnterStoreNamePage();
return ChangeNotifierProvider<UploadImageProvider>(
create: (_) => UploadImageProvider(), child: EnterStoreNamePage());
});
///店铺地址
... ... @@ -374,7 +376,8 @@ var enterStorePhonePageHandler = new Handler(
// CouponSunModel couponSunModel = CouponSunModel.fromJson(json.decode(
// FluroConvertUtils.fluroCnParamsDecode(params["couponSunModel"].first)));
// String urlStr = FluroConvertUtils.fluroCnParamsDecode(params["urlStr"].first);
return EnterStorePhonePage();
return ChangeNotifierProvider<OtherLoginProvider>(
create: (_) => OtherLoginProvider(), child: EnterStorePhonePage());
});
///店铺门头照片
... ... @@ -383,8 +386,9 @@ var enterStoreFrontPhotoPageHandler = new Handler(
// CouponSunModel couponSunModel = CouponSunModel.fromJson(json.decode(
// FluroConvertUtils.fluroCnParamsDecode(params["couponSunModel"].first)));
// String urlStr = FluroConvertUtils.fluroCnParamsDecode(params["urlStr"].first);
return ChangeNotifierProvider<UploadImageProvider>(
create: (_) => UploadImageProvider(), child: EnterStoreFrontPhotoPage());
return EnterStoreFrontPhotoPage();
// return ChangeNotifierProvider<UploadImageProvider>(
// create: (_) => UploadImageProvider(), child: EnterStoreFrontPhotoPage());
});
///店铺环境
... ... @@ -393,6 +397,7 @@ var enterStoreEnvironmentPageHandler = new Handler(
// CouponSunModel couponSunModel = CouponSunModel.fromJson(json.decode(
// FluroConvertUtils.fluroCnParamsDecode(params["couponSunModel"].first)));
// String urlStr = FluroConvertUtils.fluroCnParamsDecode(params["urlStr"].first);
return ChangeNotifierProvider<UploadImageProvider>(
create: (_) => UploadImageProvider(), child: EnterStoreEnvironmentPage());
return EnterStoreEnvironmentPage();
// return ChangeNotifierProvider<UploadImageProvider>(
// create: (_) => UploadImageProvider(), child: EnterStoreEnvironmentPage());
});
... ...
... ... @@ -203,8 +203,9 @@ class NavigatorUtil {
/// 是否新建店铺页面
static Future<dynamic> goIfNeedCreateStorePage(BuildContext context,
{replace = false}) {
return _navigateTo(context, "${Routes.if_need_create_store}",
{replace = false, bool noStore}) {
return _navigateTo(
context, "${Routes.if_need_create_store}?noStore=${noStore}",
replace: replace);
}
... ...
... ... @@ -28,6 +28,22 @@ import '../app.dart';
typedef BookTimeSetCallback = void Function(bool needChange);
class Utils {
/**
* 获取图片后缀
*
* @param img_path 图片或者视频路径
* @return
*/
static String getPicSuffix(String img_path) {
if (img_path == null || img_path.indexOf(".") == -1) {
return ""; //如果图片地址为null或者地址中没有"."就返回""
}
return img_path
.substring(img_path.lastIndexOf(".") + 1)
.trim()
.toLowerCase();
}
///手机号码格式验证
static bool phoneRegExp(String phone) {
RegExp exp = RegExp(
... ...
... ... @@ -295,6 +295,13 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.0.10"
dotted_border:
dependency: "direct main"
description:
name: dotted_border
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.0.7"
easy_contact_picker:
dependency: "direct main"
description:
... ... @@ -674,6 +681,20 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.8.0-nullsafety.1"
path_drawing:
dependency: transitive
description:
name: path_drawing
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.4.1+1"
path_parsing:
dependency: transitive
description:
name: path_parsing
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.1.4"
path_provider:
dependency: "direct main"
description:
... ...
... ... @@ -109,6 +109,8 @@ dependencies:
video_compress: ^2.1.1
#高德地图
amap_map_fluttify: 0.25.0
#虚线边框
dotted_border: ^1.0.7
... ...