标签: flutter-http

Flutter:http调用期间令牌过期时如何刷新令牌?

我是 flutter 新手,我正在使用http包进行网络调用。如果请求的响应代码为 200,我想刷新令牌并再次调用请求。如何使用 http 包实现此目的?我听说过dio包,但它对我来说很复杂。

User getUser(){

   final response = http.post(Uri.https(BASE_URL, '/api/user'), 
    headers: {'Authorization: Bearer $token'});

    if(response.statusCode == 200){
       return User.fromJson(jsonDecode(response.body)['user']);
    }
    else if(response.statusCode == 401){
      //refresh token and call getUser again     
    }

}
Run Code Online (Sandbox Code Playgroud)

flutter flutter-http

17
推荐指数
2
解决办法
3万
查看次数

Flutter:如何在上传文件时增加 onSendProgress 对流畅进度条动画的调用?

我有以下代码来上传文件。

var client = new dio.Dio();
await client.put(
  url,
  data: formData,
  options: dio.Options(
    headers: headers,
  ),
  onSendProgress: (int sent, int total) {
    final progress = sent / total;
    print('progress: $progress ($sent/$total)');
  },
);
Run Code Online (Sandbox Code Playgroud)

上传文件工作正常。问题是,我有一个视图,它有一个圆形进度条,指示onSendProgress触发时的上传进度。当我上传一个 ~10MB 的文件时,进度条会在一秒钟内从 0% 跳到 100%,然后在继续执行其余代码之前等待几秒钟(取决于文件大小)。这对我来说似乎很奇怪,因为我希望进度条会逐渐增加进度。

您可以在下面找到我的示例中的打印输出,其中包含一个 ~10MB 的文件。

flutter: progress: 0.000003035281907563734 (29/9554302)
flutter: progress: 0.000013187776563897604 (126/9554302)
flutter: progress: 0.999996546058519 (9554269/9554302)
flutter: progress: 0.9999967553883057 (9554271/9554302)
flutter: progress: 1.0 (9554302/9554302)
Run Code Online (Sandbox Code Playgroud)

这是一个较小的文件,但具有相同数量的回调。

flutter: progress: 0.00001847214941293598 (29/1569931)
flutter: progress: 0.00008025830434585978 (126/1569931)
flutter: progress: 0.9999789799679094 (1569898/1569931)
flutter: progress: 0.9999802539092483 …
Run Code Online (Sandbox Code Playgroud)

file-upload flutter dio flutter-http

13
推荐指数
1
解决办法
2502
查看次数

flutter 的 HTTP3 客户端

dart有HTTP3 客户端吗?Java 中有Flupke, python 中有Aioqic,但我没有找到适用于 dart 和 flutter 的工具

dart dart-io flutter http3 flutter-http

10
推荐指数
1
解决办法
1995
查看次数

SocketException:连接失败(操作系统错误:不允许操作,errno = 1)与 macOS 上的 flutter 应用程序

我的 Flutter 应用程序中有以下代码,其中MyDataLoader一个小部件从main.dart

代码:

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;

class MyDataLoader extends StatefulWidget {
  @override
  _MyDataLoaderState createState() => _MyDataLoaderState();
}

class _MyDataLoaderState extends State<MyDataLoader> {
  void getData() async {
    final response = await http.get('https://jsonplaceholder.typicode.com/albums/1');
    print(response);
  }

