Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 即使我的应用程序关闭,也要在后台运行dart代码_Flutter_Dart_Service_Socket.io_Background - Fatal编程技术网

Flutter 即使我的应用程序关闭,也要在后台运行dart代码

Flutter 即使我的应用程序关闭,也要在后台运行dart代码,flutter,dart,service,socket.io,background,Flutter,Dart,Service,Socket.io,Background,在Flatter中,我使用打开一个套接字并从我的服务器接收数据以使用推送通知,它在应用程序运行时工作,现在我需要在后台运行该程序,因此当我的应用程序未运行时,它仍然从我的服务器接收数据并推送通知,在Flatter中是否有这样做的方法 void initSocket() async { final deviceInfo = await Constants.getDeviceDetails(); final String deviceId = deviceInfo[2];

在Flatter中,我使用打开一个套接字并从我的服务器接收数据以使用推送通知,它在应用程序运行时工作,现在我需要在后台运行该程序,因此当我的应用程序未运行时,它仍然从我的服务器接收数据并推送通知,在Flatter中是否有这样做的方法

   void initSocket() async {
    final deviceInfo = await Constants.getDeviceDetails();
    final String deviceId = deviceInfo[2];
    Uuid uuid = Uuid();
    print(deviceInfo);
    final id = uuid.v5(Uuid.NAMESPACE_URL, deviceId);
    print('id ' + id);

    SocketIOManager manager = SocketIOManager();
    SocketIO socket = await manager.createInstance(
      SocketOptions(URI,
          enableLogging: false,
          transports: [Transports.WEB_SOCKET /*, Transports.POLLING*/]),
    );
    socket.onConnect((data) {
      print("connected...");
      print(data);
      socket.emit('settings', [
        {'device_id': id}
      ]);
    });
    socket.onConnectError((_) => print('connect error'));
    socket.onConnectTimeout((_) => print('timeout'));
    socket.onError((_) => print('error'));
    socket.onDisconnect((_) => print('disconnect'));
    socket.on('notif', (data) {
      print('notif');
      _showNotificationWithDefaultSound(data['heading'],data['content']);
    });
    socket.connect();
  }

  initNotifications() {
    var initializationSettingsAndroid = AndroidInitializationSettings('@mipmap/ic_launcher');
    var initializationSettingsIOS = IOSInitializationSettings();
    var initializationSettings = InitializationSettings(initializationSettingsAndroid,initializationSettingsIOS);
    flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();
    flutterLocalNotificationsPlugin.initialize(initializationSettings,onSelectNotification: onSelectNotification);
  }

  Future onSelectNotification(String payload)async{
    print('payload');
  }

  Future _showNotificationWithDefaultSound(heading,content) async {
  var androidPlatformChannelSpecifics = new AndroidNotificationDetails(
      'your channel id', 'your channel name', 'your channel description',
      importance: Importance.Max, priority: Priority.High);
  var iOSPlatformChannelSpecifics = new IOSNotificationDetails();
  var platformChannelSpecifics = new NotificationDetails(
      androidPlatformChannelSpecifics, iOSPlatformChannelSpecifics);
  await flutterLocalNotificationsPlugin.show(
    0,
    heading,
    content,
    platformChannelSpecifics,
    payload: 'Default_Sound',
  );
}

希望这会有帮助,或者你可以使用fcm


不过,我很抱歉。我不太清楚这件事。如果这对你没有帮助,很抱歉。

我想只要你连接到互联网,它就会工作