Flutter通知卡片展示插件stacked_notification_cards的使用

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

Flutter通知卡片展示插件 stacked_notification_cards 的使用

stacked_notification_cards 是一个用于在Flutter应用中实现iOS风格的通知卡片堆叠效果的插件。以下是该插件的功能、安装步骤及示例代码。

功能

  • 支持将通知卡片堆叠显示(iOS风格)
  • 支持展开通知卡片时带有扇形动画
  • 单个通知卡片可以向左或向右滑动
  • 可以通过滑动操作单独删除某个卡片或者整个卡片堆栈
  • 支持在 Column 中使用多个 StackedNotificationCards
    • 注意:如果在 Column 中使用,请确保将其包裹在 SingleChildScrollView

安装

在你的Flutter项目的 pubspec.yaml 文件中添加以下依赖:

dependencies:
  stacked_notification_cards: <latest_version>

然后添加以下导入语句:

import 'package:stacked_notification_cards/stacked_notification_cards.dart';

请确保将 <latest_version> 替换为最新的版本号。

使用入门

下面是一个简单的示例,展示了如何使用 StackedNotificationCards 插件:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

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

class _MyHomePageState extends State<MyHomePage> {
  /// 初始化通知数组
  List<NotificationCard> _listOfNotification = [
    NotificationCard(
      date: DateTime.now(),
      leading: Icon(Icons.account_circle, size: 48),
      title: 'OakTree 1',
      subtitle: 'We believe in the power of mobile computing.',
    ),
    NotificationCard(
      date: DateTime.now().subtract(const Duration(minutes: 4)),
      leading: Icon(Icons.account_circle, size: 48),
      title: 'OakTree 2',
      subtitle: 'We believe in the power of mobile computing.',
    ),
    NotificationCard(
      date: DateTime.now().subtract(const Duration(minutes: 10)),
      leading: Icon(Icons.account_circle, size: 48),
      title: 'OakTree 3',
      subtitle: 'We believe in the power of mobile computing.',
    ),
    NotificationCard(
      date: DateTime.now().subtract(const Duration(minutes: 30)),
      leading: Icon(Icons.account_circle, size: 48),
      title: 'OakTree 4',
      subtitle: 'We believe in the power of mobile computing.',
    ),
    NotificationCard(
      date: DateTime.now().subtract(const Duration(minutes: 44)),
      leading: Icon(Icons.account_circle, size: 48),
      title: 'OakTree 5',
      subtitle: 'We believe in the power of mobile computing.',
    ),
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.white,
      appBar: AppBar(
        title: Text('Stacked Notification Card'),
      ),
      body: SingleChildScrollView(
        child: Column(
          children: [
            StackedNotificationCards(
              boxShadow: [
                BoxShadow(
                  color: Colors.black.withOpacity(0.25),
                  blurRadius: 2.0,
                )
              ],
              notificationCardTitle: 'Message',
              notificationCards: [..._listOfNotification],
              cardColor: Color(0xFFF1F1F1),
              padding: 16,
              actionTitle: Text(
                'Notifications',
                style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
              ),
              showLessAction: Text(
                'Show less',
                style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold, color: Colors.deepPurple),
              ),
              onTapClearAll: () {
                setState(() {
                  _listOfNotification.clear();
                });
              },
              clearAllNotificationsAction: Icon(Icons.close),
              clearAllStacked: Text('Clear All'),
              cardClearButton: Text('clear'),
              cardViewButton: Text('view'),
              onTapClearCallback: (index) {
                print(index);
                setState(() {
                  _listOfNotification.removeAt(index);
                });
              },
              onTapViewCallback: (index) {
                print(index);
              },
            ),
          ],
        ),
      ),
    );
  }
}

示例说明

  • boxShadow:设置卡片的阴影效果。
  • notificationCardTitle:设置卡片标题类型。
  • notificationCards:传入通知卡片列表。
  • cardColor:设置卡片背景颜色。
  • padding:设置卡片内部填充。
  • actionTitle:设置动作标题文本。
  • showLessAction:设置“显示较少”按钮的文本样式。
  • onTapClearAll:点击“清除全部”按钮时执行的操作。
  • clearAllNotificationsAction:清除所有通知的图标。
  • clearAllStacked:清除所有堆叠卡片的文本。
  • cardClearButton:单个卡片清除按钮的文本。
  • cardViewButton:单个卡片查看按钮的文本。
  • onTapClearCallback:点击清除按钮时的回调函数。
  • onTapViewCallback:点击查看按钮时的回调函数。

演示

Demo

通过这个插件,你可以轻松地在你的Flutter应用中实现类似iOS的通知卡片效果。希望这些信息对你有所帮助!如果有任何问题或需要进一步的帮助,请随时提问。


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

1 回复

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


当然,以下是如何在Flutter项目中使用stacked_notification_cards插件来展示通知卡片的一个基本示例。这个插件允许你在应用的顶部堆叠显示通知卡片,非常适合用于显示新消息、提醒等。

首先,你需要在你的pubspec.yaml文件中添加这个插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  stacked_notification_cards: ^最新版本号  # 请替换为实际的最新版本号

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

接下来,我们将创建一个简单的Flutter应用来展示如何使用stacked_notification_cards

主应用代码(main.dart)

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Stacked Notification Cards Example'),
        ),
        body: StackedNotificationCardsExample(),
      ),
    );
  }
}

class StackedNotificationCardsExample extends StatefulWidget {
  @override
  _StackedNotificationCardsExampleState createState() => _StackedNotificationCardsExampleState();
}

class _StackedNotificationCardsExampleState extends State<StackedNotificationCardsExample> {
  final StackedNotificationController _controller = StackedNotificationController();

  @override
  void initState() {
    super.initState();
    // 模拟添加一些通知卡片
    Future.delayed(Duration.zero, () {
      _addNotificationCard('Notification 1', 'This is the first notification.');
      _addNotificationCard('Notification 2', 'This is the second notification.');
      _addNotificationCard('Notification 3', 'This is the third notification.');
    });
  }

  void _addNotificationCard(String title, String body) {
    _controller.addCard(
      StackedNotificationCardData(
        id: Uuid().v4(),  // 使用唯一ID来区分每个卡片
        title: title,
        body: body,
        onCardTapped: () {
          // 当卡片被点击时执行的回调
          print('Card tapped: $title');
        },
        onCardRemoved: () {
          // 当卡片被移除时执行的回调
          print('Card removed: $title');
        },
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: <Widget>[
        Expanded(
          child: StackedNotificationCards(
            controller: _controller,
            alignment: Alignment.topStart,
            cardPadding: EdgeInsets.only(left: 16, top: 16, right: 16),
            cardMargin: EdgeInsets.only(bottom: 8),
            cardElevation: 4,
            cardShape: RoundedRectangleBorder(
              borderRadius: BorderRadius.circular(12),
            ),
            cardBackground: Colors.white,
            cardShadow: [
              BoxShadow(
                color: Colors.black.withOpacity(0.1),
                spreadRadius: 5,
                blurRadius: 7,
                offset: Offset(0, 3), // changes position of shadow
              ),
            ],
          ),
        ),
        // 你可以在这里添加其他内容
        Padding(
          padding: const EdgeInsets.all(16.0),
          child: Text(
            'Your main content here...',
            style: TextStyle(fontSize: 18),
          ),
        ),
      ],
    );
  }
}

注意事项

  1. Uuid:在这个示例中,我们使用Uuid().v4()来生成每个通知卡片的唯一ID。你需要添加uuid依赖到你的pubspec.yaml文件中。
dependencies:
  uuid: ^最新版本号  # 请替换为实际的最新版本号
  1. 布局:在这个示例中,我们使用Column来布局StackedNotificationCards和你的主要内容。你可以根据需要调整布局。

  2. 回调:我们提供了onCardTappedonCardRemoved回调,以便在卡片被点击或移除时执行相应的操作。

  3. 样式:你可以根据需要调整卡片的样式,比如cardElevationcardShapecardBackgroundcardShadow等。

通过上述代码,你应该能够在Flutter应用中成功使用stacked_notification_cards插件来展示通知卡片。

回到顶部