Диалоговое окно предупреждения о выходе (сообщение с подтверждением) в Flutter с Firebase

#firebase #flutter #firebase-authentication

# #firebase #flutter #firebase-аутентификация

Вопрос:

Как я могу показать сообщение с подтверждением, чтобы спросить пользователя, хочет ли он выйти из системы в flutter? Когда пользователь нажимает «Да», страница переходит на страницу входа в систему, и статус пользователя будет не авторизован. Когда пользователь нажимает «Нет», он остается на домашней странице. Кнопка должна быть закругленной кнопкой с текстом в середине домашней страницы.

 import 'package:flutter/material.dart';
import 'package:login/Screen/Login/components/FormScreen.dart';
import 'package:login/Screen/Login/components/body.dart';
import 'package:login/Screen/Login/components/camera.dart';
import 'package:login/Screen/Login/components/uploadpage.dart';
import 'package:login/auth.dart';
import 'package:login/root_page.dart';

class MyHomePage extends StatelessWidget {
  MyHomePage({this.auth, this.onSignOut});
  final  auth;
  final VoidCallback onSignOut;

  Icon cusIcon = Icon(Icons.search);
  Widget cusSearchBar = Text("Home Page");
  // show the dialog
  void _signOut() async {
    try {
      await auth.signOut();
      onSignOut();
    } catch (e) {
      print(e);
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
            // search icon
            actions: <Widget>[
              IconButton(
                onPressed: () {
                  if (this.cusIcon.icon == Icons.search) {
                    this.cusIcon = Icon(Icons.cancel_outlined);
                    this.cusSearchBar = TextField(
                      textInputAction: TextInputAction.go,
                      decoration: InputDecoration(
                          border: InputBorder.none,
                          hintText: "Search Car Plate"),
                      style: TextStyle(
                        color: Colors.white,
                        fontSize: 16.0,
                      ),
                    );
                  } else {
                    this.cusIcon = Icon(Icons.search);
                    this.cusSearchBar = Text("Home Page");
                  }
                },
                icon: cusIcon,
              )
            ]),
        // Add Icon
        body: Center(
            child: Column(
                mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                children: <Widget>[
              RaisedButton.icon(
                onPressed: () {
                  Navigator.push(
                    context,
                    MaterialPageRoute(builder: (context) => FormScreen()),
                  );
                },
                shape: RoundedRectangleBorder(
                    borderRadius: BorderRadius.all(Radius.circular(10.0))),
                label: Text(
                  'Add Vehicle',
                  style: TextStyle(color: Colors.white),
                ),
                icon: Icon(
                  Icons.add,
                  color: Colors.white,
                ),
                textColor: Colors.white,
                splashColor: Colors.red,
                color: Colors.purple,
              ),
              RaisedButton.icon(
                onPressed: () {
                  Navigator.push(
                    context,
                    MaterialPageRoute(builder: (context) => LandingScreen()),
                  );
                },
                shape: RoundedRectangleBorder(
                    borderRadius: BorderRadius.all(Radius.circular(10.0))),
                label: Text(
                  'Camera',
                  style: TextStyle(color: Colors.white),
                ),
                icon: Icon(
                  Icons.camera_alt,
                  color: Colors.white,
                ),
                textColor: Colors.white,
                splashColor: Colors.red,
                color: Colors.purple,
              ),
              RaisedButton.icon(
                onPressed: () {
                  Navigator.push(
                    context,
                    MaterialPageRoute(builder: (context) => UploadPage()),
                  );
                },
                shape: RoundedRectangleBorder(
                    borderRadius: BorderRadius.all(Radius.circular(30.0))),
                label: Text(
                  'Upload CSV File',
                  style: TextStyle(color: Colors.white),
                ),
                icon: Icon(
                  Icons.upload_file,
                  color: Colors.white,
                ),
                textColor: Colors.white,
                color: Colors.purple,
              ),
              FlatButton(
                  onPressed: _signOut,
                  child: new Text('Logout',
                      style:
                          new TextStyle(fontSize: 17.0, color: Colors.white)))
            ])));
  }
}
 

Ответ №1:

Для этого случая должно быть достаточно метода ShowDialog.

 FlatButton(
  onPressed: () => showDialog(
    context: context,
    builder: (_) => Dialog(
      child: Container() //Your buttons here
      ,
    ),
  ),
  child: new Text(
    'Logout',
    style: new TextStyle(
      fontSize: 17.0,
      color: Colors.white,
    ),
  ),
);
 

Ответ №2:

используйте ShowDialog

