Flutter应用角标管理插件flutter_new_badger的使用

Flutter应用角标管理插件flutter_new_badger的使用

开始使用

iOS

在iOS上,更新角标的权限是必需的。当添加或移除角标时,会自动请求此权限。

请在你的Info.plist文件中添加以下内容以支持远程通知:

<key>UIBackgroundModes</key>
<array>
    <string>remote-notification</string>
</array>

Android

在Android上,官方API不支持显示角标。但是某些设备(如三星、HTC等)支持该功能。

在你的AndroidManifest.xml文件中添加以下权限:

<!-- 三星 -->
<uses-permission android:name="com.sec.android.provider.badge.permission.READ"/>
<uses-permission android:name="com.sec.android.provider.badge.permission.WRITE"/>

<!-- 华为 -->
<uses-permission android:name="com.huawei.android.launcher.permission.CHANGE_BADGE" />
<uses-permission android:name="com.huawei.android.launcher.permission.READ_SETTINGS" />
<uses-permission android:name="com.huawei.android.launcher.permission.WRITE_SETTINGS" />

<!-- HTC -->
<uses-permission android:name="com.htc.launcher.permission.READ_SETTINGS"/>
<uses-permission android:name="com.htc.launcher.permission.UPDATE_SHORTCUT"/>

<!-- Apex -->
<uses-permission android:name="com.anddoes.launcher.permission.UPDATE_COUNT"/>

<!-- 索尼 -->
<uses-permission android:name="com.sonyericsson.home.permission.BROADCAST_BADGE"/>
<uses-permission android:name="com.sonymobile.home.permission.PROVIDER_INSERT_BADGE"/>

<!-- Solid -->
<uses-permission android:name="com.majeur.launcher.permission.UPDATE_BADGE"/>

Dart

首先,在你的Dart文件中导入插件包:

import 'package:flutter_new_badger/flutter_new_badger.dart';

然后你可以添加一个角标:

FlutterNewBadger.setBadge(1);

移除一个角标:

FlutterNewBadger.removeBadge();

获取当前角标:

int? badge = await FlutterNewBadger.getBadge();

增加角标计数并返回新的角标计数:

int? int = await FlutterNewBadger.incrementBadgeCount();

减少角标计数并返回新的角标计数:

int? int = await FlutterNewBadger.decrementBadgeCount();

完整示例代码

以下是完整的示例代码,展示了如何使用flutter_new_badger插件来管理应用的角标。

// Copyright 2024 Simon Braillard
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

import 'dart:developer' as developer;

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

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

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  int? badgeCount;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('插件示例应用'),
        ),
        body: Center(
          child: Column(
            mainAxisSize: MainAxisSize.min,
            children: [
              const Text('新角标插件'),
              const SizedBox(height: 16),
              Text('角标数量: $badgeCount'),
              const SizedBox(height: 16),
              ElevatedButton(
                onPressed: () async {
                  await FlutterNewBadger.setBadge(5);
                  setState(() {
                    badgeCount = 5;
                  });
                  developer.log('角标设置成功', name: 'FlutterNewBadger');
                },
                child: const Text('设置5个角标'),
              ),
              const SizedBox(height: 16),
              ElevatedButton(
                onPressed: () async {
                  await FlutterNewBadger.removeBadge();
                  setState(() {
                    badgeCount = null;
                  });
                  developer.log('角标已移除', name: 'FlutterNewBadger');
                },
                child: const Text('移除角标'),
              ),
              const SizedBox(height: 16),
              ElevatedButton(
                onPressed: () async {
                  badgeCount = await FlutterNewBadger.incrementBadgeCount();
                  setState(() {});
                  developer.log('角标数量增加: $badgeCount', name: 'FlutterNewBadger');
                },
                child: const Text('增加角标数量'),
              ),
              const SizedBox(height: 16),
              ElevatedButton(
                onPressed: () async {
                  badgeCount = await FlutterNewBadger.decrementBadgeCount();
                  setState(() {});
                  developer.log('角标数量减少: $badgeCount', name: 'FlutterNewBadger');
                },
                child: const Text('减少角标数量'),
              ),
              const SizedBox(height: 16),
              ElevatedButton(
                onPressed: () async {
                  badgeCount = await FlutterNewBadger.getBadge();
                  setState(() {});
                  developer.log('当前角标数量: $badgeCount', name: 'FlutterNewBadger');
                },
                child: const Text('获取角标数量'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

更多关于Flutter应用角标管理插件flutter_new_badger的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter应用角标管理插件flutter_new_badger的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


flutter_new_badger 是一个用于管理 Flutter 应用角标(App Badge)的插件。它允许开发者在应用程序的图标上显示未读消息数量、通知数量等信息。这个插件支持 Android 和 iOS 平台。

安装

首先,你需要在 pubspec.yaml 文件中添加 flutter_new_badger 依赖项:

dependencies:
  flutter:
    sdk: flutter
  flutter_new_badger: ^1.0.0 # 请根据实际情况选择最新版本

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

基本用法

在 Dart 文件中导入 flutter_new_badger 包,然后你可以使用它来设置和清除角标。

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomeScreen(),
    );
  }
}

class HomeScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter New Badger Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: () async {
                // 设置角标数量
                await FlutterNewBadger.updateBadgeCount(5);
              },
              child: Text('Set Badge to 5'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () async {
                // 清除角标
                await FlutterNewBadger.removeBadge();
              },
              child: Text('Remove Badge'),
            ),
          ],
        ),
      ),
    );
  }
}

平台配置

iOS

在 iOS 上,角标是原生支持的,但你需要确保在 Info.plist 文件中启用了通知权限。你可以在 Info.plist 中添加以下内容:

<key>UIBackgroundModes</key>
<array>
    <string>remote-notification</string>
</array>
回到顶部