Flutter 无法在Flatter中的同一屏幕中显示Snackbar和登录表单

Flutter 无法在Flatter中的同一屏幕中显示Snackbar和登录表单,flutter,authentication,dart,snackbar,Flutter,Authentication,Dart,Snackbar,我已经开发了一个用户登录功能在颤振,它是工作。但当登录无效时,我无法在同一屏幕上显示SnackBar和登录表单。SnackBar出现在另一个屏幕中,其中没有登录表单。我认为这是发生在turnery操作员身上的。但是如果我去掉turnery操作符,颤振就会产生错误。那么,我将如何在同一屏幕上显示它们?请帮忙。提前谢谢。这是我的密码: Future<Login> userLogin(String email, String password) async { Ma

我已经开发了一个用户登录功能在颤振,它是工作。但当登录无效时,我无法在同一屏幕上显示SnackBar和登录表单。SnackBar出现在另一个屏幕中,其中没有登录表单。我认为这是发生在turnery操作员身上的。但是如果我去掉turnery操作符,颤振就会产生错误。那么,我将如何在同一屏幕上显示它们?请帮忙。提前谢谢。这是我的密码:

     Future<Login> userLogin(String email, String password) async {
       Map<String, dynamic> map = {'email': email, 'password': password};

     final http.Response response = await http.post(
     'my php page',
      headers: <String, String>{
       'Content-Type': 'application/json; charset=UTF-8',
      },
      body: jsonEncode(map),
     );

     if (response.statusCode == 201 || response.statusCode == 200) {
       return Login.fromJson(json.decode(response.body));
     } else {
       throw Exception('Failed to login.');
     }
     }

     class Login {
       final String usrid;
       final String status;

       Login({this.usrid, this.status});

       factory Login.fromJson(Map<String, dynamic> json) {
        return Login(usrid: json['usrid'], status: json['type']);
       }
      }

      void main() {
       runApp(MaterialApp(
         home: MyApp(),
       ));
     }

     class MyApp extends StatefulWidget {
       MyApp({Key key}) : super(key: key);
       @override
       State<StatefulWidget> createState() {
         return _TextControl();
       }
     }

     class _TextControl extends State<MyApp> {
       //String status = '';
       final _formKey = GlobalKey<FormState>();
       final TextEditingController _controller = TextEditingController();
       final TextEditingController _controller2 = TextEditingController();
  
     @override
      void dispose() {
       _controller.dispose();
       _controller2.dispose();
       super.dispose();
     }

     Future<Login> _futureLogin;
     @override
     Widget build(BuildContext context) {
       return Scaffold(
         appBar: AppBar(
            centerTitle: true,
             backgroundColor: Colors.purple[400],
             title: Text('Login'),
           ),
           body: Container(
              padding: EdgeInsets.only(left: 15, top: 20, right: 15, bottom: 20),
              child: Column(
              children: <Widget>[
                Center(
                  child: Image(image: AssetImage('assets/images/logo.png')),
                ),
                Container(
                  padding:
                      EdgeInsets.only(left: 0, top: 30, right: 0, bottom: 0),
                  child: Form(
                    key: _formKey,
                    child: (_futureLogin == null)
                        ? Column(
                            crossAxisAlignment: CrossAxisAlignment.center,
                            children: <Widget>[
                              TextFormField(
                                controller: _controller,
                                decoration: InputDecoration(hintText: 'Email'),
                                keyboardType: TextInputType.emailAddress,
                                validator: (value) {
                                  if (value.isEmpty || !value.isValidEmail()) {
                                    return 'Please enter valid email.';
                                  }
                                  return null;
                                },
                              ),
                              TextFormField(
                                controller: _controller2,
                                decoration:
                                    InputDecoration(hintText: 'Password'),
                                obscureText: true,
                                validator: (value) {
                                  if (value.isEmpty) {
                                    return 'Please enter password.';
                                  }
                                  return null;
                                },
                              ),
                              Container(
                                margin: EdgeInsets.all(10.0),
                                child: RaisedButton(
                                  color: Colors.purple[400],
                                  padding: EdgeInsets.only(
                                      left: 100,
                                      top: 10,
                                      right: 100,
                                      bottom: 10),
                                  textColor: Colors.white,
                                  onPressed: () {
                                    if (_formKey.currentState.validate()) {
                                      setState(() {
                                        _futureLogin = userLogin(
                                            _controller.text,
                                            _controller2.text);
                                      });
                                    }
                                  },
                                  child: Text('Login',
                                      style: TextStyle(fontSize: 18.0)),
                                ),
                              ),
                            ],
                          )
                        : FutureBuilder<Login>(
                            future: _futureLogin,
                            builder: (context, snapshot) {
                              if (snapshot.hasData) {
                                //return Text(snapshot.data.usrname);
                                if (snapshot.data.status == '1') {
                                  Navigator.push(
                                    context,
                                    MaterialPageRoute(
                                        builder: (context) => TextInput()),
                                  );
                                } else if (snapshot.data.status == '2') {
                                  
                                     Scaffold.of(context).showSnackBar(
                                        SnackBar(content: Text('Invalid login credentials.')));
                                  return Text('');
                                }
                              } else if (snapshot.hasError) {
                                return Text("${snapshot.error}");
                              }
                              return Center(child: CircularProgressIndicator());
                            },
                          ),
                      ),
                    ),
                  ],
                )));
            }
           }
未来用户登录(字符串电子邮件、字符串密码)异步{
Map Map={'email':email,'password':password};
final http.Response Response=wait http.post(
“我的php页面”,
标题:{
“内容类型”:“应用程序/json;字符集=UTF-8”,
},
正文:JSONECODE(map),
);
如果(response.statusCode==201 | | response.statusCode==200){
返回Login.fromJson(json.decode(response.body));
}否则{
抛出异常('登录失败');
}
}
类登录{
最终字符串usrid;
最终字符串状态;
登录名({this.usrid,this.status});
factory Login.fromJson(映射json){
返回登录名(usrid:json['usrid'],状态:json['type']);
}
}
void main(){
runApp(材料应用程序)(
主页:MyApp(),
));
}
类MyApp扩展了StatefulWidget{
MyApp({Key}):超级(Key:Key);
@凌驾
状态createState(){
返回_TextControl();
}
}
类_TextControl扩展状态{
//字符串状态=“”;
final _formKey=GlobalKey();
最终文本编辑控制器_控制器=文本编辑控制器();
最终文本编辑控制器_controller2=文本编辑控制器();
@凌驾
无效处置(){
_controller.dispose();
_控制器2.dispose();
super.dispose();
}
未来登录;
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:对,
背景颜色:颜色.紫色[400],
标题:文本(“登录”),
),
主体:容器(
填充:仅限边缘设置(左:15,顶部:20,右:15,底部:20),
子:列(
儿童:[
居中(
子项:Image(Image:AssetImage('assets/images/logo.png')),
),
容器(
衬垫:
仅限边集(左:0,顶部:30,右:0,底部:0),
孩子:表格(
键:_formKey,
子项:(_futureLogin==null)
?立柱(
crossAxisAlignment:crossAxisAlignment.center,
儿童:[
TextFormField(
控制器:_控制器,
装饰:输入装饰(hintText:“电子邮件”),
键盘类型:TextInputType.emailAddress,
验证器:(值){
if(value.isEmpty | |!value.isValidEmail()){
返回“请输入有效电子邮件”;
}
返回null;
},
),
TextFormField(
控制器:_控制器2,
装饰:
输入装饰(hintText:“密码”),
蒙昧文字:对,
验证器:(值){
if(value.isEmpty){
返回“请输入密码”;
}
返回null;
},
),
容器(
保证金:所有边缘套(10.0),
孩子:升起按钮(
颜色:颜色。紫色[400],
填充:仅限边缘设置(
左:100,,
前10名,
右:100,,
底部:10),
textColor:Colors.white,
已按下:(){
if(_formKey.currentState.validate()){
设置状态(){
_futureLogin=userLogin(
_controller.text,
_控制器2.文本);
});
}
},
子项:文本('Login',
样式:TextStyle(fontSize:18.0)),
),
),
],
)
:未来建设者(
未来:_futureLogin,
生成器:(上下文,快照){
if(snapshot.hasData){
//返回文本(snapshot.data.usrname);
如果(snapshot.data.status==“1”){
导航器。推(
上下文
材料路线(
生成器:(上下文)=>TextInput()),
);