Flutter网络图片加载插件universal_web_image的使用
Flutter网络图片加载插件universal_web_image的使用
Features
- 显示HTML图像:如果必要,可以将图像显示为HTML图像。
- 自动区分SVG图像和其他图像:插件会自动识别并处理SVG图像。
Motivation
在尝试加载没有有效XHR状态200的图像时,Flutter Web应用会抛出错误,并且图像不会显示。例如:
Failed to load network image.
Image URL: https://example.com/invalidConfiguredServerImage.jpg
Trying to load an image from another domain? Find answers at:
https://flutter.dev/docs/development/platform-integration/web-images
universal_web_image
插件通过使用Web Image作为回退来解决这个问题。
Usage
示例代码
以下是一个完整的示例代码,展示了如何使用 universal_web_image
插件加载网络图片。
import 'package:flutter/material.dart';
import 'package:universal_web_image/universal_web_image.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Universal Web Image Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(title: 'Universal Web Image Demo Page'),
);
}
}
class MyHomePage extends StatelessWidget {
const MyHomePage({super.key, required this.title});
final String title;
// 424x283
static const validImageUrl =
'https://www.kesselheld.de/content/uploads/2018/09/durchschnittliche-heizkosten.jpg';
// 640x300
static const invalidImageUrl =
'https://img.utopia.de/cH68CrxH2UEqUr8eVAWC-BCgXoU=/640x300/https://utopia.de/app/uploads/2019/02/richtig-heizen-wpb-ivan-kruk-ri-190820-1280x720.jpg';
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: [
const Text(
'Web Image with valid XHR 200 status with custom loader',
),
UniversalWebImage(
imageUrl: validImageUrl,
customLoaderBuilder: (context) =>
const Center(child: CircularProgressIndicator()),
),
const Text(
'Web Image with invalid XHR 0 status',
),
const UniversalWebImage(
imageUrl: invalidImageUrl,
width: 640,
height: 300,
),
const Text(
'Regular image with invalid XHR 0 status',
),
Image.network(
invalidImageUrl,
width: 640,
height: 300,
),
],
),
),
);
}
}
代码说明
-
导入依赖:
import 'package:flutter/material.dart'; import 'package:universal_web_image/universal_web_image.dart';
-
定义主应用:
void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( title: 'Universal Web Image Demo', theme: ThemeData( primarySwatch: Colors.blue, ), home: const MyHomePage(title: 'Universal Web Image Demo Page'), ); } }
-
定义主页:
class MyHomePage extends StatelessWidget { const MyHomePage({super.key, required this.title}); final String title; static const validImageUrl = 'https://www.kesselheld.de/content/uploads/2018/09/durchschnittliche-heizkosten.jpg'; static const invalidImageUrl = 'https://img.utopia.de/cH68CrxH2UEqUr8eVAWC-BCgXoU=/640x300/https://utopia.de/app/uploads/2019/02/richtig-heizen-wpb-ivan-kruk-ri-190820-1280x720.jpg'; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text(title), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.start, children: [ const Text( 'Web Image with valid XHR 200 status with custom loader', ), UniversalWebImage( imageUrl: validImageUrl, customLoaderBuilder: (context) => const Center(child: CircularProgressIndicator()), ), const Text( 'Web Image with invalid XHR 0 status', ), const UniversalWebImage( imageUrl: invalidImageUrl, width: 640, height: 300, ), const Text( 'Regular image with invalid XHR 0 status', ), Image.network( invalidImageUrl, width: 640, height: 300, ), ], ), ), ); } }
关键点
UniversalWebImage
:用于加载网络图片,并自动处理无效的XHR状态。customLoaderBuilder
:自定义加载器,可以在图片加载过程中显示一个加载指示器。validImageUrl
和invalidImageUrl
:分别表示有效的和无效的图片URL。
通过使用 universal_web_image
插件,你可以更方便地处理网络图片加载问题,特别是在Web平台上。希望这个示例对你有所帮助!
更多关于Flutter网络图片加载插件universal_web_image的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter网络图片加载插件universal_web_image的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用universal_web_image
插件来加载网络图片的详细代码示例。universal_web_image
是一个强大的图片加载库,支持多种图片源和缓存策略。
1. 添加依赖
首先,你需要在pubspec.yaml
文件中添加universal_web_image
的依赖:
dependencies:
flutter:
sdk: flutter
universal_web_image: ^latest_version # 请替换为最新版本号
2. 导入包
在你的Dart文件中导入universal_web_image
包:
import 'package:universal_web_image/universal_web_image.dart';
3. 配置缓存
通常,你会在应用的初始化部分配置全局的缓存设置。你可以在main.dart
文件中进行配置:
import 'package:flutter/material.dart';
import 'package:universal_web_image/universal_image_loader.dart';
void main() {
// 初始化全局图片加载器
UniversalImageLoader.instance
..defaultMemoryCacheSize = 100 * 1024 * 1024 // 设置内存缓存大小
..defaultDiskCacheSize = 100 * 1024 * 1024 // 设置磁盘缓存大小
..init(context: getApplicationContext()); // 初始化上下文(通常在Android中使用)
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: ImageScreen(),
);
}
}
4. 使用UniversalImage加载网络图片
在你的具体页面中,使用UniversalImage
小部件来加载网络图片:
import 'package:flutter/material.dart';
import 'package:universal_web_image/universal_image_widget.dart';
class ImageScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
String imageUrl = "https://example.com/path/to/your/image.jpg";
return Scaffold(
appBar: AppBar(
title: Text("Universal Web Image Example"),
),
body: Center(
child: UniversalImage(
imageUrl,
placeholder: Image.asset('assets/placeholder.png'), // 占位图
errorWidget: Icon(Icons.error), // 加载失败时显示的控件
loadingWidget: CircularProgressIndicator(), // 加载时显示的控件
imageBuilder: (context, imageProvider) {
return FadeInImage.memoryNetwork(
placeholder: kTransparentImage,
image: imageUrl,
fit: BoxFit.cover,
);
},
// 其他可选参数
width: 300,
height: 200,
),
),
);
}
}
5. 运行应用
确保你已经正确配置了所有依赖并运行应用:
flutter pub get
flutter run
注意事项
- 占位图和错误图:确保你已经将占位图和错误图放在
assets
目录下,并在pubspec.yaml
中声明。 - 缓存管理:
universal_web_image
提供了丰富的缓存管理功能,你可以根据需要进行配置,如清理缓存等。 - 网络权限:如果你的应用需要访问网络,确保在
AndroidManifest.xml
和Info.plist
中声明了网络权限。
以上代码示例展示了如何在Flutter项目中使用universal_web_image
插件来加载网络图片。如果你需要更多高级功能,请查阅官方文档。