alertdialog位于webview下方,因此用户无法查看alertdialog

时间:2019-06-25 12:13:48

标签: webview flutter alertdialog

我有一个使用flutterflutter_webview_plugin库构建的简单Webview应用程序。我正在尝试使用firebase cloud messaging添加推送通知。当应用程序在后台运行或关闭时,推送通知可以正常工作。如果该应用程序已打开,则我将其配置为显示alert dialog。但是这部分不起作用。

我删除了webview小部件,而是添加了appBar小部件,然后热重新加载了该应用程序。 alert dialog实际上在那里工作正常。 webview层似乎在alert dialog层之上。因此,即使alert dialog确实弹出了,用户也看不到它。

import 'package:flutter/material.dart';
import 'package:flutter_webview_plugin/flutter_webview_plugin.dart';
import 'dart:io';
import 'package:firebase_messaging/firebase_messaging.dart';

void main() => runApp(
      MaterialApp(
        debugShowCheckedModeBanner: false,
        home: MyApp(),
      ),
    );

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  FirebaseMessaging _firebaseMessaging = FirebaseMessaging();

  @override
  void initState() {
    super.initState();
    firebaseCloudMessaging_Listeners();
  }

  void firebaseCloudMessaging_Listeners() {
    _firebaseMessaging.getToken().then((token) {
      print(token);
    });

    _firebaseMessaging.configure(
      onMessage: (Map<String, dynamic> message) async {
        print("onMessage: $message");
        showDialog(
          context: context,
          builder: (context) => AlertDialog(
                content: ListTile(
                  title: Text(message['notification']['title']),
                  subtitle: Text(message['notification']['body']),
                ),
                actions: <Widget>[
                  FlatButton(
                    child: Text('Ok'),
                    onPressed: () => Navigator.of(context).pop(),
                  ),
                ],
              ),
        );
      },
      onResume: (Map<String, dynamic> message) async {
        print('on resume $message');
      },
      onLaunch: (Map<String, dynamic> message) async {
        print('on launch $message');
      },
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        color: Colors.white,
        child: SafeArea(
          child: new WebviewScaffold(
            url: "https://m.url.co.kr",
            hidden: true,
          ),
        ),
      ),
    );
  }
}

1 个答案:

答案 0 :(得分:0)

这对于flutter_webview_plugin包是不可能的,您必须切换到官方webview_flutter才能做到这一点...

flutter_webview_plugin开发人员还会向您显示此警告消息:

警告:Web视图未集成在小部件树中,它是颤动视图之上的本机视图。您将无法使用小吃店,对话框...

祝你好运