flutter 如何从dart中的url同步下载文件?

nuypyhwy  于 2023-01-02  发布在  Flutter
关注(0)|答案(1)|浏览(265)

看来在dart中使用Futures/async代码就像癌症一样,需要你用async关键字重写整个应用程序。我的应用程序本质上是同步的,我只是有一小部分需要下载一些东西。互联网上的每一个消息来源似乎都告诉我,如果不重写整个应用程序以使其同步或创建同步版本,就无法简单地从互联网上下载文件的http库...肯定不对吧?C#也有同样的问题,一个传染性的异步关键字,但你至少可以解决它...
作为一个例子,这里是我想要的代码,但异步:

Future<String> downloadTxtFile(String url) async {
  return await http.read(Uri.parse(url));
}

如何同步地执行/调用这个函数?如果它返回一个Future,那么调用函数必须是异步的才能等待它。

trnvg8h3

trnvg8h31#

要从Dart中的URL同步下载文件,可以使用http软件包。以下是如何使用此软件包下载文件的示例:

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

// This function downloads a file from the given URL and returns its contents as a string.
Future<String> downloadFile(String url) async {
  final response = await http.get(url);

  // Check the status code for the response. If the status code is not 200 (OK),
  // then throw an exception.
  if (response.statusCode != 200) {
    throw Exception('Failed to download file');
  }

  return response.body;
}

要使用这个函数,你可以调用它并传入你想要下载的文件的URL。这个函数将返回一个Future,它将以字符串的形式完成文件的内容。

void main() {
  downloadFile('http://example.com/file.txt').then((contents) {
    print(contents);
  });
}

请注意,此函数是异步的,这意味着它将返回一个Future,该Future在下载完成时完成。如果要同步下载文件,可以使用await关键字等待Future完成后再继续。

void main() {
  // Wait for the download to complete before continuing
  String contents = await downloadFile('http://example.com/file.txt');
  print(contents);
}

相关问题