Flutter通知卡片展示插件stacked_notification_cards的使用
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
:点击查看按钮时的回调函数。
演示
通过这个插件,你可以轻松地在你的Flutter应用中实现类似iOS的通知卡片效果。希望这些信息对你有所帮助!如果有任何问题或需要进一步的帮助,请随时提问。
更多关于Flutter通知卡片展示插件stacked_notification_cards的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于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),
),
),
],
);
}
}
注意事项
- Uuid:在这个示例中,我们使用
Uuid().v4()
来生成每个通知卡片的唯一ID。你需要添加uuid
依赖到你的pubspec.yaml
文件中。
dependencies:
uuid: ^最新版本号 # 请替换为实际的最新版本号
-
布局:在这个示例中,我们使用
Column
来布局StackedNotificationCards
和你的主要内容。你可以根据需要调整布局。 -
回调:我们提供了
onCardTapped
和onCardRemoved
回调,以便在卡片被点击或移除时执行相应的操作。 -
样式:你可以根据需要调整卡片的样式,比如
cardElevation
、cardShape
、cardBackground
和cardShadow
等。
通过上述代码,你应该能够在Flutter应用中成功使用stacked_notification_cards
插件来展示通知卡片。