Flutter全屏显示图片插件full_screen_image的使用
Flutter全屏显示图片插件full_screen_image的使用
full_screen_image
是一个用于在Flutter应用中实现图片全屏显示的插件。它支持通过垂直滚动关闭全屏模式,并且可以与Hero widget结合使用,提供流畅的动画效果。
安装
要在你的项目中使用这个插件,请在 pubspec.yaml
文件中添加以下依赖:
dependencies:
full_screen_image: any
然后运行 flutter pub get
来安装依赖。
示例代码
以下是一个完整的示例demo,展示了如何使用 full_screen_image
插件来实现不同类型的全屏图片显示。
主要代码
import 'package:flutter/material.dart';
import 'package:full_screen_image/full_screen_image.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
String lorem = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. ..."; // 省略部分内容
Widget fullScreenImage() => FullScreenWidget(
child: ClipRRect(
borderRadius: BorderRadius.circular(16),
child: Image.asset(
"assets/image1.jpg",
fit: BoxFit.cover,
),
),
);
Widget fullScreenHeroWidget() => FullScreenWidget(
child: Hero(
tag: "customTag",
child: ClipRRect(
borderRadius: BorderRadius.circular(16),
child: Image.asset(
"assets/image2.jpg",
fit: BoxFit.cover,
),
),
),
);
Widget smallImage() => FullScreenWidget(
child: Center(
child: Hero(
tag: "smallImage",
child: ClipRRect(
borderRadius: BorderRadius.circular(16),
child: Image.asset(
"assets/image3.jpg",
fit: BoxFit.cover,
),
),
),
),
);
Widget customBackgroundColor() => FullScreenWidget(
backgroundColor: Colors.purple,
child: Center(
child: Hero(
tag: "customBackground",
child: ClipRRect(
borderRadius: BorderRadius.circular(16),
child: Image.asset(
"assets/image3.jpg",
fit: BoxFit.cover,
),
),
),
),
);
Widget nonTransparentWidget() => FullScreenWidget(
backgroundColor: Colors.purple,
backgroundIsTransparent: false,
child: Center(
child: Hero(
tag: "nonTransparent",
child: ClipRRect(
borderRadius: BorderRadius.circular(16),
child: Image.asset(
"assets/image3.jpg",
fit: BoxFit.cover,
),
),
),
),
);
Widget customWidget() => FullScreenWidget(
child: SafeArea(
child: Card(
elevation: 4,
child: Container(
height: 350,
padding: const EdgeInsets.all(8.0),
child: Column(
children: <Widget>[
Hero(
tag: "customWidget",
child: ClipRRect(
borderRadius: BorderRadius.circular(16),
child: Image.asset(
"assets/image3.jpg",
fit: BoxFit.cover,
),
),
),
SizedBox(height: 16),
Text('Lorem text', style: TextStyle(color: Colors.black, fontWeight: FontWeight.bold)),
SizedBox(height: 16),
Expanded(child: Text(lorem)),
],
),
),
),
),
);
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('Full screen widget example')),
body: SingleChildScrollView(
child: Column(
children: <Widget>[
GridView.count(
primary: false,
shrinkWrap: true,
crossAxisCount: 2,
children: <Widget>[
_buildGridItem("Full screen image", fullScreenImage()),
_buildGridItem("Full screen image with hero", fullScreenHeroWidget()),
_buildGridItem("Small image with hero", smallImage()),
_buildGridItem("Custom background", customBackgroundColor()),
_buildGridItem("None transparent", nonTransparentWidget()),
],
),
_buildListItem("Custom Widget", customWidget()),
],
),
),
),
);
}
Widget _buildGridItem(String title, Widget widget) {
return Column(
children: <Widget>[
Padding(padding: const EdgeInsets.all(8.0), child: widget),
ListTile(title: Text(title, textAlign: TextAlign.center)),
],
);
}
Widget _buildListItem(String title, Widget widget) {
return Column(
children: <Widget>[
Padding(padding: const EdgeInsets.all(8.0), child: widget),
ListTile(title: Text(title, textAlign: TextAlign.center)),
],
);
}
}
说明
- 全屏显示图片:使用
FullScreenWidget
包裹图片组件,图片将自动进入全屏模式。 - 带Hero效果的全屏显示:通过
Hero
组件实现平滑过渡效果。 - 自定义背景颜色:可以通过
backgroundColor
属性设置背景颜色。 - 非透明背景:通过设置
backgroundIsTransparent
为false
实现非透明背景。 - 自定义Widget:可以在
FullScreenWidget
中嵌入更复杂的布局。
确保你已经准备好相应的图片资源(如 image1.jpg
, image2.jpg
, image3.jpg
),并将其放置在 assets
目录下,并在 pubspec.yaml
中正确配置。
许可证
该插件使用Apache许可证,详情请参见 LICENSE。
更多关于Flutter全屏显示图片插件full_screen_image的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter全屏显示图片插件full_screen_image的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何使用 full_screen_image
插件在 Flutter 中实现全屏显示图片的示例代码。
首先,确保你已经在 pubspec.yaml
文件中添加了 full_screen_image
依赖:
dependencies:
flutter:
sdk: flutter
full_screen_image: ^x.y.z # 请替换为最新版本号
然后运行 flutter pub get
来安装依赖。
接下来,在你的 Flutter 应用中,你可以按照以下步骤实现全屏显示图片的功能。
1. 导入插件
在你的 Dart 文件中导入 full_screen_image
插件:
import 'package:full_screen_image/full_screen_image.dart';
2. 创建一个简单的 UI 来展示图片并触发全屏显示
下面是一个简单的示例,展示了一个 GridView
,点击图片后会全屏显示:
import 'package:flutter/material.dart';
import 'package:full_screen_image/full_screen_image.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'FullScreen Image Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: ImageGalleryPage(),
);
}
}
class ImageGalleryPage extends StatelessWidget {
final List<String> imageUrls = [
'https://example.com/image1.jpg',
'https://example.com/image2.jpg',
'https://example.com/image3.jpg',
// 添加更多图片URL
];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Image Gallery'),
),
body: GridView.builder(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
crossAxisSpacing: 4.0,
mainAxisSpacing: 4.0,
),
itemCount: imageUrls.length,
itemBuilder: (BuildContext context, int index) {
return GestureDetector(
onTap: () {
Navigator.of(context).push(FullScreenImagePageRoute(
photoUrls: imageUrls,
initialIndex: index,
));
},
child: Image.network(
imageUrls[index],
fit: BoxFit.cover,
),
);
},
),
);
}
}
class FullScreenImagePageRoute extends MaterialPageRoute<void> {
final List<String> photoUrls;
final int initialIndex;
FullScreenImagePageRoute({
required this.photoUrls,
required this.initialIndex,
}) : super(
builder: (BuildContext context) => FullScreenImagePage(
photoUrls: photoUrls,
initialIndex: initialIndex,
),
);
}
class FullScreenImagePage extends StatelessWidget {
final List<String> photoUrls;
final int initialIndex;
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.black,
body: FullScreenImage(
photoUrls: photoUrls,
initialPhotoIndex: initialIndex,
clickCloseIconToExit: true,
doubleTapToZoom: true,
),
);
}
}
3. 运行应用
保存文件并运行你的 Flutter 应用。你现在应该能够看到一个图片网格,点击任何一张图片都会全屏显示它。
解释
ImageGalleryPage
是一个简单的图片网格页面,每一张图片都可以点击。FullScreenImagePageRoute
是一个自定义的MaterialPageRoute
,用于将全屏图片页面推送到导航堆栈中。FullScreenImagePage
使用FullScreenImage
组件显示全屏图片,并处理一些基本的全屏图片查看功能(如双击放大、点击关闭图标退出等)。
这个示例展示了如何使用 full_screen_image
插件在 Flutter 应用中实现全屏显示图片的基本功能。你可以根据需要进一步自定义和扩展这个示例。