如何从 Flutter 中的其他页面调用 ExitPopUp 小部件?

How to call ExitPopUp widgets from other pages in Flutter?

我在单个页面上为 ExitPopUp 编写了代码。这是代码-

import 'package:flutter/material.dart';

class ExitPopUp extends StatelessWidget {
  final page;
  ExitPopUp(this.page);
  @override
  Widget build(BuildContext context) {
    Future<bool> showExitPopUp() {
      return showDialog(
          context: context,
          builder: (BuildContext context) {
            return AlertDialog(
              title: Text("Confirm"),
              content: Text("Do you want to Exit ?"),
              actions: <Widget>[
                RaisedButton(child: Text("No"), onPressed: null),
                RaisedButton(child: Text("Yes "), onPressed: null)
              ],
            );
          });
    }

    return WillPopScope(child: page, onWillPop: showExitPopUp);
  }
}

现在我想从其他页面调用此 ExitPopUp (***示例:* registration.dart)**。这是注册页面的代码-

import 'package:bloodhero/widgets/drawer.dart';
import 'package:bloodhero/widgets/exitpop.dart';
import 'package:flutter/material.dart';
import 'package:bloodhero/widgets/form.dart';

class Registration extends StatefulWidget {
  @override
  _RegistrationState createState() => _RegistrationState();
}

class _RegistrationState extends State<Registration> {
  @override
  Widget build(BuildContext context) {
    return WillPopScope(
        onWillPop: () {
          print("Hey I am Dialog Box");
          return ExitPopUp();
        },
        child: Scaffold(
            appBar: AppBar(
              title: Text("Registration"),
              backgroundColor: Colors.deepOrange,
            ),
            drawer: DrawerApp(),
            body: ListView(
              children: <Widget>[
                FormPage(),
              ],
            )));
  }
}

但它不起作用。 OnWillPop 中显示错误。

我该如何解决?

您可以复制粘贴 运行 下面的完整代码
您可以将 Scaffold 零件代码作为 ExitPopUp

的参数传递

代码片段

class _RegistrationState extends State<Registration> {
  @override
  Widget build(BuildContext context) {
    return ExitPopUp(Scaffold(
        appBar: AppBar(
          title: Text("Registration"),
          backgroundColor: Colors.deepOrange,
        ),
        //drawer: DrawerApp(),
        body: ListView(
          children: <Widget>[
            Text("FormPage()"),
          ],
        )));
  }
}

工作演示

完整代码

import 'package:flutter/material.dart';

class ExitPopUp extends StatelessWidget {
  final page;
  ExitPopUp(this.page);
  @override
  Widget build(BuildContext context) {
    Future<bool> showExitPopUp() {
      return showDialog(
          context: context,
          builder: (BuildContext context) {
            return AlertDialog(
              title: Text("Confirm"),
              content: Text("Do you want to Exit ?"),
              actions: <Widget>[
                RaisedButton(child: Text("No"), onPressed: (){}),
                RaisedButton(child: Text("Yes "), onPressed: null)
              ],
            );
          });
    }

    return WillPopScope(child: page, onWillPop: showExitPopUp);
  }
}

class Registration extends StatefulWidget {
  @override
  _RegistrationState createState() => _RegistrationState();
}

class _RegistrationState extends State<Registration> {
  @override
  Widget build(BuildContext context) {
    return ExitPopUp(Scaffold(
        appBar: AppBar(
          title: Text("Registration"),
          backgroundColor: Colors.deepOrange,
        ),
        //drawer: DrawerApp(),
        body: ListView(
          children: <Widget>[
            Text("FormPage()"),
          ],
        )));
  }
}

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Registration(),
    );
  }
}