我是全新的颤振。在学习颤振时,我无法使用颤振网络应用程序登录,相同的代码在 android 移动应用程序上工作正常。
请找到以下日志信息。相同的调用在除颤振网络之外的所有平台上都有效
信息: 2020-05-22 17:40:48.229: curl -v -X post -H '内容类型:应用程序/json; 字符集=UTF-8' -H '接受:/' -H '缓存控制:无缓存' -H '连接:保持活动状态' -d '{"用户名":"管理员","密码":"admin@123"}' http://healthvedic.in/api/admin/user/login.php
类型为"字符串"的预期值,但获得了类型为"客户端异常"之一
import 'package:chopper/chopper.dart';
part 'chopper_network_manager.chopper.dart';
@ChopperApi(baseUrl: '')
abstract class ChopperNetworkManager extends ChopperService {
static ChopperNetworkManager manager;
@Post(path: 'admin/user/login.php')
Future<Response> doLogin(@Body() Map<String, dynamic> body);
static var customHeaders = {
'content-type': 'application/json; charset=UTF-8',
'Accept': '*/*',
'Cache-Control': 'no-cache',
'Connection': 'keep-alive',
};
static ChopperNetworkManager create() {
final client = ChopperClient(
baseUrl: 'http://healthvedic.in/api/',
services: [
_$ChopperNetworkManager(),
],
converter: JsonConverter(),
interceptors: [
HeadersInterceptor(customHeaders),
CurlInterceptor(),
]);
return _$ChopperNetworkManager(client);
}
static ChopperNetworkManager getInstance() {
if (manager == null) {
manager = ChopperNetworkManager.create();
return manager;
}
return manager;
}
}
呼叫地点
void doLogin() async {
LoginReqModel reqModel = LoginReqModel(
username: userNameController.text, password: passwordController.text);
var res = ChopperNetworkManager.getInstance().doLogin(reqModel.toJson());
res.then(
(value) => {
updateOnUI(LoginResModel.fromJson(value.body)),
}, onError: (e) {
onError(e);
}).catchError(onError, test: (error) => onError(error));
res.catchError(onError(''));
}
以下是 PHP Rest-API 中的标头
<?php
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Credentials: true");
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With, Access-Control-Allow-Origin");
header("Content-Type: application/json; charset=UTF-8");
header("Access-Control-Allow-Methods: POST, OPTIONS");
我无法运行您提供的代码,但给出的错误非常清楚:The expected value of type 'String', but got one of type 'ClientException'
.如错误中所述,它需要一个"字符串",但抛出了异常。
在评论中,您提到导致问题的行是
res.then((value) => {
updateOnUI(LoginResModel.fromJson(value.body)),
}
由于该应用程序在Android上运行良好,但在Web上无法正常工作,因此我建议检查在LoginResModel中发出的请求,并查看为什么抛出ClientException。添加try-catch
块也可能有所帮助。
try {
// line causing the issue
} catch (error){
debugPrint('Error: $error');
}
我很好奇为什么从ChopperNetworkManager.getInstance().doLogin(reqModel.toJson())
中抛出 ClientException,也许您可以在doLogin()
中捕获异常并确定其原因。