Flutter卡片动画悬停效果插件card_animation_hover的使用
Flutter卡片动画悬停效果插件card_animation_hover的使用
特性
Flutter中的card_animation_hover
插件提供了一种简单的方式来为卡片添加悬停动画效果。当用户将鼠标悬停在卡片上时,卡片会执行动画,提升用户体验。
完整示例Demo
以下是一个完整的示例代码,展示了如何使用card_animation_hover
插件来创建带有悬停动画效果的卡片。
import 'package:card_animation_hover/card_animation_hover.dart';
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({
super.key,
});
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
title: const Text('Card Animation Hover Example'),
),
body: Center(
child: Padding(
padding: const EdgeInsets.all(40.0),
child: Wrap(
spacing: 20.0,
runSpacing: 22.0,
children: cards
.map((card) => CardAnimationHover(
card: card,
showAnimation: false,
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const DetailScreen(),
),
);
},
))
.toList(),
),
),
),
);
}
}
// 定义卡片数据
final List<Map<String, String>> cards = [
for (var index = 0; index < imageUrls.length; index++) ...[
{
'image': imageUrls[index],
'header': 'Canyons',
'content': 'Lorem ipsum dolor sit amet, consectetur adipisicing elit.',
},
{
'image': imageUrls[index],
'header': 'Beaches',
'content': 'Lorem ipsum dolor sit amet, consectetur adipisicing elit.',
},
{
'image': imageUrls[index],
'header': 'Trees',
'content': 'Lorem ipsum dolor sit amet, consectetur adipisicing elit.',
},
]
];
// 示例图片URL列表
const List<String> imageUrls = [
'https://example.com/image1.jpg',
'https://example.com/image2.jpg',
'https://example.com/image3.jpg',
];
// 详情页面
class DetailScreen extends StatelessWidget {
const DetailScreen({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Detail Screen'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: const <Widget>[
Text('This is a detail screen.'),
],
),
),
);
}
}
使用步骤
-
添加依赖
在pubspec.yaml
文件中添加card_animation_hover
插件的依赖:dependencies: card_animation_hover: ^0.0.2
-
导入包
在Dart文件中导入card_animation_hover
包:import 'package:card_animation_hover/card_animation_hover.dart';
-
创建卡片数据
定义一个包含卡片信息的列表,每个卡片包含图片、标题和内容:final List<Map<String, String>> cards = [ for (var index = 0; index < imageUrls.length; index++) ...[ { 'image': imageUrls[index], 'header': 'Canyons', 'content': 'Lorem ipsum dolor sit amet, consectetur adipisicing elit.', }, { 'image': imageUrls[index], 'header': 'Beaches', 'content': 'Lorem ipsum dolor sit amet, consectetur adipisicing elit.', }, { 'image': imageUrls[index], 'header': 'Trees', 'content': 'Lorem ipsum dolor sit amet, consectetur adipisicing elit.', }, ] ];
-
使用
CardAnimationHover
组件
使用CardAnimationHover
组件来显示带有悬停动画效果的卡片,并设置点击事件:Wrap( spacing: 20.0, runSpacing: 22.0, children: cards .map((card) => CardAnimationHover( card: card, showAnimation: false, onTap: () { Navigator.push( context, MaterialPageRoute( builder: (context) => const DetailScreen(), ), ); }, )) .toList(), )
更多关于Flutter卡片动画悬停效果插件card_animation_hover的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter卡片动画悬停效果插件card_animation_hover的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用card_animation_hover
插件来实现卡片悬停动画效果的代码示例。这个插件可以帮助你轻松地为卡片添加悬停动画效果。
首先,你需要在你的pubspec.yaml
文件中添加这个插件的依赖:
dependencies:
flutter:
sdk: flutter
card_animation_hover: ^最新版本号 # 请替换为实际的最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,你可以在你的Flutter项目中使用CardHoverEffect
组件来实现卡片悬停效果。以下是一个完整的示例代码:
import 'package:flutter/material.dart';
import 'package:card_animation_hover/card_hover_effect.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Card Animation Hover Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: HomeScreen(),
);
}
}
class HomeScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Card Animation Hover Example'),
),
body: Center(
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
CardHoverEffect(
child: Card(
elevation: 8.0,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12.0),
),
child: Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(12.0),
),
width: 200,
height: 300,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Image.network(
'https://via.placeholder.com/150',
fit: BoxFit.cover,
),
SizedBox(height: 16.0),
Text(
'Card Title',
style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
),
SizedBox(height: 8.0),
Text(
'This is a sample card with hover animation.',
style: TextStyle(fontSize: 14),
),
],
),
),
),
hoverElevation: 16.0,
hoverScale: 1.05,
hoverColor: Colors.grey.withOpacity(0.3),
),
],
),
),
),
);
}
}
在这个示例中:
CardHoverEffect
是插件提供的组件,用于添加悬停动画效果。child
属性接受一个Card
组件,你可以在这个Card
中添加任何你想要的子组件,比如图片、文本等。hoverElevation
属性定义了悬停时卡片的阴影高度。hoverScale
属性定义了悬停时卡片的缩放比例。hoverColor
属性定义了悬停时卡片下方的半透明颜色。
运行这个代码,你将看到一个带有悬停动画效果的卡片。当你将鼠标悬停在卡片上时,卡片会放大并显示更深的阴影效果。
希望这个示例对你有所帮助!