Flutter卡片动画插件reveal_card的使用

发布于 1周前 作者 wuwangju 来自 Flutter

Flutter卡片动画插件reveal_card的使用

Pub Version

Reveal Card widget 帮助你创建一个包含标题、描述和背景图片的卡片。你还可以在卡片上添加一个按钮。卡片还包含一个反面,该反面也包含标题、描述和背景图片。卡片可以向上翻转,显示反面。

示例

示例

入门

示例代码

import 'package:flutter/material.dart';
import 'package:reveal_card/reveal_card.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Reveal Card',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Reveal Card'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: RevealCard(
          height: 350,
          width: 350,
          title: const Text(
            'HP Laptop',
            style: TextStyle(color: Colors.white, fontSize: 30),
          ),
          revealIcon: const Icon(
            Icons.more_vert,
            color: Colors.white,
          ),
          actionButton: FloatingActionButton(
            backgroundColor: Colors.redAccent,
            onPressed: () {},
            child: const Icon(Icons.add_shopping_cart),
          ),
          backgroundImage: const NetworkImage(
              'https://images.unsplash.com/photo-1525547719571-a2d4ac8945e2?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=764&q=80'),
          content: [
            Row(
              mainAxisAlignment: MainAxisAlignment.spaceBetween,
              children: const [
                Text('Company', style: TextStyle(color: Colors.white, fontSize: 18)),
                Expanded(
                  child: Text(
                    'SAMSUNG',
                    style: TextStyle(color: Colors.white, fontSize: 18),
                    textAlign: TextAlign.right,
                  ),
                ),
              ],
            ),
            const SizedBox(
              height: 30,
            ),
            Row(
              mainAxisAlignment: MainAxisAlignment.spaceBetween,
              children: const [
                Text('Price', style: TextStyle(color: Colors.white, fontSize: 18)),
                Expanded(
                  child: Text(
                    '\$ 1349',
                    style: TextStyle(color: Colors.white, fontSize: 18),
                    textAlign: TextAlign.right,
                  ),
                ),
              ],
            ),
            const SizedBox(
              height: 30,
            ),
            Row(
              mainAxisAlignment: MainAxisAlignment.spaceBetween,
              children: const [
                Text('Rating', style: TextStyle(color: Colors.white, fontSize: 18)),
                Expanded(
                  child: Text(
                    '4.6',
                    style: TextStyle(color: Colors.white, fontSize: 18),
                    textAlign: TextAlign.right,
                  ),
                ),
              ],
            ),
          ],
          revealBackgroundImage: const NetworkImage(
              'https://images.unsplash.com/photo-1603302576837-37561b2e2302?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1468&q=80'),
          revealCloseIcon: const Icon(Icons.close, color: Colors.white),
          revealTitle: const Text(
            'Specifications',
            style: TextStyle(fontSize: 26, color: Colors.white),
          ),
          revealContent: [
            Row(
              mainAxisAlignment: MainAxisAlignment.spaceBetween,
              children: const [
                Text(
                  'OS',
                  style: TextStyle(fontSize: 18, color: Colors.white),
                ),
                Text(
                  'Windows 11',
                  style: TextStyle(fontSize: 18, color: Colors.white),
                ),
              ],
            ),
            const SizedBox(
              height: 30,
            ),
            Row(
              mainAxisAlignment: MainAxisAlignment.spaceBetween,
              children: const [
                Text(
                  'Hard Drive',
                  style: TextStyle(fontSize: 18, color: Colors.white),
                ),
                Text(
                  'SSD',
                  style: TextStyle(fontSize: 18, color: Colors.white),
                ),
              ],
            ),
          ],
        ),
      ),
    );
  }
}

参数

参数 类型 必填/可选
title Text 必填
revealIcon Icon 可选
content List<Widget> 必填
height double 可选(默认值:300)
width double 可选(默认值:300)
actionButton FloatingActionButton 可选
backgroundImage ImageProvider 可选(默认值:backgroundColor)
opacity double (0 - 1) 可选(默认值:0.5)
backgroundColor Color 可选(默认值:白色)
revealTitle Text 可选
revealCloseIcon Icon 可选
revealContent List<Widget> 可选
revealBackgroundColor Color 可选(默认值:白色)
revealBackgroundImage ImageProvider 可选(默认值:revealBackgroundColor)
revealOpacity double (0 - 1) 可选(默认值:0.5)
revealDuration Duration 可选(默认值:200毫秒)

额外信息

  • 正面:标题、内容、翻转按钮、操作按钮、背景图片。
  • 反面:标题、内容、关闭按钮、背景图片。
  • 操作按钮:定义用户点击时执行的功能。

点击翻转按钮时,反面将以从底部向上的动画方式显示。

注意事项

根据内容调整卡片的高度和宽度。否则,内容可能会溢出。


更多关于Flutter卡片动画插件reveal_card的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter卡片动画插件reveal_card的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,我可以为你提供一个关于如何在Flutter中使用reveal_card插件来实现卡片动画的示例代码。reveal_card是一个流行的Flutter插件,用于创建揭示卡片效果的动画。

首先,你需要在你的pubspec.yaml文件中添加reveal_card依赖项:

dependencies:
  flutter:
    sdk: flutter
  reveal_card: ^latest_version  # 请替换为最新的版本号

然后,运行flutter pub get来安装依赖项。

接下来,你可以在你的Flutter应用中使用RevealCard组件。以下是一个简单的示例,展示如何在点击按钮时显示和隐藏卡片动画:

import 'package:flutter/material.dart';
import 'package:reveal_card/reveal_card.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Reveal Card Animation'),
        ),
        body: Center(
          child: MyHomePage(),
        ),
      ),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> with SingleTickerProviderStateMixin {
  bool isCardRevealed = false;

  void toggleCardReveal() {
    setState(() {
      isCardRevealed = !isCardRevealed;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        ElevatedButton(
          onPressed: toggleCardReveal,
          child: Text('Toggle Card'),
        ),
        SizedBox(height: 20),
        AnimatedRevealCard(
          isVisible: isCardRevealed,
          effect: RevealEffect.from(
            start: Offset(0, -1),
            end: Offset(0, 0),
            borderRadius: BorderRadius.circular(16),
            curve: Curves.easeInOutQuad,
            duration: Duration(milliseconds: 500),
          ),
          child: Card(
            elevation: 8,
            shape: RoundedRectangleBorder(
              borderRadius: BorderRadius.circular(16),
            ),
            child: Padding(
              padding: const EdgeInsets.all(16.0),
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: <Widget>[
                  Text(
                    'This is a reveal card!',
                    style: TextStyle(fontSize: 20),
                  ),
                  SizedBox(height: 10),
                  Text(
                    'Click the button to toggle the reveal effect.',
                    style: TextStyle(fontSize: 16),
                  ),
                ],
              ),
            ),
          ),
        ),
      ],
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,包含一个按钮和一个AnimatedRevealCard组件。点击按钮会调用toggleCardReveal方法,该方法会切换isCardRevealed状态。AnimatedRevealCard组件根据isCardRevealed状态显示或隐藏卡片,并应用一个从顶部向下的揭示动画效果。

请注意,你需要确保reveal_card插件的最新版本号已经正确填入pubspec.yaml文件中,并且已经成功安装了依赖项。

希望这个示例能够帮助你理解如何在Flutter中使用reveal_card插件来实现卡片动画效果。

回到顶部