Flutter卡片动画悬停效果插件card_animation_hover的使用

Flutter卡片动画悬停效果插件card_animation_hover的使用

特性

Flutter中的card_animation_hover插件提供了一种简单的方式来为卡片添加悬停动画效果。当用户将鼠标悬停在卡片上时,卡片会执行动画,提升用户体验。

card_animation

完整示例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.'),
          ],
        ),
      ),
    );
  }
}

使用步骤

  1. 添加依赖
    pubspec.yaml文件中添加card_animation_hover插件的依赖:

    dependencies:
      card_animation_hover: ^0.0.2
    
  2. 导入包
    在Dart文件中导入card_animation_hover包:

    import 'package:card_animation_hover/card_animation_hover.dart';
    
  3. 创建卡片数据
    定义一个包含卡片信息的列表,每个卡片包含图片、标题和内容:

    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.',
        },
      ]
    ];
    
  4. 使用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

1 回复

更多关于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),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

在这个示例中:

  1. CardHoverEffect 是插件提供的组件,用于添加悬停动画效果。
  2. child 属性接受一个 Card 组件,你可以在这个 Card 中添加任何你想要的子组件,比如图片、文本等。
  3. hoverElevation 属性定义了悬停时卡片的阴影高度。
  4. hoverScale 属性定义了悬停时卡片的缩放比例。
  5. hoverColor 属性定义了悬停时卡片下方的半透明颜色。

运行这个代码,你将看到一个带有悬停动画效果的卡片。当你将鼠标悬停在卡片上时,卡片会放大并显示更深的阴影效果。

希望这个示例对你有所帮助!

回到顶部