store_base_info_provider.dart 11.2 KB
import 'dart:async';
import 'dart:convert';
import 'dart:io';

import 'package:dio/dio.dart';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:one_key/constant/constant.dart';
import 'package:one_key/constant/error.dart';
import 'package:one_key/constant/state.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/net/base_resp.dart';
import 'package:one_key/net/dio_util.dart';
import 'package:one_key/net/http_url.dart';
import 'package:one_key/provider/user_model.dart';
import 'package:one_key/utils/utils.dart';
import 'package:one_key/widgets/loading.dart';
import 'package:provider/provider.dart';

import '../models/all_cuisine.dart';
import '../models/meal_day_date_model.dart';
import '../models/meal_list_model.dart';
import '../models/seller_cuisine_model.dart';

class StoreBaseIndoProvider with ChangeNotifier {
  GetSellerInfoSunModel? itemModel;
  String _statusKey = "status";

  /// BaseResp [int code]字段 key, 默认:errorCode.
  String _codeKey = "errorCode";

  /// BaseResp [String msg]字段 key, 默认:errorMsg.
  String _msgKey = "errorMsg";

  /// BaseResp [T data]字段 key, 默认:data.
  String _dataKey = "data";

  List<MealListSunModel>? mealListData = [];
  PageState pageState = PageState.Loading;

  List<MealDayDateSunModel>? dayDateData = [];

  List<SellerCuisineSunModel>? sellerCuisineData = [];

  List<AllCuisineSunModel>? allCuisineData = [];

  ///根据商家ID获取商家信息
  Future<GetSellerInfoSunModel?> getSellerById(
    BuildContext context, {
    bool showLoading = true,
    bool selfDismiss = false,
  }) async {
    Map<String, String?> params = {
      "sellerid": Provider.of<UserModel>(context, listen: false).user!.sellerid,
    };
    try {
      BaseResp<Map<String, dynamic>?> baseResp = await DioUtil()
          .request<Map<String, dynamic>>(
              context, Method.post, HttpUrl.get_seller_info,
              data: params, showLoading: showLoading, selfDismiss: selfDismiss);

      if (baseResp == null) return itemModel;
      if (baseResp.code == Constant.status_success) {
        if (int.parse(baseResp.status!) != Constant.status_success) {
          Utils.showToast(baseResp.msg ?? "");
          return itemModel;
        }
        if (baseResp.responseData!['data'] != null) {
          itemModel = GetSellerInfoModel.fromJson(
                  baseResp.responseData as Map<String, dynamic>)
              .data;
          print(itemModel);
        } else {
          Utils.showToast(baseResp.msg ?? "");
        }
        return itemModel;
      }
    } catch (error) {
      print(error.toString());
    }
    return null;
  }

  //获取所有菜系
  Future<bool> getAllCuisine(
    BuildContext context, {
    bool showLoading = true,
    bool selfDismiss = false,
  }) async {
    try {
      BaseResp<dynamic> baseResp = await DioUtil().request<dynamic>(
          context, Method.post, HttpUrl.get_all_cuisine,
          showLoading: showLoading, selfDismiss: selfDismiss);
      if (baseResp == null) return false;
      if (baseResp.code == Constant.status_success) {
        if (int.parse(baseResp.status!) != Constant.status_success) {
          Utils.showToast(baseResp.msg ?? "");
          return false;
        }
        if (baseResp.responseData!['data'] != null) {
          allCuisineData = AllCuisineModel.fromJson(
                  baseResp.responseData as Map<String, dynamic>)
              .data;
          print(allCuisineData);
          return true;
        } else {
          Utils.showToast(baseResp.msg ?? "");
        }
        return false;
      }
    } catch (error) {
      print(error.toString());
    }

    return false;
  }

  //获取商家所属菜系
  Future<bool> getSellerCuisine(
    BuildContext context, {
    bool showLoading = true,
    bool selfDismiss = false,
  }) async {
    Map<String, String?> params = {
      "sellerid": Provider.of<UserModel>(context, listen: false).user!.sellerid,
    };
    try {
      BaseResp<dynamic> baseResp = await DioUtil().request<dynamic>(
          context, Method.post, HttpUrl.get_seller_cuisine,
          data: params, showLoading: showLoading, selfDismiss: selfDismiss);
      if (baseResp == null) return false;
      if (baseResp.code == Constant.status_success) {
        if (int.parse(baseResp.status!) != Constant.status_success) {
          Utils.showToast(baseResp.msg ?? "");
          return false;
        }
        if (baseResp.responseData!['data'] != null) {
          sellerCuisineData = SellerCuisineModel.fromJson(
                  baseResp.responseData as Map<String, dynamic>)
              .data;
          print(sellerCuisineData);
          return true;
        } else {
          Utils.showToast(baseResp.msg ?? "");
        }
        return false;
      }
    } catch (error) {
      print(error.toString());
    }

    return false;
  }

  /// decode response data.
  Map<String, dynamic>? _decodeData(Response response) {
    if (response == null ||
        response.data == null ||
        response.data.toString().isEmpty) {
      return new Map();
    }
    return json.decode(response.data.toString());
  }

