Flutter跨平台通知插件universal_notifier的使用

Flutter跨平台通知插件universal_notifier的使用

universal_notifier 是一个简单的 Dart 包,实现了基于流的通知器。这个包最初是为了满足个人需求而创建的,因此虽然它应该可以正常工作,但目前还没有测试或示例。

对于文档,请访问 pub.dev

该包的关键区别在于其级联集合。这些级联集合也会在它们的子集通知它们的监听者时通知它们自己的监听者。

示例代码

以下是一个完整的示例代码,展示了如何使用 universal_notifier 插件。

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

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

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

class NotificationDemo extends StatefulWidget {
  @override
  _NotificationDemoState createState() => _NotificationDemoState();
}

class _NotificationDemoState extends State<NotificationDemo> {
  final notifier = ValueNotifier<int>(0);

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: [
        // 显示当前值
        Text('Current Value: ${notifier.value}'),
        SizedBox(height: 20),
        // 按钮用于改变值
        ElevatedButton(
          onPressed: () {
            notifier.value++;
          },
          child: Text('Increment Value'),
        ),
        SizedBox(height: 20),
        // 监听值的变化并显示
        ValueListenableBuilder<int>(
          valueListenable: notifier,
          builder: (context, value, _) {
            return Text('Value Changed: $value');
          },
        ),
      ],
    );
  }
}

说明

  1. 导入库

    import 'package:flutter/material.dart';
    import 'package:universal_notifier/universal_notifier.dart';
    
  2. 主应用类

    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: Scaffold(
            appBar: AppBar(title: Text('Universal Notifier Example')),
            body: NotificationDemo(),
          ),
        );
      }
    }
    
  3. NotificationDemo 类

    class NotificationDemo extends StatefulWidget {
      @override
      _NotificationDemoState createState() => _NotificationDemoState();
    }
    
  4. _NotificationDemoState 类

    class _NotificationDemoState extends State<NotificationDemo> {
      final notifier = ValueNotifier<int>(0); // 创建一个 ValueNotifier
    
      @override
      Widget build(BuildContext context) {
        return Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            // 显示当前值
            Text('Current Value: ${notifier.value}'),
            SizedBox(height: 20),
            // 按钮用于改变值
            ElevatedButton(
              onPressed: () {
                notifier.value++; // 改变值
              },
              child: Text('Increment Value'),
            ),
            SizedBox(height: 20),
            // 监听值的变化并显示
            ValueListenableBuilder<int>(
              valueListenable: notifier,
              builder: (context, value, _) {
                return Text('Value Changed: $value');
              },
            ),
          ],
        );
      }
    }
    

更多关于Flutter跨平台通知插件universal_notifier的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter跨平台通知插件universal_notifier的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用universal_notifier插件来实现跨平台通知的示例代码。这个插件可以帮助你在iOS和Android平台上发送本地通知。

首先,确保你已经在你的Flutter项目中添加了universal_notifier依赖。你可以在pubspec.yaml文件中添加以下依赖:

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

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

接下来,你需要进行一些平台特定的配置。

iOS 配置

对于iOS,你需要在Info.plist中添加必要的权限声明。打开ios/Runner/Info.plist并添加以下条目:

<key>NSUserNotificationCenterUsageDescription</key>
<string>We need your permission to send notifications</string>
<key>UIBackgroundModes</key>
<array>
    <string>remote-notification</string>
</array>

Android 配置

对于Android,你需要在AndroidManifest.xml中添加权限和服务声明。打开android/app/src/main/AndroidManifest.xml并添加以下条目:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.VIBRATE" />

<application
    ...>
    <service
        android:name=".MyFirebaseMessagingService"
        android:exported="true">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>
</application>

注意:MyFirebaseMessagingService是Firebase Cloud Messaging服务的实现,如果你不需要Firebase,可以省略这部分。

Flutter 代码实现

现在你可以在Flutter代码中使用universal_notifier来发送通知了。下面是一个简单的示例:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Universal Notifier Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () {
              _sendNotification();
            },
            child: Text('Send Notification'),
          ),
        ),
      ),
    );
  }

  void _sendNotification() async {
    // 检查权限
    bool hasPermission = await UniversalNotifier.requestNotificationPermission();
    if (hasPermission) {
      // 创建通知
      var notification = Notification(
        title: 'Hello',
        body: 'This is a notification from universal_notifier!',
        payload: 'OptionalPayload',
      );

      // 发送通知
      await UniversalNotifier.showNotification(notification);
    } else {
      print('Notification permission denied');
    }
  }
}

在这个示例中,当用户点击按钮时,会请求通知权限(如果还没有授予的话),然后发送一个包含标题和正文的本地通知。

注意事项

  1. 权限处理:在实际应用中,你需要更好地处理权限请求的结果,比如向用户解释为什么需要这些权限。
  2. 通知内容:你可以根据需要自定义通知的图标、声音、点击事件等。
  3. 平台差异:虽然universal_notifier尽量统一了API,但某些平台上可能仍然有特定的实现细节需要注意。

希望这个示例能帮助你在Flutter项目中集成并使用universal_notifier插件。如果你遇到任何问题,可以查阅官方文档或相关社区资源。

回到顶部