ваш код должен выглядеть примерно так:

 import 'package:flutter/material.dart';
import 'package:login/Screen/Login/components/FormScreen.dart';
import 'package:login/Screen/Login/components/body.dart';
import 'package:login/Screen/Login/components/camera.dart';
import 'package:login/Screen/Login/components/uploadpage.dart';
import 'package:login/auth.dart';
import 'package:login/root_page.dart';

class MyHomePage extends StatelessWidget {
  MyHomePage({this.auth, this.onSignOut});
  final  auth;
  final VoidCallback onSignOut;

  Icon cusIcon = Icon(Icons.search);
  Widget cusSearchBar = Text("Home Page");
  // show the dialog
Future _signOut() async {
  try {
    //await auth.signOut();
    onSignOut();
    return await auth.signOut();
  } catch (e) {
    print(e);
  }
}


  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
            // search icon
            actions: <Widget>[
              IconButton(
                onPressed: () {
                  if (this.cusIcon.icon == Icons.search) {
                    this.cusIcon = Icon(Icons.cancel_outlined);
                    this.cusSearchBar = TextField(
                      textInputAction: TextInputAction.go,
                      decoration: InputDecoration(
                          border: InputBorder.none,
                          hintText: "Search Car Plate"),
                      style: TextStyle(
                        color: Colors.white,
                        fontSize: 16.0,
                      ),
                    );
                  } else {
                    this.cusIcon = Icon(Icons.search);
                    this.cusSearchBar = Text("Home Page");
                  }
                },
                icon: cusIcon,
              )
            ]),
        // Add Icon
        body: Center(
            child: Column(
                mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                children: <Widget>[
              RaisedButton.icon(
                onPressed: () {
                  Navigator.push(
                    context,
                    MaterialPageRoute(builder: (context) => FormScreen()),
                  );
                },
                shape: RoundedRectangleBorder(
                    borderRadius: BorderRadius.all(Radius.circular(10.0))),
                label: Text(
                  'Add Vehicle',
                  style: TextStyle(color: Colors.white),
                ),
                icon: Icon(
                  Icons.add,
                  color: Colors.white,
                ),
                textColor: Colors.white,
                splashColor: Colors.red,
                color: Colors.purple,
              ),
              RaisedButton.icon(
                onPressed: () {
                  Navigator.push(
                    context,
                    MaterialPageRoute(builder: (context) => LandingScreen()),
                  );
                },
                shape: RoundedRectangleBorder(
                    borderRadius: BorderRadius.all(Radius.circular(10.0))),
                label: Text(
                  'Camera',
                  style: TextStyle(color: Colors.white),
                ),
                icon: Icon(
                  Icons.camera_alt,
                  color: Colors.white,
                ),
                textColor: Colors.white,
                splashColor: Colors.red,
                color: Colors.purple,
              ),
              RaisedButton.icon(
                onPressed: () {
                  Navigator.push(
                    context,
                    MaterialPageRoute(builder: (context) => UploadPage()),
                  );
                },
                shape: RoundedRectangleBorder(
                    borderRadius: BorderRadius.all(Radius.circular(30.0))),
                label: Text(
                  'Upload CSV File',
                  style: TextStyle(color: Colors.white),
                ),
                icon: Icon(
                  Icons.upload_file,
                  color: Colors.white,
                ),
                textColor: Colors.white,
                color: Colors.purple,
              ),
              FlatButton(
                  onPressed: () {
              showDialog(
                  builder: (ctxt) {
                    return AlertDialog(
                        title: Text("Logout"),
                        content: Column(
                          children: [
                            Text("Do you Really want to logout?"),
                            Row(
                              mainAxisAlignment: MainAxisAlignment.spaceAround,
                              children: [
                                RaisedButton(
                                  child: Text("Cancel"),
                                  onPressed: () {
                                    Navigator.pop(context);
                                  },
                                ),
                                RaisedButton(
                                  child: Text("Logout"),
                                  onPressed: () {
                                    _signOut().whenComplete(() =>
                                        Navigator.pushReplacement(
                                            context, yourLoginPage()));
                                  },
                                )
                              ],
                            ),
                          ],
                        ));
                  },
                  context: context);
            },
                  child: new Text('Logout',
                      style:
                          new TextStyle(fontSize: 17.0, color: Colors.white)))
            ])));
  }
}
 

Комментарии:

1. привет, этот метод позволяет мне перейти на страницу входа в систему, но функция _SignOut не работает, то есть пользователь все еще входит в учетную запись при входе в систему еще раз