Flutter消息收件箱管理插件sirenapp_flutter_inbox的使用

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

Flutter消息收件箱管理插件sirenapp_flutter_inbox的使用

概述

<code>sirenapp_flutter_inbox</code> 是一个全面且可定制的 Flutter UI 工具包,用于显示和管理通知。本文档提供了有关如何安装、配置和有效使用该 SDK 的详细信息。

1. 安装

要安装 <code>sirenapp_flutter_inbox</code> 包:

  1. 打开你的 <code>pubspec.yaml</code> 文件。
  2. 添加 <code>sirenapp_flutter_inbox</code> 到你的依赖项。
  3. 在终端中运行 <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

1 回复

更多关于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.builderonTap回调中添加逻辑来处理消息的点击事件:

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不同,请参考具体插件的文档来实现相应的功能。

回到顶部