  @override
  void initState() {
    super.initState();
    getData();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Text('MyDataLoader screen'),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

问题:
以上代码的灵感来自https://flutter.dev/docs/cookbook/networking/fetch-dataMyDataLoader加载小部件时出现以下错误:

[错误:flutter/lib/ui/ui_dart_state.cc(177)] 未处理的异常:SocketException:连接失败(操作系统错误:不允许操作,errno = 1),地址 = jsonplaceholder.typicode.com,端口 = 443

上述错误当然是因为我的小部件加载时调用了以下代码行。

最终响应 = await http.get('https://jsonplaceholder.typicode.com/albums/1');

但是 …

macos http flutter flutter-http

8
推荐指数
1
解决办法
3028
查看次数

如何为 macos 桌面应用程序启用 Flutter 互联网权限?

我正在尝试开发也可以在 destkop 上运行的 Flutter 应用程序。这个应用程序正在使用 http 包:

import 'package:http/http.dart'
Run Code Online (Sandbox Code Playgroud)

当我尝试执行 http 请求时,出现此异常:

 SocketException: Connection failed (OS Error: Operation not permitted, errno = 1), address = firebasedynamiclinks.googleapis.com, port = 443
Run Code Online (Sandbox Code Playgroud)

此应用在 Android 和 iOS 上运行,如何为 macos 启用此权限?

我正在使用 IntelliJ IDE,所以这个答案并不让我满意Flutter - http.get 在 macos 构建目标上失败:连接失败

dart flutter flutter-desktop flutter-http

7
推荐指数
1
解决办法
3927
查看次数

如何调整 flutter http、dio 或 flutter_downloader 上的下载缓冲区大小?

在此输入图像描述

我想下载一个大约300MB. 它比我想象的要慢很多,当我查看日志时,我看到它正在获取大小约为 的字节8KB。即使我寻找其他颤振库,我也没有找到调整下载缓冲区大小的方法。我该如何调整呢?

flutter dio flutter-http

7
推荐指数
1
解决办法
2519
查看次数

为什么我在使用 Flutter Web 和 Chrome 时收到 ChromeProxyService 错误

我正在使用Flutter版本3.3.8Google Chrome版本107.0.5304.110

我发送一个 http 请求,这是我收到的错误:

ChromeProxyService: Failed to evaluate expression 'xhr': InternalError: Expression evaluation in async frames is not supported. No frame with index 30..

google-chrome flutter flutter-web flutter-http flutter-web-browser

7
推荐指数
1
解决办法
838
查看次数

如何解决客户端 UNSUPPORTED_PROTOCOL(handshake_client.cc:697) 中的错误握手错误?

仅当我更新flutter版本时才会出现该问题。之前版本:2.5.3 当前版本:2.10.3

android dart flutter flutter-http

6
推荐指数
1
解决办法
453
查看次数

在 Android 12+ 中,REST API 调用在 flutter 中非常慢,在 WiFi 中需要 10 秒,而在移动数据中则不到一秒

我遇到了 Flutter Android 12+ 版本的问题。使用 Flutter http 插件(版本:0.13.5)进行应用程序消费 REST API 调用。所有API调用都是带有域名的HTTPS服务调用。API 调用需要 10 多秒才能提供响应,而相同的 API 调用在移动数据网络中只需要不到一秒。我尝试使用 Java Client 和 Postman 进行相同的 API 调用,所有响应仅花费不到一秒的时间就得到响应。

\n

在故障排除过程中,我使用Wifi网络测试了以下场景

\n
    \n
  1. 我使用 IP 地址而不是域执行 API 服务调用,只花了不到一秒的时间(HTTP 插件中禁用了 SSL 验证)
  2. \n
  3. 使用连接 keep-alive: true 测试 API 调用,然后第一次调用花费了 10+ 秒,之后后续调用只花费了不到一秒
  4. \n
  5. 一个有趣的事实是,我仅在 Android 12+ 中遇到了问题,Android 11 设备在 WiFi 网络上运行,并且服务呼叫花费了不到一秒的时间。
  6. \n
\n

现在我明白基于 Wifi 的 API 调用总是需要 10 秒 + 实际服务调用时间(例如 400 毫秒,因此相当于 10.400 秒)。

\n

这个问题有什么具体原因吗?

\n
flutter doctor -v\n[\xe2\x88\x9a] Flutter (Channel stable, 3.3.6, on Microsoft …
Run Code Online (Sandbox Code Playgroud)

android flutter flutter-http

6
推荐指数
1
解决办法
1387
查看次数

上传图片/文件到 Strapi (Flutter Web)

我正在尝试通过 Flutter Web 将图像上传到 Strapi。我知道(从此链接)我需要使用 FormData 来做到这一点。我研究了很多方法来做到这一点,我偶然发现了Dio,当然还有Http

两种解决方案都给了我错误: Unsupported operation: MultipartFile is only supported where dart:io is available.

我试过这个代码:

var request = new http.MultipartRequest("POST", Uri.parse(url));
    request.files.add(
      await http.MultipartFile.fromPath(
        "files",
        imageFilePath,
      ),
    );
    request.send().then((response) {
      if (response.statusCode == 200) print("Uploaded!");
      print(response.statusCode);
    }).catchError((e) => print(e));
Run Code Online (Sandbox Code Playgroud)

正如这里所建议的。

当我使用MultipartFile.fromBytes(...).

我只是想上传一个文件,因此我认为我的身体应该只包含 FormData ,正如Strapi 的文档中files提到的那样

form-data flutter strapi dio flutter-http

5
推荐指数
1
解决办法
2071
查看次数