|
|
|
import 'dart:convert';
|
|
|
|
import 'dart:io';
|
|
|
|
|
|
|
|
import 'package:dio/dio.dart';
|
|
|
|
import 'package:flutter/cupertino.dart';
|
|
|
|
import 'package:flutter/foundation.dart';
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
|
|
|
import 'package:huixiang/generated/l10n.dart';
|
|
|
|
import 'package:huixiang/retrofit/data/base_data.dart';
|
|
|
|
import 'package:huixiang/view_widget/login_tips.dart';
|
|
|
|
import 'package:retrofit/retrofit.dart';
|
|
|
|
import 'package:shared_preferences/shared_preferences.dart';
|
|
|
|
|
|
|
|
part 'retrofit_api.g.dart';
|
|
|
|
|
|
|
|
// const base_url = "https://pos.platform.lotus-wallet.com/app/"; ///正式
|
|
|
|
// const baseUrl = "https://pos.platform.lotus-wallet.com/app/"; ///正式
|
|
|
|
|
|
|
|
const base_url = "http://192.168.10.236:8766/app/";
|
|
|
|
const baseUrl = "http://192.168.10.236:8766/app/";/// 本地
|
|
|
|
|
|
|
|
@RestApi(baseUrl: baseUrl)
|
|
|
|
abstract class ApiService {
|
|
|
|
|
|
|
|
factory ApiService(Dio dio,
|
|
|
|
{String baseUrl,
|
|
|
|
BuildContext context,
|
|
|
|
String token,
|
|
|
|
bool showLoading = true, bool pay = false}) {
|
|
|
|
Map<String, dynamic> headers =
|
|
|
|
(token == null || token == "") ? {} : {'token': "Bearer $token"};
|
|
|
|
if (pay) {
|
|
|
|
headers["Environment"] = "app";
|
|
|
|
}
|
|
|
|
dio.options = BaseOptions(
|
|
|
|
connectTimeout: 60000,
|
|
|
|
receiveTimeout: 60000,
|
|
|
|
headers: headers,
|
|
|
|
responseType: ResponseType.json);
|
|
|
|
dio.interceptors.add(
|
|
|
|
InterceptorsWrapper(onRequest: (RequestOptions options) {
|
|
|
|
debugPrint("\n====================== 请求数据 =======================");
|
|
|
|
debugPrint("method = ${options.method.toString()}");
|
|
|
|
debugPrint("url = ${options.uri.toString()}");
|
|
|
|
debugPrint("headers = ${options.headers}");
|
|
|
|
if (showLoading) { //是否显示loading
|
|
|
|
SmartDialog.showLoading(msg: S.current.zhengzaijiazai);
|
|
|
|
}
|
|
|
|
if (options.data is FormData) {
|
|
|
|
debugPrint("params data = FormData");
|
|
|
|
} else {
|
|
|
|
debugPrint("params data = ${jsonEncode(options.data)}");
|
|
|
|
}
|
|
|
|
debugPrint("params queryParameters = ${options.queryParameters}");
|
|
|
|
}, onResponse: (Response response) {
|
|
|
|
if (showLoading) {
|
|
|
|
SmartDialog.dismiss();
|
|
|
|
}
|
|
|
|
debugPrint("\n====================== 响应数据开始 =====================");
|
|
|
|
debugPrint("code = ${response.statusCode}");
|
|
|
|
p(jsonEncode(response.data));
|
|
|
|
Map map = response.data;
|
|
|
|
|
|
|
|
if (map["code"] == 40005 || map["code"] == 40001) {
|
|
|
|
SmartDialog.show(
|
|
|
|
widget: LoginTips(
|
|
|
|
click: () {
|
|
|
|
SharedPreferences.getInstance().then((value) {
|
|
|
|
value.setString("token", "");
|
|
|
|
value.setString("user", "");
|
|
|
|
value.setString("userJson", "");
|
|
|
|
value.setString("userId", "");
|
|
|
|
value.setString("mobile", "");
|
|
|
|
value.setString("nick", "");
|
|
|
|
});
|
|
|
|
Navigator.of(context).pushNamed('/router/login_page', arguments: {"login":"login"});
|
|
|
|
},
|
|
|
|
),
|
|
|
|
clickBgDismissTemp: false,
|
|
|
|
);
|
|
|
|
} else if (map["code"] != 0 && response.request.baseUrl == baseUrl) {
|
|
|
|
///高德地图的poi服务请求不需要toast
|
|
|
|
SmartDialog.showToast(map["msg"], alignment: Alignment.center);
|
|
|
|
}
|
|
|
|
debugPrint("======================= 响应数据结束 =======================\n");
|
|
|
|
}, onError: (DioError e) {
|
|
|
|
if (showLoading) {
|
|
|
|
SmartDialog.dismiss();
|
|
|
|
}
|
|
|
|
debugPrint("\n=======================错误响应数据 ========================");
|
|
|
|
debugPrint("type = ${e.type}");
|
|
|
|
debugPrint("message = ${e.message}");
|
|
|
|
debugPrint("\n");
|
|
|
|
}),
|
|
|
|
);
|
|
|
|
|
|
|
|
if (kReleaseMode) {
|
|
|
|
baseUrl = base_url;
|
|
|
|
}
|
|
|
|
return _ApiService(dio, baseUrl: baseUrl);
|
|
|
|
}
|
|
|
|
|
|
|
|
static showDialog(context) async {
|
|
|
|
dynamic ddd = await showCupertinoDialog(
|
|
|
|
context: context,
|
|
|
|
barrierDismissible: false,
|
|
|
|
builder: (context) {
|
|
|
|
return LoginTips();
|
|
|
|
},
|
|
|
|
);
|
|
|
|
print("ddd: $ddd");
|
|
|
|
}
|
|
|
|
|
|
|
|
static void p(String msg) {
|
|
|
|
//因为String的length是字符数量不是字节数量所以为了防止中文字符过多,
|
|
|
|
// 把4*1024的MAX字节打印长度改为1000字符数
|
|
|
|
int maxStrLength = 900;
|
|
|
|
//大于1000时
|
|
|
|
while (msg.length > maxStrLength) {
|
|
|
|
debugPrint(msg.substring(0, maxStrLength));
|
|
|
|
msg = msg.substring(maxStrLength);
|
|
|
|
}
|
|
|
|
//剩余部分
|
|
|
|
print(msg);
|
|
|
|
}
|
|
|
|
|
|
|
|
///文件上传
|
|
|
|
@POST("/file/upload")
|
|
|
|
@MultiPart()
|
|
|
|
Future<BaseData> upload(
|
|
|
|
@Part(name: "file") File data, @Part(name: "folderId") int folderId);
|
|
|
|
|
|
|
|
/// 周边搜索
|
|
|
|
@GET(
|
|
|
|
"https://restapi.amap.com/v3/place/around?key=542b46afa8e4b88fe1eb3c4d0ba0872f&location={lat},{lng}&keywords={keywords}&offset={size}&page={page}&extensions=all")
|
|
|
|
Future<dynamic> searchPoi(@Path("lat") String lat, @Path("lng") String lng,
|
|
|
|
@Path("keywords") String keywords, int size, int page);
|
|
|
|
|
|
|
|
/// 用户登录
|
|
|
|
@POST("/auth/platform/memberLogin")
|
|
|
|
Future<BaseData> memberLogin(@Body() Map<String, dynamic> param);
|
|
|
|
|
|
|
|
///发送验证码
|
|
|
|
@GET("/auth/sendVerify/{mobile}")
|
|
|
|
Future<BaseData> sendVerify(@Path("mobile") String mobile);
|
|
|
|
|
|
|
|
///积分商城商品列表
|
|
|
|
@POST("/creditGoods/list")
|
|
|
|
Future<BaseData> creditGoods(@Body() Map<String, dynamic> param);
|
|
|
|
|
|
|
|
///积分商城商品分類列表
|
|
|
|
@POST("/creditGoodsCategory/page")
|
|
|
|
Future<BaseData> goodsCategory(@Body() Map<String, dynamic> param);
|
|
|
|
|
|
|
|
///积分商城商品详情
|
|
|
|
@GET("/creditGoods/{id}")
|
|
|
|
Future<BaseData> creditGoodsById(@Path("id") String id);
|
|
|
|
|
|
|
|
///查询用户信息
|
|
|
|
@GET("/member/info")
|
|
|
|
Future<BaseData> queryInfo();
|
|
|
|
|
|
|
|
///编辑用户信息
|
|
|
|
@POST("/member/editMemberInfo")
|
|
|
|
Future<BaseData> editInfo(@Body() Map<String, dynamic> param);
|
|
|
|
|
|
|
|
///用户签到信息
|
|
|
|
@GET("/member/signInInfo")
|
|
|
|
Future<BaseData> signInInfo();
|
|
|
|
|
|
|
|
///用户签到
|
|
|
|
@GET("/member/signIn")
|
|
|
|
Future<BaseData> signIn();
|
|
|
|
|
|
|
|
///会员充值
|
|
|
|
@POST("/wallet/recharge")
|
|
|
|
Future<BaseData> recharge(@Body() Map<String, dynamic> param);
|
|
|
|
|
|
|
|
///领取优惠券
|
|
|
|
@GET("/coupon/receive?couponId={couponId}")
|
|
|
|
Future<BaseData> receiveCoupon(@Path("couponId") String couponId);
|
|
|
|
|
|
|
|
///订单列表
|
|
|
|
@POST("/creditOrder/list")
|
|
|
|
Future<BaseData> creditOrderList(@Body() Map<String, dynamic> param);
|
|
|
|
|
|
|
|
///创建积分订单
|
|
|
|
@POST("/creditOrder/create")
|
|
|
|
Future<BaseData> creditOrder(@Body() Map<String, dynamic> param);
|
|
|
|
|
|
|
|
///保存收货地址
|
|
|
|
@POST("/address/add")
|
|
|
|
Future<BaseData> addAddress(@Body() Map<String, dynamic> param);
|
|
|
|
|
|
|
|
///删除收货地址
|
|
|
|
@POST("/address/delete")
|
|
|
|
Future<BaseData> deleteAddress(@Body() Map<String, dynamic> param);
|
|
|
|
|
|
|
|
///查询收货地址
|
|
|
|
@GET("/address/detail/{id}")
|
|
|
|
Future<BaseData> queryAddress(@Path("id") String id);
|
|
|
|
|
|
|
|
///查询用户所有的收货地址
|
|
|
|
@GET("/address/queryMemberAddress")
|
|
|
|
Future<BaseData> queryMemberAddress();
|
|
|
|
|
|
|
|
///更新收货地址
|
|
|
|
@POST("/address/update")
|
|
|
|
Future<BaseData> updateAddress(@Body() Map<String, dynamic> param);
|
|
|
|
|
|
|
|
///查询领券列表
|
|
|
|
@POST("/coupon/centreList")
|
|
|
|
Future<BaseData> queryCoupon(@Body() Map<String, dynamic> param);
|
|
|
|
|
|
|
|
///查询卡包列表
|
|
|
|
@POST("/coupon/packageList")
|
|
|
|
Future<BaseData> queryCard(@Body() Map<String, dynamic> param);
|
|
|
|
|
|
|
|
///门店地址列表
|
|
|
|
@POST("/store/list")
|
|
|
|
Future<BaseData> queryStore(@Body() Map<String, dynamic> param);
|
|
|
|
|
|
|
|
///分页查看资讯列表
|
|
|
|
@POST("/information/list")
|
|
|
|
Future<BaseData> informationList(@Body() Map<String, dynamic> param);
|
|
|
|
|
|
|
|
///查看资讯详情
|
|
|
|
@GET("/information/{id}")
|
|
|
|
Future<BaseData> informationInfo(@Path("id") String id);
|
|
|
|
|
|
|
|
///积分订单兑换到券包
|
|
|
|
@GET("/creditOrder/receive/{id}")
|
|
|
|
Future<BaseData> creditOrderReceive(@Path("id") String id);
|
|
|
|
|
|
|
|
///首页数据
|
|
|
|
@GET("/home/home")
|
|
|
|
Future<BaseData> queryHome();
|
|
|
|
|
|
|
|
///查询店铺商家详情
|
|
|
|
@GET("/store/{id}")
|
|
|
|
Future<BaseData> queryStoreInfo(@Path("id") String id);
|
|
|
|
|
|
|
|
///分页查看资讯列表
|
|
|
|
@POST("/information/list")
|
|
|
|
Future<BaseData> queryArticle(@Body() Map<String, dynamic> param);
|
|
|
|
|
|
|
|
///banner查询
|
|
|
|
@POST("/banner/page")
|
|
|
|
Future<BaseData> queryBanner(@Body() Map<String, dynamic> param);
|
|
|
|
|
|
|
|
///品牌信息
|
|
|
|
@GET("/home/brand")
|
|
|
|
Future<BaseData> queryHomeBrand();
|
|
|
|
|
|
|
|
///小程序会员登录
|
|
|
|
@GET("/auth/mini/login/{storeId}")
|
|
|
|
Future<BaseData> minLogin(@Path("storeId") String storeId);
|
|
|
|
|
|
|
|
///
|
|
|
|
@POST("/member/listBill")
|
|
|
|
Future<BaseData> queryBillInfo(@Body() Map<String, dynamic> param);
|
|
|
|
|
|
|
|
///会员等级列表
|
|
|
|
@GET("/member/rankList")
|
|
|
|
Future<BaseData> rankList();
|
|
|
|
|
|
|
|
///订单列表
|
|
|
|
@POST("/order/list")
|
|
|
|
Future<BaseData> orderList(@Body() Map<String, dynamic> param);
|
|
|
|
|
|
|
|
///订单详情
|
|
|
|
@GET("/order/orderDetail?id={id}")
|
|
|
|
Future<BaseData> orderDetail(@Path("id") String id);
|
|
|
|
|
|
|
|
///继续付款
|
|
|
|
@POST("/order/continuePay")
|
|
|
|
Future<BaseData> continuePay(@Body() Map<String, dynamic> param);
|
|
|
|
|
|
|
|
///积分订单兑换到券包
|
|
|
|
@GET("/creditOrder/receive/{id}")
|
|
|
|
Future<BaseData> receiveToCard(@Path("id") String id);
|
|
|
|
|
|
|
|
///会员卡列表
|
|
|
|
@GET("/member/vipList")
|
|
|
|
Future<BaseData> vipList();
|
|
|
|
|
|
|
|
///会员卡详情
|
|
|
|
@GET("/member/vipDetail/{id}")
|
|
|
|
Future<BaseData> vipDetail(@Path("id") String id);
|
|
|
|
|
|
|
|
///分页查询App消息列表
|
|
|
|
@POST("/app-msg/list")
|
|
|
|
Future<BaseData> msgList(@Body() Map<String, dynamic> param);
|
|
|
|
|
|
|
|
///App消息详情
|
|
|
|
@GET("/app-msg/{id}")
|
|
|
|
Future<BaseData> queryMsg(@Path("id") String id);
|
|
|
|
|
|
|
|
}
|