3

我正在使用awesome_notifications并希望在单击通知中的“标记为已读”时关闭应用程序并且不将应用程序置于前台。

应用程序正确地没有将应用程序置于前台,但通知不会被解雇。

下面是代码

import 'package:awesome_notifications/awesome_notifications.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();

  AwesomeNotifications().initialize(
      null,
      [
        NotificationChannel(
            channelKey: 'basic_channel',
            channelName: 'Basic notifications',
            channelDescription: 'Notification channel for basic tests',
            // defaultColor: Color(0xFF9D50DD),
            // ledColor: Colors.white
      )
      ],
      debug: false);

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });

    AwesomeNotifications().createNotification(
        content: NotificationContent(
            id: 10,
            channelKey: 'basic_channel',
            title: 'Simple Notification',
            body: 'Simple body',
            payload: {'uuid': 'user-profile-uuid'}),
        actionButtons: [
          NotificationActionButton(
              key: 'READ',
              label: 'Mark as read',
              autoCancel: true,
              buttonType: ActionButtonType.DisabledAction),
          NotificationActionButton(
              key: 'PROFILE',
              label: 'Show Profile',
              autoCancel: false,
              enabled: true,
              buttonType: ActionButtonType.Default)
        ]);
  }

  @override
  void initState() {
    super.initState();

    AwesomeNotifications().isNotificationAllowed().then((isAllowed) {
      if (!isAllowed) {
        AwesomeNotifications().requestPermissionToSendNotifications();
      }
    });

    AwesomeNotifications().actionStream.listen((receivedNotification) {
      debugPrint(
          "  actionStream received " + receivedNotification.toString());
    });

    AwesomeNotifications().createdStream.listen((receivedNotification) {
      debugPrint(
          "  createdStream received " + receivedNotification.toString());
    });

    AwesomeNotifications().displayedStream.listen((receivedNotification) {
      debugPrint(
          "  displayedStream received " + receivedNotification.toString());
    });

    AwesomeNotifications().dismissedStream.listen((receivedNotification) {
      debugPrint(
          "  dismissedStream received " + receivedNotification.toString());
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        //
        title: Text(widget.title),
      ),
      body: Center(
        //
        child: Column(
          //
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }
}

通知怎么也可以被驳回?之前和之后截屏

由于“标记为已读”的按钮类型是 ActionButtonType.DisabledAction 它正确地不会将应用程序置于前台(要求之一),但“解雇”的第二个要求(即通知被清除,没有发生并且通知是入住。如何同时清除通知?

4

3 回答 3

1

根据文档,您的代码是正确的。ActionButtonType.DisabledAction应该从托盘中删除通知。但它没有(即使在示例应用程序中)。我认为这是一个错误。您可以创建 GitHub 问题并请求修复。还有一件事,AwesomeNotifications().dismiss(id)删除了通知。但是 Awesome Notification 不支持自定义操作。所以,我认为你必须等待修复。

于 2021-07-14T05:20:56.277 回答
0

我认为这段代码可以帮助你

int id=Random().nextInt(1000);
await NotificationHandler.flutterLocalNotificationPlugin.show(
    id, title, body, platform,
    payload: 'my payload');
await NotificationHandler.flutterLocalNotificationPlugin.cancel(id);

或点击此链接可以帮助 关于处理通知

于 2022-01-14T14:30:37.100 回答
0

据我所知,隐藏通知是不可能的,如果它在前台,至少如果不做一些“技巧”这是不可能的。

于 2021-10-03T14:38:12.603 回答