首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flutter + Chopper POST API不适用于web

Flutter + Chopper POST API不适用于web
EN

Stack Overflow用户
提问于 2020-05-22 12:20:10
回答 1查看 4.9K关注 0票数 3

我对颤栗完全陌生。虽然学习颤振,但我无法登录颤振web应用程序,同样的代码是运行良好的android移动应用程序。

请查找以下日志信息。除了颤振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:备存’-d‘{“admin”,“密码”:“admin@123”} http://healthvedic.in/api/admin/user/login.php

类型'String‘的期望值,但得到'ClientException’类型之一。

代码语言:javascript
复制
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;
  }
}

呼叫地点

代码语言:javascript
复制
 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 API中的标题

代码语言:javascript
复制
<?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");
EN

回答 1

Stack Overflow用户

发布于 2021-04-21 16:25:26

我无法运行您提供的代码,但是给出的错误非常清楚:The expected value of type 'String', but got one of type 'ClientException'。正如错误中所提到的,它希望得到一个“字符串”,但却抛出了一个异常。

在评论中,你提到了导致问题的原因是

代码语言:javascript
复制
res.then((value) => { 
    updateOnUI(LoginResModel.fromJson(value.body)), 
}

由于该应用程序在安卓系统中运行良好,但在网络上却不起作用,所以我建议检查在LoginResModel中提出的请求,看看为什么会抛出一个ClientException。添加try-catch块也可能有帮助。

代码语言:javascript
复制
try {
    // line causing the issue
} catch (error){
    debugPrint('Error: $error');
}

我很好奇为什么要从ClientException中抛出ChopperNetworkManager.getInstance().doLogin(reqModel.toJson()),也许您可以捕捉到doLogin()内部的异常并确定其原因。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61954922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档