在Flutter中,可以使用http
包来从URL下载图片。以下是一个示例代码,演示了如何从app + web中的URL下载图片:
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'package:path_provider/path_provider.dart';
class ImageDownloader extends StatefulWidget {
final String imageUrl;
ImageDownloader({required this.imageUrl});
@override
_ImageDownloaderState createState() => _ImageDownloaderState();
}
class _ImageDownloaderState extends State<ImageDownloader> {
bool downloading = false;
String? imagePath;
Future<void> downloadImage() async {
setState(() {
downloading = true;
});
var response = await http.get(Uri.parse(widget.imageUrl));
var documentDirectory = await getApplicationDocumentsDirectory();
var filePath = '${documentDirectory.path}/image.jpg';
File file = File(filePath);
await file.writeAsBytes(response.bodyBytes);
setState(() {
downloading = false;
imagePath = filePath;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Image Downloader'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
if (downloading)
CircularProgressIndicator()
else if (imagePath != null)
Image.file(File(imagePath!))
else
Text('Click the button to download image'),
SizedBox(height: 20),
ElevatedButton(
onPressed: downloadImage,
child: Text('Download Image'),
),
],
),
),
);
}
}
void main() {
runApp(MaterialApp(
home: ImageDownloader(
imageUrl: 'https://example.com/image.jpg',
),
));
}
在上述代码中,我们使用了http
包来发送HTTP请求并获取图片的字节数据。然后,我们使用path_provider
包获取应用程序文档目录的路径,并将图片保存为image.jpg
文件。最后,我们使用Image.file
小部件显示下载的图片。
请注意,为了使上述代码正常工作,您需要在pubspec.yaml
文件中添加http
和path_provider
依赖项:
dependencies:
flutter:
sdk: flutter
http: ^0.13.3
path_provider: ^2.0.5
这是一个简单的示例,您可以根据自己的需求进行修改和扩展。希望对您有帮助!
领取专属 10元无门槛券
手把手带您无忧上云