只是Flutter的新手,但印象深刻。如果通过Firebase“ onMessage”到达PushNotification,我想显示一个对话框。
但是每次我得到一个异常“找不到MaterialLocalizations”。如果试图显示我的对话框。为了进行测试,我添加了一个RaisedButton来显示此警报,但是同样的问题。也许有人可以帮助我。非常感谢!!!
这是小应用程序的全部代码:
import 'dart:async'; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter/material.dart'; void main() => runApp(Main()); class Main extends StatefulWidget { @override _MainState createState() => _MainState(); } class _MainState extends State<Main> { final FirebaseMessaging _firebaseMessaging = FirebaseMessaging(); Widget _buildDialog(BuildContext context) { print("_buildDialog"); return AlertDialog( content: Text("Item has been updated"), actions: <Widget>[ FlatButton( child: const Text('CLOSE'), onPressed: () { Navigator.pop(context, false); }, ), FlatButton( child: const Text('SHOW'), onPressed: () { Navigator.pop(context, true); }, ), ], ); } void _showPushDialog() { print("DIALOG"); showDialog<bool>( context: context, builder: (_) => _buildDialog(context), ).then((bool shouldNavigate) { if (shouldNavigate == true) { _navigateToPushDetail(); } }); } void _navigateToPushDetail() { print("TODO: Goto..."); } @override void initState() { super.initState(); _firebaseMessaging.configure( onMessage: (Map<String, dynamic> message) async { print("onMessage: $message"); //_neverSatisfied(); _showPushDialog(); }, onLaunch: (Map<String, dynamic> message) async { print("onLaunch: $message"); _navigateToPushDetail(); }, onResume: (Map<String, dynamic> message) async { print("onResume: $message"); _navigateToPushDetail(); }, ); _firebaseMessaging.requestNotificationPermissions( const IosNotificationSettings(sound: true, badge: true, alert: true)); _firebaseMessaging.onIosSettingsRegistered .listen((IosNotificationSettings settings) { print("Settings registered: $settings"); }); _firebaseMessaging.getToken().then((String token) { assert(token != null); print("Push Messaging token: $token"); }); } @override Widget build(BuildContext context) { return MaterialApp( title: 'Welcome to Flutter', home: Scaffold( appBar: AppBar( title: Text('Welcome to Flutter'), ), body: new Material( child: Column(children: <Widget>[ Center( child: Text('Hello World'), ), RaisedButton( onPressed: () { print("pushed?"); _showPushDialog(); }, child: Text("press me"), ) ]), ), ), ); } }
为了解决该错误,您需要以Main如下所示的home参数调用类MaterialApp。
Main
MaterialApp
void main() => runApp(MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Welcome to Flutter', debugShowCheckedModeBanner: false, home: Main(), ); } }
Main并将您的Class中的Build方法更新为:
@override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Welcome to Flutter'), ), body: Column(children: <Widget>[ Center( child: Text('Hello World'), ), RaisedButton( onPressed: () { print("pushed?"); _showPushDialog(context); }, child: Text("press me"), ) ]), ); }