  /// 获取商家多时段列表
  Future<List<MealListSunModel>?> getSellerMealSection(
    BuildContext context,
    Map<String, String?> params, {
    bool showLoading = true,
    bool selfDismiss = false,
  }) async {
    try {
      BaseResp<dynamic> baseResp = await DioUtil().request<dynamic>(
          context, Method.post, HttpUrl.get_seller_meal_section,
          data: params, showLoading: showLoading, selfDismiss: selfDismiss);
      if (baseResp == null) return [];
      if (baseResp.code == Constant.status_success) {
        mealListData = MealListModel.fromJson(
                baseResp.responseData as Map<String, dynamic>)
            .data;
        if (mealListData!.length > 0) {
          pageState = PageState.Success;
        } else {
          pageState = PageState.Empty;
        }

        notifyListeners();
      } else {
        Utils.showToast(baseResp.msg ?? "");
        pageState = PageState.ConnectivityError;
      }
      return mealListData;
    } catch (error) {
      print(error.toString());
      if (error is MyError) {
        switch (error.type) {
          case 1:
            pageState = PageState.ConnectivityError;
            break;
          case 2:
            pageState = PageState.ConnectivityTimeOut;
            break;
          default:
            pageState = PageState.ConnectivityError;
            break;
        }
      }
      notifyListeners();
    }
    return null;
  }

  ///  获取日期对应的时段
  Future<List<MealDayDateSunModel>?> getMealSectionByDay(
    BuildContext context,
    Map<String, String?> params, {
    bool showLoading = true,
    bool selfDismiss = false,
  }) async {
    try {
      BaseResp<dynamic> baseResp = await DioUtil().request<dynamic>(
          context, Method.post, HttpUrl.get_meal_section_by_day,
          data: params, showLoading: showLoading, selfDismiss: selfDismiss);
      if (baseResp == null) return [];
      if (baseResp.code == Constant.status_success) {
        dayDateData = MealDayDateModel.fromJson(
                baseResp.responseData as Map<String, dynamic>)
            .data;
        notifyListeners();
      } else {
        Utils.showToast(baseResp.msg ?? "");
      }
      return dayDateData;
    } catch (error) {
      print(error.toString());
      if (error is MyError) {}
    }
    return null;
  }

  Future<bool> setSellerMealSection(
    BuildContext context,
    Map<String, String?> params, {
    bool showLoading = true,
    bool selfDismiss = false,
  }) async {
    try {
      BaseResp<dynamic> baseResp = await DioUtil().request<dynamic>(
          context, Method.post, HttpUrl.set_seller_meal_section,
          data: params, showLoading: showLoading, selfDismiss: selfDismiss);
      if (baseResp == null) return false;
      if (baseResp.code == Constant.status_success) {
        Utils.showToast('保存成功');
        return true;
      } else if (baseResp.code == 354) {
        Utils.showToast(baseResp.msg!.replaceAll('非法请求:', ''));
        return false;
      } else {
        Utils.showToast(baseResp.msg ?? "");
        return false;
      }
    } catch (error) {
      print(error.toString());
      return false;
    }
  }

  //  设置商家所属菜系
  Future<bool> setSellerCuisine(
    BuildContext context,
    Map<String, String?> params, {
    bool showLoading = true,
    bool selfDismiss = false,
  }) async {
    try {
      BaseResp<dynamic> baseResp = await DioUtil().request<dynamic>(
          context, Method.post, HttpUrl.set_seller_cuisine,
          data: params, showLoading: showLoading, selfDismiss: selfDismiss);
      if (baseResp == null) return false;
      if (baseResp.code == Constant.status_success) {
        // Utils.showToast('保存成功');
        return true;
      } else {
        Utils.showToast(baseResp.msg ?? "");
        return false;
      }
    } catch (error) {
      print(error.toString());
      return false;
    }
  }

//  PC维护商家基本信息,保存人均消费
  Future<bool> setSellerConfigByPC(
    BuildContext context,
    Map<String, String?> params, {
    bool showLoading = true,
    bool selfDismiss = false,
  }) async {
    try {
      BaseResp<dynamic> baseResp = await DioUtil().request<dynamic>(
          context, Method.post, HttpUrl.set_seller_config_by_pc,
          data: params, showLoading: showLoading, selfDismiss: selfDismiss);
      if (baseResp == null) return false;
      if (baseResp.code == Constant.status_success) {
        // Utils.showToast('保存成功');
        return true;
      } else {
        Utils.showToast(baseResp.msg ?? "");
        return false;
      }
    } catch (error) {
      print(error.toString());
      return false;
    }
  }

  ///根据商家ID修改商家信息
  Future<SetSellerInfoSunModel?> setSellerInfoById(
      BuildContext context, FormData params) async {
    Loading.showLoading(context);
    var dio = new Dio();
    Response response = await dio.post(
        "https://xt04.colorcun.com/?service=App.Seller.SetSellerById",
        data: params);
    print(response);

    Map? _responseData;
    if (response.statusCode == HttpStatus.ok ||
        response.statusCode == HttpStatus.created) {
      try {
        if (response.data is Map) {
          _responseData = response.data;
        } else {
          Map<String, dynamic>? _dataMap = _decodeData(response);

          _responseData = _dataMap;
        }

        Loading.hideLoading(context);
        SetSellerInfoSunModel? itemModel;

        if (_responseData!['ret'] == Constant.status_success) {
          if (_responseData['data'] != null) {
            itemModel = SetSellerInfoModel.fromJson(
                    _responseData as Map<String, dynamic>)
                .data;
          } else {
            Utils.showToast(_responseData['msg'] ?? "");
          }
          return itemModel;
        }
      } catch (e) {
        Loading.hideLoading(context);
        throw DioException(
          requestOptions: response.requestOptions,
          response: response,
          error: "data parsing exception...",
          type: DioErrorType.badResponse,
        );
      }
    }
    return null;
  }
}