我的 Flutter 应用在前台运行时没有显示通知。当它在后台或关闭时工作正常。这是我当前的代码,有人有什么建议吗?我正在使用旧的 firebase 消息传递版本,因为我很久以前就开始了这个项目,但没有时间完成它。谢谢
void main() async {
runApp(MyApp());
}
Future<dynamic> myBackgroundMessageHandler(Map<String, dynamic> message) async {
if (message.containsKey('data')) {
final dynamic data = message['data'];
}
if (message.containsKey('notification')) {
final dynamic notification = message['notification'];
}
}
final Map<String, Item> _items = <String, Item>{};
Item _itemForMessage(Map<String, dynamic> message) {
final dynamic data = message['data'] ?? message;
final String itemId = data['id'];
final Item item = _items.putIfAbsent(itemId, () => Item(itemId: itemId))
..status = data['status'];
return item;
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String _homeScreenText = "Waiting for token...";
final FirebaseMessaging _firebaseMessaging = FirebaseMessaging();
final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
FlutterLocalNotificationsPlugin();
Widget _buildDialog(BuildContext context, Item item) {
return AlertDialog(
content: Text("Item ${item.itemId} has been updated"),
actions: <Widget>[
TextButton(
child: const Text('CLOSE'),
onPressed: () {
Navigator.pop(context, false);
},
),
TextButton(
child: const Text('SHOW'),
onPressed: () {
Navigator.pop(context, true);
},
),
],
);
}
void _showItemDialog(Map<String, dynamic> message) {
showDialog<bool>(
context: context,
builder: (_) => _buildDialog(context, _itemForMessage(message)),
).then((bool shouldNavigate) {
if (shouldNavigate == true) {
_navigateToItemDetail(message);
}
});
}
void _navigateToItemDetail(Map<String, dynamic> message) {
final Item item = _itemForMessage(message);
// Clear away dialogs
Navigator.popUntil(context, (Route<dynamic> route) => route is PageRoute);
if (!item.route.isCurrent) {
Navigator.push(context, item.route);
}
}
initializeFCM() async {
final _permissionGranted =
await _firebaseMessaging.requestNotificationPermissions();
if (_permissionGranted == null || _permissionGranted == true) {
_firebaseMessaging.configure(
onBackgroundMessage: myBackgroundMessageHandler,
onMessage: (Map<String, dynamic> message) async {
print("onMessage: $message");
showToastSuccess("You got a new Order!");
// HighOrderArea();
_showItemDialog(message);
},
onLaunch: (Map<String, dynamic> message) async {
print("onLaunch: $message");
_navigateToItemDetail(message);
},
onResume: (Map<String, dynamic> message) async {
print("onResume: $message");
_navigateToItemDetail(message);
},
);
}
_firebaseMessaging.requestNotificationPermissions(
const IosNotificationSettings(
sound: true, badge: true, alert: true, provisional: true));
_firebaseMessaging.onIosSettingsRegistered
.listen((IosNotificationSettings settings) {
print("Settings registered: $settings");
});
_firebaseMessaging.getToken().then((String token) async {
assert(token != null);
var sendToken = await sendNotiTokenApi(token.toString());
print("tokenadichh");
print(sendToken);
setState(() {
_homeScreenText = "Push Messaging token: $token";
});
print(_homeScreenText);
});
}
@override
void initState() {
super.initState();
initializeFCM();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Flutter Demo',
theme: ThemeData(primarySwatch: Colors.blue, fontFamily: 'Poppins'),
home: SplashScreen(),
);
}
void showNotification(message) async {
var androidPlatformChannelSpecifics = new AndroidNotificationDetails(
Platform.isAndroid
? 'com.dfa.flutterchatdemo'
: 'com.duytq.flutterchatdemo',
'Flutter chat demo',
'your channel description',
playSound: true,
enableVibration: true,
importance: Importance.max,
priority: Priority.high,
);
var iOSPlatformChannelSpecifics = new IOSNotificationDetails();
var platformChannelSpecifics = new NotificationDetails(
android: androidPlatformChannelSpecifics,
iOS: iOSPlatformChannelSpecifics);
print(message);
await flutterLocalNotificationsPlugin.show(0, message['title'].toString(),
message['body'].toString(), platformChannelSpecifics,
payload: json.encode(message));
}
void configLocalNotification() {
var initializationSettingsAndroid =
new AndroidInitializationSettings('ic_stat_name');
var initializationSettingsIOS = new IOSInitializationSettings();
var initializationSettings = new InitializationSettings(
iOS: initializationSettingsIOS, android: initializationSettingsAndroid);
flutterLocalNotificationsPlugin.initialize(initializationSettings);
}
}
答案 0 :(得分:0)
您需要更新您的 <section class="page-rest">
<div class="grid-container">
<div class="feature one">
<img src="https://findicons.com/files/icons/2779/simple_icons/2048/github_2048_black.png" alt="">
<h3>Feature</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Similique, error illum blanditiis esse perspiciatis dolorem!</p>
</div>
<div class="feature two">
<img src="https://findicons.com/files/icons/2779/simple_icons/2048/github_2048_black.png" alt="">
<h3>Feature</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Similique, error illum blanditiis esse perspiciatis dolorem!</p>
</div>
<div class="feature three">
<img src="https://findicons.com/files/icons/2779/simple_icons/2048/github_2048_black.png" alt="">
<h3>Feature</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Similique, error illum blanditiis esse perspiciatis dolorem!</p>
</div>
<div class="feature four">
<img src="https://findicons.com/files/icons/2779/simple_icons/2048/github_2048_black.png" alt="">
<h3>Feature</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Similique, error illum blanditiis esse perspiciatis dolorem!</p>
</div>
<div class="feature five">
<img src="https://findicons.com/files/icons/2779/simple_icons/2048/github_2048_black.png" alt="">
<h3>Feature</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Similique, error illum blanditiis esse perspiciatis dolorem!</p>
</div>
<div class="feature six">
<img src="https://findicons.com/files/icons/2779/simple_icons/2048/github_2048_black.png" alt="">
<h3>Feature</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Similique, error illum blanditiis esse perspiciatis dolorem!</p>
</div>
</div>
</section>
以包含您的 onMessage
方法。
showNotification
在应用在前台收到 FCM 通知时调用。
onMessage
方法包含使用 showNotification
插件在本地显示通知的代码。
flutter_local_notifications
还要确保初始化 onMessage: (Map<String, dynamic> message) async {
showNotification(message);
_showItemDialog(message);
},
插件。
您的 flutter_local_notifications
方法已包含此内容。
将其添加到 configLocalNotification()
中,如下所示:
initState