Browse Source

Merge commit 'b21a9b17e6b23e58bab530badbeaf2c57d55a21b' into lxm

newdev_shunjiawei
lxm 2 years ago
parent
commit
42ba3ce744
  1. 24
      lib/data/models/user_Info.dart
  2. 10
      lib/data/services/network/api.dart
  3. 121
      lib/data/services/network/auth_interceptor.dart
  4. 2
      lib/data/services/network/dio_manager.dart
  5. 52
      lib/modules/login/controllers/login_controller.dart
  6. 33
      lib/modules/login/entity/api.dart
  7. 45
      lib/modules/login/entity/dio_manager.dart
  8. 4
      lib/modules/login/entity/nw_api.dart
  9. 8
      lib/modules/login/entity/nw_method.dart
  10. 1
      lib/modules/splash/controllers/splash_controller.dart

24
lib/data/models/user_Info.dart

@ -73,6 +73,30 @@ class User {
// createtime: _parseTimestamp(userData['createtime']),
// wxopenid: (userData?['wxopenid'] as String?) ?? '',
// googleopenid: (userData?['googleopenid'] as String?) ?? '',
// facebookopenid: (userData?['facebookopenid'] as String?) ?? '',
);
}
factory User.fronTokenJson(Map<String, dynamic> json) {
// 修复1:安全获取嵌套的 user 字段
final userData = json['user'] as Map<String, dynamic>?; // 允许空值
final token = '';
// 更新单例实例
return _instance = User._(
token: token as String? ?? '',
name: (userData?['name'] as String?) ?? '默认名称', // 提供默认值
uid: (userData?['uid'] as String?) ?? '',
avatar: (userData?['avatar'] as String?) ?? '',
deviceid: (userData?['deviceid'] as String?) ?? '',
language: (userData?['language'] as String?) ?? 'en',
mail: (userData?['mail'] as String?) ?? '',
phone: (userData?['phone'] as String?) ?? '',
phonemac: (userData?['phonemac'] as String?) ?? '',
password: (userData?['password'] as String?) ?? '',
// lastbettime: _parseTimestamp(userData['lastbettime']),
// createtime: _parseTimestamp(userData['createtime']),
// wxopenid: (userData?['wxopenid'] as String?) ?? '',
// googleopenid: (userData?['googleopenid'] as String?) ?? '',
// facebookopenid: (userData?['facebookopenid'] as String?) ?? '',
);
}

10
lib/data/services/network/api.dart

