问题描述
在应用程序中,我使用Rabbitmq,background_fetch和Flutter_local_notifications。 当启动或最小化应用程序时,一切正常,但是关闭时,我无法在后台运行我的应用程序,找不到任何信息,仅针对FCM的所有其他问题,没有关于amqp抖动的更多信息,我是该框架中的新蜜蜂
main.dart
Future<void> backgroundFetchHeadlesstask(String taskId) async {
await Rabbitmq.getDelivery();
BackgroundFetch.finish(taskId);
}
final FlutterlocalnotificationsPlugin FlutterlocalnotificationsPlugin = FlutterlocalnotificationsPlugin();
// Streams are created so that app can respond to notification-related events since the plugin is initialised in the `main` function
final BehaviorSubject<Receivednotification> didReceivelocalnotificationSubject = BehaviorSubject<Receivednotification>();
final BehaviorSubject<String> selectNotificationSubject = BehaviorSubject<String>();
NotificationApplaunchdetails notificationApplaunchdetails;
void main() async {
runApp(MyApp());
await initPlatformState();
}
Future<void> initPlatformState() async {
BackgroundFetch.configure(BackgroundFetchConfig(
startOnBoot: true,minimumFetchInterval: 15,stopOnTerminate: false,enableHeadless: true,requiresBatteryNotLow: false,requiresCharging: false,requiresstorageNotLow: false,requiresdeviceidle: false,requiredNetworkType: NetworkType.ANY
),(String taskId) async {
await backgroundFetchHeadlesstask(taskId);
}
);
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
void initState() {
super.initState();
_requestIOSPermissions();
_configureDidReceivelocalnotificationSubject();
_configureSelectNotificationSubject();
BackgroundFetch.registerHeadlesstask(backgroundFetchHeadlesstask);
}
void _requestIOSPermissions() {
FlutterlocalnotificationsPlugin
.resolvePlatformSpecificImplementation<
IOSFlutterlocalnotificationsPlugin>()
?.requestPermissions(
alert: true,badge: true,sound: true,);
}
void _configureDidReceivelocalnotificationSubject() {
didReceivelocalnotificationSubject.stream
.listen((Receivednotification receivednotification) async {
await showDialog(
context: context,builder: (BuildContext context) => CupertinoAlertDialog(
title: receivednotification.title != null
? Text(receivednotification.title)
: null,content: receivednotification.body != null
? Text(receivednotification.body)
: null,actions: [
CupertinoDialogAction(
isDefaultAction: true,child: Text('Ok'),onpressed: () async {
Navigator.of(context,rootNavigator: true).pop();
await Navigator.push(
context,MaterialPageRoute(
builder: (context) =>
LandingPage(selectedPage: 3),//SecondScreen(receivednotification.payload),),);
},)
],);
});
}
void _configureSelectNotificationSubject() {
selectNotificationSubject.stream.listen((String payload) async {
await Navigator.push(
context,MaterialPageRoute(builder: (context) => LandingPage(selectedPage: 3)),//SecondScreen(payload)),);
});
}
@override
void dispose() {
didReceivelocalnotificationSubject.close();
selectNotificationSubject.close();
super.dispose();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,title: 'My first app',theme: ThemeData(
primarySwatch: Colors.blue,visualDensity: VisualDensity.adaptivePlatformDensity,home: LandingPage(),);
}
}
在rabbitmq.dart内
class Rabbitmq {
static Future getDelivery() async
{
var auth = await DBProvider.db.getAuth();
print(hash);
Client client = new Client(
settings: ConnectionSettings(
host: 'myhost',authProvider: AmqPlainAuthenticator('user','password')
)
);
client
.channel()
.then((Channel channel) => channel.queue("queue",durable: true))
.then((Queue queue) => queue.consume())
.then((Consumer consumer) => consumer.listen((AmqpMessage message) async {
Map messageBody = message.payloadAsJson;
if(messageBody.containsKey('message') == true && messageBody.containsKey('from') == true)
{
await Rabbitmq()._showNotification(messageBody['message'],messageBody['from']);
}
})
);
}
Future<void> _showNotification(String text,String from) async {
var initializationSettingsAndroid = new AndroidInitializationSettings('@mipmap/ic_launcher');
var initializationSettingsIOS = new IOSInitializationSettings();
var initializationSettings = new InitializationSettings(initializationSettingsAndroid,initializationSettingsIOS);
FlutterlocalnotificationsPlugin().initialize(initializationSettings);
final FlutterlocalnotificationsPlugin FlutterlocalnotificationsPlugin = FlutterlocalnotificationsPlugin();
var androidplatformChannelSpecifics = AndroidNotificationDetails(
'com.example.g2r_market/chat','Уведомления чата','Настройка уведомлений для чатов',importance: Importance.Max,priority: Priority.High,ticker: 'ticker'
);
var iOSPlatformChannelSpecifics = IOSNotificationDetails();
var platformChannelSpecifics = NotificationDetails(androidplatformChannelSpecifics,iOSPlatformChannelSpecifics);
await FlutterlocalnotificationsPlugin.show(
0,from,text,platformChannelSpecifics,payload: 'item x');
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)