代码之家  ›  专栏  ›  技术社区  ›  Abir Ahsan

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

  •  0
  • Abir Ahsan  · 技术社区  · 6 年前

    我写了一个代码 退出弹出窗口 在一页上。这是代码-

    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);
      }
    }
    

    现在我想称之为 退出弹出窗口 从其他页面 (***示例:*注册.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中显示错误。

    enter image description here

    我该如何修复它?

    0 回复  |  直到 6 年前
        1
  •  1
  •   chunhunghan    6 年前

    您可以在下面复制粘贴运行完整代码
    你可以通过 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()"),
              ],
            )));
      }
    }
    

    工作演示

    enter image description here

    完整代码

    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(),
        );
      }
    }