@ -4,6 +4,7 @@ import 'nw_method.dart';
class Api {
// 登录
static login([params]) {
print("请求后台数据params=${params}");
return DioManager().request(
NWMethod.post,
'/api/home/user_sgin',
@ -20,6 +21,15 @@ class Api {
);
}
static tokenlogin([params]) {
print("请求后台数据params=${params}");
return DioManager().request(
NWMethod.post,
'/api/home/user_getinfo',
params: params,
);
}
// 获取阿里token
static getAliToken([params]) {
return DioManager().request(

121
lib/data/services/network/auth_interceptor.dart

@ -1,65 +1,66 @@
// import 'package:dio/dio.dart';
// import 'package:flutter_easyloading/flutter_easyloading.dart';
// import 'package:get/get.dart' hide Response;
import 'package:dio/dio.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:get/get.dart' hide Response;
// import '../scenes/start/start_logic.dart';
// import 'entity/base_entity.dart';
import 'package:get_storage/get_storage.dart';
import 'entity/base_entity.dart';
// class AuthInterceptor extends Interceptor {
// final state = Get.find<StartLogic>().state;
class AuthInterceptor extends Interceptor {
final GetStorage _storage = GetStorage();
// @override
// void onRequest(RequestOptions options, RequestInterceptorHandler handler) {
// options.headers['Authorization'] = state.loginModel.token;
// handler.next(options);
// }
@override
void onRequest(RequestOptions options, RequestInterceptorHandler handler) {
var jsonString = _storage.read<String>("logintoken");
options.headers['Authorization'] = jsonString;
handler.next(options);
}
// @override
// void onResponse(Response response, ResponseInterceptorHandler handler) async {
// BaseEntity entity = BaseEntity.fromJson(response.data);
// if (entity.code == 0) {
// response.data = entity.data ?? {};
// handler.resolve(response);
// } else {
// response.data = null;
// handler.next(response);
// return EasyLoading.showError(entity.message ?? 'unknownError'.tr);
// }
// }
@override
void onResponse(Response response, ResponseInterceptorHandler handler) async {
BaseEntity entity = BaseEntity.fromJson(response.data);
if (entity.code == 0) {
response.data = entity.data ?? {};
handler.resolve(response);
} else {
response.data = null;
handler.next(response);
return EasyLoading.showError(entity.message ?? 'unknownError'.tr);
}
}
// @override
// void onError(DioException err, ErrorInterceptorHandler handler) {
// switch (err.type) {
// case DioExceptionType.cancel:
// {
// EasyLoading.showError('requestCancellation'.tr);
// }
// case DioExceptionType.connectionTimeout:
// {
// EasyLoading.showError('connectionTimeout'.tr);
// }
// case DioExceptionType.sendTimeout:
// {
// EasyLoading.showError('requestTimeout'.tr);
// }
// case DioExceptionType.receiveTimeout:
// {
// EasyLoading.showError('responseTimeout'.tr);
// }
// case DioExceptionType.badResponse:
// {
// try {
// String? errMsg = err.response?.statusMessage;
// EasyLoading.showError(errMsg ?? 'unknownError'.tr);
// } on Exception catch (_) {
// EasyLoading.showError('unknownError'.tr);
// }
// }
// default:
// {
// EasyLoading.showError(err.message ?? 'unknownError'.tr);
// }
// }
// handler.next(err);
// }
// }
@override
void onError(DioException err, ErrorInterceptorHandler handler) {
switch (err.type) {
case DioExceptionType.cancel:
{
EasyLoading.showError('requestCancellation'.tr);
}
case DioExceptionType.connectionTimeout:
{
EasyLoading.showError('connectionTimeout'.tr);
}
case DioExceptionType.sendTimeout:
{
EasyLoading.showError('requestTimeout'.tr);
}
case DioExceptionType.receiveTimeout:
{
EasyLoading.showError('responseTimeout'.tr);
}
case DioExceptionType.badResponse:
{
try {
String? errMsg = err.response?.statusMessage;
EasyLoading.showError(errMsg ?? 'unknownError'.tr);
} on Exception catch (_) {
EasyLoading.showError('unknownError'.tr);
}
}
default:
{
EasyLoading.showError(err.message ?? 'unknownError'.tr);
}
}
handler.next(err);
}
}

2
lib/data/services/network/dio_manager.dart

@ -20,7 +20,7 @@ class DioManager {
);
dio = Dio(options);
//fdp
// dio.interceptors.add(AuthInterceptor());
}

52
lib/modules/login/controllers/login_controller.dart

@ -3,11 +3,10 @@ import 'package:flutter/material.dart';
import '../../../routes/app_routes.dart';
import 'dart:convert';
import 'dart:ffi';
import '../../settings/controllers/settings_controller.dart';
import 'facebookLogin.dart';
import 'googleLogin.dart';
import 'weixinLogin.dart';
import '../entity/api.dart';
import '../../../data/services/network/api.dart';
import '../../../../data/models/user_Info.dart';
//import 'package:shared_preferences/shared_preferences.dart';
import 'package:get_storage/get_storage.dart';
@ -223,6 +222,21 @@ class LoginController extends GetxController {
return !_verificationCode.contains('');
}
Future<void> getLoginToken() async {
// 使用正确语法创建请求头
var response = await Api.tokenlogin();
if (response != null) {
if (response?["code"] == null) {
final user = User.fronTokenJson(response);
await _storage.write(
'user', jsonEncode(user.toJson())); // 使用 user.toJson()
Get.offAllNamed(Routes.pairing);
}
} else {
login();
}
}
// 登录
Future<void> login() async {
// 暂时关闭验证码验证
@ -240,26 +254,27 @@ class LoginController extends GetxController {
_isLoading.value = true;
try {
// 模拟验证过程
await Future.delayed(const Duration(seconds: 2));
// 模拟验证过程
switch (loginType) {
case 0 || 1:
{
if (!isVerificationCodeComplete()) {
Get.snackbar(
'提示',
'请输入完整的验证码',
snackPosition: SnackPosition.TOP,
backgroundColor: Colors.red.withOpacity(0.1),
colorText: Colors.red,
);
break;
}
// if (!isVerificationCodeComplete()) {
// Get.snackbar(
// '提示',
// '请输入完整的验证码',
// snackPosition: SnackPosition.TOP,
// backgroundColor: Colors.red.withOpacity(0.1),
// colorText: Colors.red,
// );
// break;
// }
requestLogin({
"mail": verificationCodeController.text,
"mail": contactController.text,
"phone": "",
"stype": loginType,
"vcode": contactController.text,
"vcode": verificationCodeController.text,
"ttoken": "",
"phonemodel": "",
"phonemac": "",
@ -410,13 +425,12 @@ class LoginController extends GetxController {
try {
print('响应数据: ${response.toString()}'); // 调试输出原始数据
if (response['code'].toString() == '0' &&
response['msg'].toString() == "Success") {
if (response['code'].toString() == '0') {
// 新增:检查 user 字段是否存在且类型正确
if (response.containsKey('data') && response['data'] is Map) {
final user = User.fromJson(response);
print('用户初始化成功: ${user.name}');
print('用户初始化成功: ${user.token}');
await _storage.write("logintoken", user.token);
// 存储到 SharedPreferences (仅存储用户数据)
//final prefs = await GetStorage();
await _storage.write(

33
lib/modules/login/entity/api.dart

@ -1,33 +0,0 @@
import 'dio_manager.dart';
import 'nw_method.dart';
class Api {
// 登录
static login([params]) {
print("请求后台数据params=${params}");
return DioManager().request(
NWMethod.post,
'/api/home/user_sgin',
params: params,
);
}
// 获取验证码
static getCode([params]) {
print("请求后台数据params=${params}");
return DioManager().request(
NWMethod.post,
'/api/home/user_verification',
params: params,
);
}
// 获取阿里token
static getAliToken([params]) {
return DioManager().request(
NWMethod.post,
'/api/home/auth_alitoken',
params: params,
);
}
}

45
lib/modules/login/entity/dio_manager.dart

@ -1,45 +0,0 @@
import 'package:dio/dio.dart';
//import 'auth_interceptor.dart';
import 'nw_api.dart';
import 'nw_method.dart';
class DioManager {
static final DioManager _shared = DioManager._internal();
factory DioManager() => _shared;
late Dio dio;
DioManager._internal() {
BaseOptions options = BaseOptions(
baseUrl: NWApi.baseApi,
contentType: Headers.jsonContentType,
responseType: ResponseType.json,
connectTimeout: const Duration(seconds: 30),
receiveTimeout: const Duration(seconds: 30),
);
dio = Dio(options);
//dio.interceptors.add(AuthInterceptor());
}
// 请求,返回参数为 T
// method:请求方法,NWMethod.POST等
// path:请求地址
// params:请求参数
Future request<T>(
NWMethod method,
String path, {
Map? params,
Map<String, dynamic>? queryParameters,
}) async {
Response response = await dio.request(
path,
data: params,
queryParameters: queryParameters,
options: Options(method: nwMethodValues[method]),
);
return response.data;
}
}

4
lib/modules/login/entity/nw_api.dart

@ -1,4 +0,0 @@
class NWApi {
// static const baseApi = "https://www.deapsound.com";
static const baseApi = "https://www.deapsound.com";
}

8
lib/modules/login/entity/nw_method.dart

@ -1,8 +0,0 @@
enum NWMethod { get, post, delete, put }
const nwMethodValues = {
NWMethod.get: "get",
NWMethod.post: "post",
NWMethod.delete: "delete",
NWMethod.put: "put"
};

1
lib/modules/splash/controllers/splash_controller.dart

@ -84,4 +84,5 @@ class SplashController extends GetxController {
Get.offAllNamed(Routes.login);
});
}
// fdp挑转登陆
}

Loading…
Cancel
Save