Flutter消息收件箱管理插件sirenapp_flutter_inbox的使用
Flutter消息收件箱管理插件sirenapp_flutter_inbox的使用
概述
<code>sirenapp_flutter_inbox</code>
是一个全面且可定制的 Flutter UI 工具包,用于显示和管理通知。本文档提供了有关如何安装、配置和有效使用该 SDK 的详细信息。
1. 安装
要安装 <code>sirenapp_flutter_inbox</code>
包:
- 打开你的
<code>pubspec.yaml</code>
文件。 - 添加
<code>sirenapp_flutter_inbox</code>
到你的依赖项。 - 在终端中运行
<code>flutter pub get</code>
来安装包。
dependencies:
sirenapp_flutter_inbox: ^x.x.x
2. 配置
2.1 初始化
初始化 SDK 并传递用户令牌和接收者 ID。将提供者包裹在应用程序的根组件周围。
import 'package:sirenapp_flutter_inbox/sirenapp_flutter_inbox.dart';
void main() {
runApp(
SirenProvider(
userToken: 'YOUR_USER_TOKEN',
recipientId: 'YOUR_RECIPIENT_ID',
child: MyApp(),
),
);
}
2.2 配置通知图标
配置通知图标后,下一步是设置通知图标。
此部件包含一个通知图标及其徽章以显示未读通知的数量。
SirenInboxIcon()
通知图标参数
以下是图标部件的可选参数:
参数名 | 描述 | 类型 | 默认值 |
---|---|---|---|
darkMode | 启用暗模式的切换(当未传递自定义主题时) | bool |
false |
disabled | 禁用图标的点击事件 | bool |
false |
hideBadge | 隐藏未读计数徽章 | bool |
false |
notificationIcon | 选择自定义通知图标 | Widget |
null |
onError | 错误处理回调 | Function(SirenErrorType) |
null |
onTap | 自定义通知图标的点击处理器 | VoidCallback |
null |
theme | 主题属性用于自定义颜色主题 | CustomThemeColors |
null |
customStyles | 自定义样式属性用于自定义样式 | CustomStyles |
null |
主题定制
以下是一些可用的主题选项:
theme: CustomThemeColors(
notificationIconColor: Colors.purple,
badgeColors: BadgeColors(
color: Colors.greenAccent, textColor: Colors.black),
)
样式定制
以下是通知图标的一些自定义样式选项:
customStyles: CustomStyles(
notificationIconStyle: NotificationIconStyle(size: 20),
badgeStyle: BadgeStyle(fontSize: 9, size: 5),
)
2.3 配置通知收件箱
收件箱是一个分页列表视图,用于显示通知。
SirenInbox(
headerParams: HeaderParams(showBackButton: true),
cardParams: CardParams(hideAvatar: false),
onError: (error) {
// 处理错误
},
)
通知收件箱参数
以下是 <code>Siren Inbox</code>
小部件的参数:
参数名 | 描述 | 类型 | 默认值 |
---|---|---|---|
darkMode | 启用暗模式的切换(当未传递自定义主题时) | bool |
false |
hideTab | 启用所有和未读标签的切换 | bool |
false |
itemsPerFetch | 每次 API 请求获取的通知数量(最多 50 条) | int |
20 |
listEmptyWidget | 空通知列表的自定义小部件 | Widget |
null |
customCard | 自定义通知卡片的小部件 | Widget |
null |
customLoader | 自定义初始加载状态的小部件 | Widget |
null |
customErrorWidget | 自定义错误小部件 | Widget |
null |
cardParams | 通知卡片的属性 | CardParams |
CardParams(hideAvatar: false, disableAutoMarkAsRead: false, hideDelete: false, deleteIcon: Icon(Icons.close), onAvatarClick: Function(NotificationType), hideMediaThumbnail: false, onMediaThumbnailClick: Function(NotificationType)) |
headerParams | 通知窗口头的属性 | HeaderParams |
HeaderParams(hideHeader: false, hideClearAll: false,title: 'Notifications', customHeader: null showBackButton:false, backButton: null, onBackPress: ()=> null ) |
tabParams | 标签栏的属性 | TabParams |
TabParams(tabs: [TabItem(key: 'ALL', title: 'All'), TabItem(key: 'UNREAD', title: 'Unread')], activeTabIndex:0,) |
onCardClick | 通知卡片的自定义点击处理器 | Function(NotificationType) |
null |
onError | 错误处理回调 | Function(SirenErrorType) |
null |
theme | 主题属性用于自定义颜色主题 | CustomThemeColors |
null |
customStyles | 自定义样式属性用于自定义样式 | CustomStyles |
null |
主题定制
以下是可用的一些主题选项:
theme: CustomThemeColors(
primary: Colors.blue,
highlightedCardColor: Colors.blueAccent,
textColor: Colors.green,
cardColors: CardColors(
titleColor: Colors.grey,
subtitleColor: Colors.grey,
),
inboxHeaderColors: InboxHeaderColors(
titleColor: Colors.redAccent,
headerActionColor: Colors.purpleAccent,
borderColor: Colors.cyanAccent
),
),
样式选项
以下是通知收件箱的一些自定义样式选项:
customStyles: CustomStyles(
container: ContainerStyle(
padding: EdgeInsets.all(20),
decoration: BoxDecoration(color: Colors.yellow)),
cardStyle: CardStyle(
cardContainer: ContainerStyle(
padding: EdgeInsets.all(20),
decoration: BoxDecoration(
color: Colors.yellow,
border: Border.all(color: Colors.red))),
cardTitle: TextStyle(fontSize: 22, fontWeight: FontWeight.w800),
cardSubtitle:
TextStyle(fontSize: 20, fontWeight: FontWeight.w700),
cardDescription:
TextStyle(fontSize: 18, fontWeight: FontWeight.w600),
dateStyle: TextStyle(fontSize: 16, fontWeight: FontWeight.w500),
avatarSize: 30,
),
appBarStyle: InboxHeaderStyle(
headerTextStyle:
TextStyle(fontSize: 20, fontWeight: FontWeight.w900),
titlePadding: EdgeInsets.symmetric(horizontal: 30),
borderWidth: 5),
timerIconStyle: TimerIconStyle(size: 30),
deleteIconStyle: DeleteIconStyle(size: 30),
clearAllIconStyle: ClearAllIconStyle(size: 30),
),
3. Siren 类
<code>Siren Class</code>
提供了用于修改通知的实用函数。
Siren.markAsRead(id: 'notification-id');
函数名 | 参数名 | 类型 | 描述 |
---|---|---|---|
markAsReadByDate | startDate | ISO 日期字符串 | 设置指定日期之前的未读状态为已读 |
markAsReadById | id | 字符串 | 设置单个通知的已读状态 |
deleteById | id | 字符串 | 通过 ID 删除单个通知 |
deleteByDate | startDate | ISO 日期字符串 | 删除指定日期之前的全部通知 |
markAllAsViewed | startDate | ISO 日期字符串 | 设置指定日期之前的未读状态为已查看 |
示例
以下是一个基本示例,帮助你开始使用。
import 'package:flutter/material.dart';
import 'package:sirenapp_flutter_inbox/sirenapp_flutter_inbox.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
return SirenProvider(
// 获取与 Siren 团队联系以获得必要的令牌和 ID 进行集成。
userToken: 'YOUR_USER_TOKEN',
recipientId: 'YOUR_RECIPIENT_ID',
child: MaterialApp(
title: 'Siren',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: const Color(0xFFEB5017)),
useMaterial3: true,
),
home: const MyHomePage(),
),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key}) : super(key: key);
[@override](/user/override)
MyHomePageState createState() => MyHomePageState();
}
class MyHomePageState extends State<MyHomePage> {
int _selectedIndex = 0;
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: _selectedIndex == 0
? const Text('Siren Icon')
: const Text('Siren Inbox'),
actions: _selectedIndex == 0
? []
: [
IconButton(
onPressed: () {
Siren.deleteByDate(
startDate: DateTime.now().toUtc().toIso8601String());
},
icon: const Icon(Icons.delete_forever)),
IconButton(
onPressed: () {
Siren.markAsReadByDate(
startDate: DateTime.now().toUtc().toIso8601String());
},
icon: const Icon(Icons.mark_email_read)),
],
),
body: _selectedIndex == 0
? const SirenIconWidget()
: const SirenWindowWidget(),
bottomNavigationBar: BottomNavigationBar(
items: const [
BottomNavigationBarItem(
icon: Icon(Icons.notifications, size: 35),
label: 'Icon',
),
BottomNavigationBarItem(
icon: Icon(Icons.list, size: 35),
label: 'Window',
),
],
currentIndex: _selectedIndex,
onTap: (index) {
setState(() {
_selectedIndex = index;
});
},
),
);
}
}
class SirenIconWidget extends StatefulWidget {
const SirenIconWidget({Key? key}) : super(key: key);
[@override](/user/override)
State<SirenIconWidget> createState() => _SirenIconWidgetState();
}
class _SirenIconWidgetState extends State<SirenIconWidget> {
Icon? notificationIcon;
bool? hideBadge;
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
body: Column(
children: [
const Spacer(),
Center(
child: SirenInboxIcon(
notificationIcon: notificationIcon,
darkMode: true,
hideBadge: hideBadge,
onError: (error) {
// print('This is the inApp error message ${error.message}');
},
),
),
Text(
'You are viewing ${notificationIcon == null ? 'default' : 'custom'} icon',
),
Text(
'You are ${hideBadge == false ? 'viewing' : 'not viewing'} notification count',
),
const Spacer(),
Padding(
padding: const EdgeInsets.all(16),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
ElevatedButton(
onPressed: () {
setState(() {
notificationIcon = notificationIcon == null
? const Icon(
Icons.notification_add,
color: Colors.black,
)
: null;
});
},
child: Text(
notificationIcon == null ? 'Custom Icon' : 'Default Icon',
),
),
ElevatedButton(
onPressed: () {
setState(() {
hideBadge = hideBadge == false ? true : false;
});
},
child: Text(
hideBadge == true ? 'Show Count Badge' : 'Hide Count Badge',
),
),
],
),
),
],
),
);
}
}
class SirenWindowWidget extends StatelessWidget {
const SirenWindowWidget({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
body: Stack(
children: [
SirenInbox(
onError: (error) {
// print('This is the inApp error message ${error.message}');
},
),
],
),
);
}
}
更多关于Flutter消息收件箱管理插件sirenapp_flutter_inbox的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter消息收件箱管理插件sirenapp_flutter_inbox的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中集成和使用sirenapp_flutter_inbox
插件来管理消息收件箱的示例代码。sirenapp_flutter_inbox
插件(假设它存在并且功能如你所描述)通常用于处理应用内的消息通知和收件箱功能。
1. 添加依赖
首先,在你的pubspec.yaml
文件中添加sirenapp_flutter_inbox
依赖:
dependencies:
flutter:
sdk: flutter
sirenapp_flutter_inbox: ^最新版本号 # 请替换为实际的最新版本号
然后运行flutter pub get
来获取依赖。
2. 导入插件
在你需要使用插件的Dart文件中导入它:
import 'package:sirenapp_flutter_inbox/sirenapp_flutter_inbox.dart';
3. 初始化插件
通常,你会在应用启动时初始化插件。你可以在main.dart
或者一个专门的初始化文件中完成这个操作:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化插件
await SirenappFlutterInbox.initialize();
runApp(MyApp());
}
4. 获取收件箱消息
假设插件提供了一个方法来获取收件箱中的消息,你可以这样调用它:
class _InboxScreenState extends State<InboxScreen> {
List<InboxMessage> messages = [];
@override
void initState() {
super.initState();
_fetchMessages();
}
Future<void> _fetchMessages() async {
try {
List<InboxMessage> fetchedMessages = await SirenappFlutterInbox.getMessages();
setState(() {
messages = fetchedMessages;
});
} catch (e) {
print('Error fetching messages: $e');
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Inbox'),
),
body: ListView.builder(
itemCount: messages.length,
itemBuilder: (context, index) {
InboxMessage message = messages[index];
return ListTile(
title: Text(message.title),
subtitle: Text(message.content),
);
},
),
);
}
}
class InboxScreen extends StatefulWidget {
@override
_InboxScreenState createState() => _InboxScreenState();
}
// 假设InboxMessage是一个从插件中获取的模型类
class InboxMessage {
String id;
String title;
String content;
DateTime timestamp;
InboxMessage({required this.id, required this.title, required this.content, required this.timestamp});
}
5. 处理消息点击事件
你可以在ListView.builder
的onTap
回调中添加逻辑来处理消息的点击事件:
ListView.builder(
itemCount: messages.length,
itemBuilder: (context, index) {
InboxMessage message = messages[index];
return ListTile(
title: Text(message.title),
subtitle: Text(message.content),
onTap: () {
// 处理消息点击事件,比如导航到详情页
Navigator.push(
context,
MaterialPageRoute(builder: (context) => MessageDetailScreen(message: message)),
);
},
);
},
),
6. 消息详情页
创建一个新的页面来显示消息的详细信息:
class MessageDetailScreen extends StatelessWidget {
final InboxMessage message;
MessageDetailScreen({required this.message});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(message.title),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
'Title: ${message.title}',
style: TextStyle(fontSize: 18),
),
SizedBox(height: 8),
Text(
'Content: ${message.content}',
style: TextStyle(fontSize: 16),
),
SizedBox(height: 8),
Text(
'Timestamp: ${message.timestamp.toLocal()}',
style: TextStyle(fontSize: 14, color: Colors.grey),
),
],
),
),
);
}
}
总结
以上代码展示了如何在Flutter应用中集成和使用一个假设的sirenapp_flutter_inbox
插件来管理消息收件箱。请注意,实际的插件API可能有所不同,因此你需要参考插件的官方文档来调整代码。如果sirenapp_flutter_inbox
插件不存在或者API不同,请参考具体插件的文档来实现相应的功能。