gpt4 book ai didi

php - Flutter + Chopper POST API 无法在网络中运行

转载 作者:行者123 更新时间:2023-12-05 07:08:04 27 4
gpt4 key购买 nike

我对 flutter 完全陌生。在学习 flutter 时,我无法使用 flutter web 应用程序登录,相同的代码在 android 移动应用程序上运行良好。

请找到以下日志信息。同一个调用在除 flutter web 之外的所有平台上都有效

信息:2020-05-22 17:40:48.229: curl -v -X POST -H 'content-type: application/json; charset=UTF-8' -H 'Accept: /' -H 'Cache-Control: no-cache' -H 'Connection: keep-alive' -d '{"username":"admin ","密码":"admin@123"}' http://healthvedic.in/api/admin/user/login.php

“String”类型的预期值,但得到的是“ClientException”类型之一

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 中的 header

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

最佳答案

我无法运行您提供的代码,但给出的错误非常清楚:'String' 类型的预期值,但得到的是 'ClientException' 类型之一。如错误中所述,它需要一个“字符串”,但抛出了一个异常。

在评论中,您提到导致问题的线路是

res.then((value) => { 
updateOnUI(LoginResModel.fromJson(value.body)),
}

由于该应用程序在 Android 中运行良好,但在 Web 上运行不佳,我建议检查在 LoginResModel 中发出的请求,看看为什么会抛出 ClientException。添加 try-catch block 也可能有所帮助。

try {
// line causing the issue
} catch (error){
debugPrint('Error: $error');
}

我很好奇为什么 ChopperNetworkManager.getInstance().doLogin(reqModel.toJson()) 会抛出 ClientException,也许您可​​以在 doLogin()< 中捕获异常 并确定其原因。

关于php - Flutter + Chopper POST API 无法在网络中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61954922/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com