Как вызвать виджеты ExitPopUp с других страниц в Flutter? - PullRequest
0 голосов
/ 16 февраля 2020

Я написал код для 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.

enter image description here

Как это исправить?

1 Ответ

0 голосов
/ 17 февраля 2020

Вы можете скопировать и вставить полный код ниже
Вы можете передать 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(),
    );
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...