store_base_info_provider.dart 3.63 KB
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/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';

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";

  ///根据商家ID获取商家信息
  Future<GetSellerInfoSunModel> getSellerById(BuildContext context) async {
    Map<String, String> params = {
      "sellerid": Provider.of<UserModel>(context, listen: false).user.sellerid,
    };
    BaseResp<Map<String, dynamic>> baseResp = await DioUtil()
        .request<Map<String, dynamic>>(
            context, Method.get, HttpUrl.get_seller_info,
            data: params)
        .catchError((error) {
      print(error.toString());
    });

    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).data;
        print(itemModel);
      } else {
        Utils.showToast(baseResp.msg ?? "");
      }
      return itemModel;
    }
  }

  /// 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());
  }

  ///根据商家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).data;
          } else {
            Utils.showToast(_responseData['msg'] ?? "");
          }
          return itemModel;
        }
      } catch (e) {
        Loading.hideLoading(context);
        return new Future.error(new DioError(
          // requestOptions: response.requestOptions,
          response: response,
          error: "data parsing exception...",
          type: DioErrorType.RESPONSE,
        ));
      }
    }
  }
}