if_need_create_store.dart 17.2 KB
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/base_info_provider.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/navigator_util.dart';
import 'package:one_key/utils/event_bus.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';
import 'package:tpns_flutter_plugin/tpns_flutter_plugin.dart';

class IfNeedCreateStore extends StatefulWidget {
  final List<CheckSellerAccSunModel> data;
  final bool changeStatus;
  IfNeedCreateStore({Key key, this.data, this.changeStatus = false})
      : super(key: key);

  @override
  _IfNeedCreateStoreState createState() => _IfNeedCreateStoreState();
}

class _IfNeedCreateStoreState extends State<IfNeedCreateStore>
    with WidgetsBindingObserver {
  ScrollController _controller = ScrollController();
  OtherLoginProvider otherLoginProvider;
  BaseIndoProvider _baseIndoProvider;
  String phone = ''; //客户经理个人资料电话
  String name = ''; //客户经理个人资料姓名

  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addObserver(this);
    WidgetsBinding.instance.addPostFrameCallback((_) {
      _checkSellerAcc();
    });
    bus.on("refresh_store_list", (arg) {
      _checkSellerAcc();
    });
  }

  @override
  void dispose() {
    super.dispose();
    WidgetsBinding.instance.removeObserver(this); //销毁观察者
    EventBus().emit('refresh_store_list');
  }

  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    super.didChangeAppLifecycleState(state);
    print(state.toString());
    switch (state) {
      case AppLifecycleState.inactive: // 处于这种状态的应用程序应该假设它们可能在任何时候暂停。
        break;
      case AppLifecycleState.resumed: // 应用程序可见,前台
        print('11111');
        _checkSellerAcc();
        break;
      case AppLifecycleState.paused: // 应用程序不可见,后台
        print('eeeee ');
        break;
      case AppLifecycleState.detached:
        print('detached');
        break;

      default:
        break;
    }
  }

  _getCustomerActivityBaseinfo(String sellerid, String openid) async {
    Map<String, String> params = {
      'sellerid': sellerid,
      "uid": openid,
    };
    bool success = await _baseIndoProvider
        .getCustomerActivityBaseinfo(context, params, isShowLoading: false);
    if (success) {
      name = _baseIndoProvider.baseInfoSunModel.name != null
          ? _baseIndoProvider.baseInfoSunModel.name
          : '';
      phone = _baseIndoProvider.baseInfoSunModel.phone != null
          ? _baseIndoProvider.baseInfoSunModel.phone
          : '';
    } else {}
  }

  ///获取是否有店
  _checkSellerAcc({showLoading = false}) async {
    CreateStoreModel createStoreModel =
        Provider.of<CreateStoreModel>(context, listen: false);
    Map<String, String> params = {
      // "phone": createStoreModel.storeInfo.phone,
      // "phone": '',
      "unionid": App.sp.getString("unionid"),
    };
    await otherLoginProvider.checkSellerAcc(context, params,
        showLoading: showLoading);
  }

  ///点击某个店铺
  _clickStore(context, CheckSellerAccSunModel sunModel) async {
    Map<String, dynamic> seller = sunModel.toJson();

    await _getCustomerActivityBaseinfo(seller['id'], seller['uid']);
    //判断进入个人信息还是直接进入主页
    if (name == '' || phone == '') {
      //姓名或者电话有一个为空时,进入个人资料填写页面
      NavigatorUtil.goBaseInfoPage(context, FromPage.FromPageIfNeedCreateStore,
          sunModel: sunModel);
    } else {
      _loginStore(context, sunModel);
    }
  }

  ///进入某个店铺
  _loginStore(context, CheckSellerAccSunModel sunModel) {
    UserModel userModel = Provider.of<UserModel>(context, listen: false);
    App.sp.setBool("accountLogin", 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);
    _baseIndoProvider = Provider.of<BaseIndoProvider>(context, listen: true);
    return WillPopScope(
        onWillPop: () async {
          if (widget.changeStatus) {
            EventBus().emit('changeStatusColor');
          }

          return true;
        },
        child: Scaffold(
            backgroundColor: Colors.white,
            appBar: SystemAppBar(
              '',
              // leftTitle: '上一步',
              onTap: () {
                if (widget.changeStatus) {
                  EventBus().emit('changeStatusColor');
                }
                Navigator.of(context).pop();
              },
            ),
            body: Container(
                // margin: EdgeInsets.only(bottom: ScreenUtil().setWidth(40)),
                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(
                                      fontSize: ScreenUtil().setSp(32),
                                      color: MyColours.color_333333,
                                      fontWeight: FontWeight.bold),
                                ),
                                VEmptyView(172),
                                InkWell(
                                    onTap: () {
                                      // if (!App.sp.containsKey('openid') ||
                                      //     App.sp.get("openid") == null ||
                                      //     App.sp.get("openid") == '') {
                                      //跳转小程序
                                      Utils.goMiniProgramCreatePage(context);
                                      // } else {
                                      //   //跳转至新建店铺流程
                                      //   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(
                                padding: EdgeInsets.only(
                                    bottom: ScreenUtil().setWidth(50)),
                                // 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: () {
                                          // if (!App.sp.containsKey('openid') ||
                                          //     App.sp.get("openid") == null ||
                                          //     App.sp.get("openid") == '') {
                                          //   //跳转小程序
                                          //   Utils.goMiniProgramCreatePage(context);
                                          // } else {
                                          //跳转至新建店铺流程
                                          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: () async {
                                      if (widget.changeStatus) {
                                        UserModel userModel =
                                            Provider.of<UserModel>(context,
                                                listen: false);
                                        bool success = await userModel
                                            .loginOutOnly(context, {
                                          "seller_code":
                                              userModel.user.sellercode,
                                          "account": userModel.user.account
                                        });
                                        if (success) {
                                          _clickStore(
                                              context, model.sellerList[index]);
                                        }
                                      } else {
                                        _clickStore(
                                            context, model.sellerList[index]);
                                      }
                                    },
                                    child: IfNeedCreateStoreItem(
                                        model: model.sellerList[index]),
                                  );
                                })),
                        //  VEmptyView(40),
                      ],
                    );
                  }
                }))));
  }
}