接收来自 Firebase 的消息
Recieving a message from Firebase
我正在制作一个简单的应用程序,它使用 WebView
小部件作为主要小部件。我希望能够从 firebase 控制台向 all 用户发送通知。该应用程序无身份验证。
我的 MessageHandler(在 main.dart 中定义)
class MessageHandler extends StatefulWidget {
@override
_MessageHandlerState createState() => _MessageHandlerState();
}
class _MessageHandlerState extends State<MessageHandler>{
final FirebaseMessaging _fcm = FirebaseMessaging();
@override
void initState(){
super.initState();
_fcm.configure(
onMessage: (Map<String, dynamic> message) async {
print("here");
print("onMessage: $message");
final snackbar = SnackBar(
content: Text(message['notification']['title']),
);
},
);
主要
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: "Simple App",
home: WebViewer()
);
}
}
WebViewer Widget 有效,所以我没有将它添加到问题中。
在 Firebase 控制台上,消息似乎已发送
但是 Android 模拟器上没有出现警报,snackbar
.
上也没有
WebView
class WebViewer extends StatelessWidget {
final Completer<WebViewController> _controller = Completer<WebViewController>();
//FirebaseMessaging _firebaseMessaging = new FirebaseMessaging();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Center(child: Text("Event Viewer")),
),
body: WebView(
initialUrl: "https://google.com",
javascriptMode: JavascriptMode.unrestricted,
onWebViewCreated: (WebViewController webViewController){
_controller.complete(webViewController);
},
)
);
为了显示快餐栏,您必须引用您的应用构建的特定脚手架实例并告诉它显示快餐栏。如果上下文方便,你可以说 Scaffold.of(context).showSnackbar( snackbar );由于您无权访问上下文,另一种引用脚手架的方法是为脚手架定义一个键,然后确保将该键分配给网络查看器的脚手架。
你可以说
class MessageHandler extends StatefulWidget {
// pass a reference to the scaffold key to the message handler when it is created
final GlobalKey<ScaffoldState> scaffoldKey;
MessageHandler({this.scaffoldKey});
@override
_MessageHandlerState createState() => _MessageHandlerState();
}
class _MessageHandlerState extends State<MessageHandler>{
final FirebaseMessaging _fcm = FirebaseMessaging();
@override
void initState(){
super.initState();
_fcm.configure(
onMessage: (Map<String, dynamic> message) async {
print("here");
print("onMessage: $message");
final snackbar = SnackBar(
content: Text(message['notification']['title']),
);
// reference the scaffold with its key and call showSnackBar
widget.scaffoldKey.currentState.showSnackbar(snackbar);
},
);
然后在某个地方定义脚手架的键,它可以传递给消息处理程序和脚手架:
final GlobalKey<ScaffoldState> scaffoldKey = new GlobalKey<ScaffoldState>();
.....
Scaffold(
key: scaffoldKey,
...
更多信息:
我正在制作一个简单的应用程序,它使用 WebView
小部件作为主要小部件。我希望能够从 firebase 控制台向 all 用户发送通知。该应用程序无身份验证。
我的 MessageHandler(在 main.dart 中定义)
class MessageHandler extends StatefulWidget {
@override
_MessageHandlerState createState() => _MessageHandlerState();
}
class _MessageHandlerState extends State<MessageHandler>{
final FirebaseMessaging _fcm = FirebaseMessaging();
@override
void initState(){
super.initState();
_fcm.configure(
onMessage: (Map<String, dynamic> message) async {
print("here");
print("onMessage: $message");
final snackbar = SnackBar(
content: Text(message['notification']['title']),
);
},
);
主要
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: "Simple App",
home: WebViewer()
);
}
}
WebViewer Widget 有效,所以我没有将它添加到问题中。 在 Firebase 控制台上,消息似乎已发送
但是 Android 模拟器上没有出现警报,snackbar
.
WebView
class WebViewer extends StatelessWidget {
final Completer<WebViewController> _controller = Completer<WebViewController>();
//FirebaseMessaging _firebaseMessaging = new FirebaseMessaging();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Center(child: Text("Event Viewer")),
),
body: WebView(
initialUrl: "https://google.com",
javascriptMode: JavascriptMode.unrestricted,
onWebViewCreated: (WebViewController webViewController){
_controller.complete(webViewController);
},
)
);
为了显示快餐栏,您必须引用您的应用构建的特定脚手架实例并告诉它显示快餐栏。如果上下文方便,你可以说 Scaffold.of(context).showSnackbar( snackbar );由于您无权访问上下文,另一种引用脚手架的方法是为脚手架定义一个键,然后确保将该键分配给网络查看器的脚手架。
你可以说
class MessageHandler extends StatefulWidget {
// pass a reference to the scaffold key to the message handler when it is created
final GlobalKey<ScaffoldState> scaffoldKey;
MessageHandler({this.scaffoldKey});
@override
_MessageHandlerState createState() => _MessageHandlerState();
}
class _MessageHandlerState extends State<MessageHandler>{
final FirebaseMessaging _fcm = FirebaseMessaging();
@override
void initState(){
super.initState();
_fcm.configure(
onMessage: (Map<String, dynamic> message) async {
print("here");
print("onMessage: $message");
final snackbar = SnackBar(
content: Text(message['notification']['title']),
);
// reference the scaffold with its key and call showSnackBar
widget.scaffoldKey.currentState.showSnackbar(snackbar);
},
);
然后在某个地方定义脚手架的键,它可以传递给消息处理程序和脚手架:
final GlobalKey<ScaffoldState> scaffoldKey = new GlobalKey<ScaffoldState>();
.....
Scaffold(
key: scaffoldKey,
...
更多信息: