【问题标题】:how to push notification in flutter and web api如何在颤振和 Web api 中推送通知
【发布时间】:2021-01-06 20:54:58
【问题描述】:

我希望程序能够每分钟向服务器发送一个请求并返回一个列表: 我的列表: [{“NoteId”:“Id”,“Title”:“Note Title”,“Description”:“Note Description”,“AtDateTime”:“1/7/2021 10:10:15”}]

如果 AtDateTime 字段的值等于当前时间,则显示带有列表记录值的警报

我使用一个节点js来连接数据。 请帮帮我

【问题讨论】:

    标签: flutter flutter-notification


    【解决方案1】:

    我找到了一个定期在后台执行任务的解决方案。
    但这只会每 15 分钟发生一次

    调度任务需要添加包:workmanager

    本地通知添加包:flutter_local_notifications

     dependencies:
      flutter:
        sdk: flutter
    ....
      # Use with the Workmanger for background jobs headless execution.
      workmanager: ^0.2.3
      # Use with FlutterLocalNotificationsPlugin for local push notifications.
      flutter_local_notifications: ^1.4.4+2
    

    将此代码添加到 :-> android -> app -> src -> main -> AndroidManifest.xml
    <!-- Add below permission inside 'manifest' tag -->
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    <!-- Add below permission inside 'application' tag -->
    <receiver android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationBootReceiver">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED"/>
            <action android:name="android.intent.action.MY_PACKAGE_REPLACED"/>
        </intent-filter>
    </receiver>
    

    lib -> main.dart
    import 'package:flutter/material.dart'; 
    import 'package:flutter_local_notifications/flutter_local_notifications.dart'; 
    import 'package:workmanager/workmanager.dart'; 
    
    void main() { 
        
    // needed if you intend to initialize in the `main` function 
    WidgetsFlutterBinding.ensureInitialized(); 
    Workmanager.initialize(         
        // The top level function, aka callbackDispatcher 
        callbackDispatcher,         
        // If enabled it will post a notification whenever 
        // the task is running. Handy for debugging tasks 
        isInDebugMode: true
    ); 
    // Periodic task registration 
    Workmanager.registerPeriodicTask( 
        "2",        
        //This is the value that will be 
        // returned in the callbackDispatcher 
        "simplePeriodicTask", 
        
        // When no frequency is provided 
        // the default 15 minutes is set. 
        // Minimum frequency is 15 min. 
        // Android will automatically change 
        // your frequency to 15 min 
        // if you have configured a lower frequency. 
        frequency: Duration(minutes: 15), 
    ); 
    runApp(MyApp()); 
    } 
    
    void callbackDispatcher() { 
    Workmanager.executeTask((task, inputData) { 
        
        // initialise the plugin of flutterlocalnotifications. 
        FlutterLocalNotificationsPlugin flip = new FlutterLocalNotificationsPlugin(); 
        
        // app_icon needs to be a added as a drawable 
        // resource to the Android head project. 
        var android = new AndroidInitializationSettings('@mipmap/ic_launcher'); 
        var IOS = new IOSInitializationSettings(); 
        
        // initialise settings for both Android and iOS device. 
        var settings = new InitializationSettings(android, IOS); 
        flip.initialize(settings); 
        _showNotificationWithDefaultSound(flip); 
        return Future.value(true); 
    }); 
    } 
    
    Future _showNotificationWithDefaultSound(flip) async { 
        
    // Show a notification after every 15 minute with the first 
    // appearance happening a minute after invoking the method 
    var androidPlatformChannelSpecifics = new AndroidNotificationDetails( 
        'your channel id', 
        'your channel name', 
        'your channel description', 
        importance: Importance.Max, 
        priority: Priority.High 
    ); 
    var iOSPlatformChannelSpecifics = new IOSNotificationDetails(); 
        
    // initialise channel platform for both Android and iOS device. 
    var platformChannelSpecifics = new NotificationDetails( 
        androidPlatformChannelSpecifics, 
        iOSPlatformChannelSpecifics 
    ); 
    await flip.show(0, 'GeeksforGeeks', 
        'Your are one step away to connect with GeeksforGeeks', 
        platformChannelSpecifics, payload: 'Default_Sound'
    ); 
    } 
    
    class MyApp extends StatelessWidget { 
    // This widget is the root of your application. 
    @override 
    Widget build(BuildContext context) { 
        return MaterialApp( 
        title: 'Geeks Demo', 
        theme: ThemeData( 
            
            // This is the theme 
            // of your application. 
            primarySwatch: Colors.green, 
        ), 
        home: HomePage(title: "GeeksforGeeks"), 
        ); 
    } 
    } 
    
    class HomePage extends StatefulWidget { 
    HomePage({Key key, this.title}) : super(key: key); 
    
    final String title; 
    
    @override 
    _HomePageState createState() => _HomePageState(); 
    } 
    
    class _HomePageState extends State<HomePage> { 
    @override 
    Widget build(BuildContext context) { 
        return Scaffold( 
        appBar: AppBar( 
            title: Text(widget.title), 
        ), 
        body: new Container(), 
        ); 
    } 
    } 
    

    【讨论】:

      猜你喜欢
      • 2021-11-04
      • 2020-06-26
      • 2018-03-16
      • 2021-09-14
      • 2021-12-28
      • 1970-01-01
      • 2021-06-28
      • 2020-06-28
      相关资源
      最近更新 更多