Dart 颤振导航到新屏幕不工作
我正在构建一个登录屏幕,将数据传递到主屏幕,当我单击登录按钮时,什么也没有发生。没有错误,但也没有发送到新屏幕 以下是按钮代码:Dart 颤振导航到新屏幕不工作,dart,flutter,Dart,Flutter,我正在构建一个登录屏幕,将数据传递到主屏幕,当我单击登录按钮时,什么也没有发生。没有错误,但也没有发送到新屏幕 以下是按钮代码: Widget submitButton() { return Container( margin: EdgeInsets.all(10.0), child:RaisedButton( child: Text('LOGIN'), onPressed: (){ if(fo
Widget submitButton()
{
return Container(
margin: EdgeInsets.all(10.0),
child:RaisedButton(
child: Text('LOGIN'),
onPressed: (){
if(formKey.currentState.validate()){
formKey.currentState.save();
print('Time to save $emailAddress and $passWord to my API');
Navigator.push(
context,
new MaterialPageRoute(
builder: (BuildContext context) =>
new Home()));
}
},
)
);
这是我的routes.dart文件
import 'package:flutter/material.dart';
import '../screens/home.dart';
import 'package:lbconnectv3/main.dart';
final routes = {
'/home': (BuildContext context) => new Home(),
'/' : (BuildContext context) => new LBConnectApp(),
};
编辑
main.dart的完整代码,它基本上有一个表单,其中有两个文本字段用于登录。控制台中没有错误,它将进入if语句
import 'package:flutter/material.dart';
import 'utils/validation.dart';
import 'screens/home.dart';
import 'utils/routes.dart';
void main() => runApp(new LBConnectApp());
class LBConnectApp extends StatefulWidget {
createState()
{
return new LBConnectAppState();
}
}
class LBConnectAppState extends State<LBConnectApp> with Validation
{
final formKey = GlobalKey<FormState>();
String emailAddress = '';
String passWord = '';
Widget build(context) {
return MaterialApp(
title: "LB Connect",
home: Scaffold(
backgroundColor: const Color(0xFF0099a9),
body:
Container(
margin: EdgeInsets.all(25.0),
child: Form(
key: formKey,
child: Column(
children: [
Container(
margin: EdgeInsets.only(top: 100.0),
child:Image.asset('images/lb_connect_trans.png')
),
emailField(),
passwordField(),
submitButton(),
],
),
),
)
),
);
}
Widget emailField()
{
return TextFormField(
keyboardType: TextInputType.emailAddress,
decoration : InputDecoration(
labelText: 'Email Address',
),
validator: validateEmail,
onSaved: (String value){
emailAddress = value;
},
);
}
Widget passwordField()
{
return TextFormField(
obscureText: true,
decoration : InputDecoration(
labelText: 'Password',
),
validator: validatePassword,
onSaved: (String value){
passWord = value;
},
);
}
Widget submitButton()
{
return Container(
margin: EdgeInsets.all(10.0),
child:RaisedButton(
child: Text('LOGIN'),
onPressed: (){
if(formKey.currentState.validate()){
formKey.currentState.save();
print('Time to save $emailAddress and $passWord to my API');
Navigator.push(
context,
new MaterialPageRoute(
builder: (BuildContext context) =>
new Home()));
}
},
)
);
}
}
导入“包装:颤振/材料.省道”;
导入“utils/validation.dart”;
导入“screens/home.dart”;
导入“utils/routes.dart”;
void main()=>runApp(新的LBConnectApp());
类LBConnectApp扩展了StatefulWidget{
createState()
{
返回新的LBConnectAppState();
}
}
类LBConnectAppState通过验证扩展状态
{
final formKey=GlobalKey();
字符串emailAddress='';
字符串密码=“”;
小部件构建(上下文){
返回材料PP(
标题:“LB连接”,
家:脚手架(
背景颜色:常量颜色(0xFF0099a9),
正文:
容器(
边距:所有边缘集(25.0),
孩子:表格(
key:formKey,
子:列(
儿童:[
容器(
边距:仅限边缘集(顶部:100.0),
子项:Image.asset('images/lb\u connect\u trans.png')
),
emailField(),
passwordField(),
submitButton(),
],
),
),
)
),
);
}
Widget emailField()
{
返回TextFormField(
键盘类型:TextInputType.emailAddress,
装饰:输入装饰(
labelText:“电子邮件地址”,
),
验证器:validateEmail,
onSaved:(字符串值){
emailAddress=值;
},
);
}
小部件密码字段()
{
返回TextFormField(
蒙昧文字:对,
装饰:输入装饰(
labelText:“密码”,
),
validator:validatePassword,
onSaved:(字符串值){
密码=值;
},
);
}
小部件提交按钮()
{
返回容器(
保证金:所有边缘套(10.0),
孩子:升起按钮(
子项:文本('LOGIN'),
已按下:(){
if(formKey.currentState.validate()){
formKey.currentState.save();
打印(“将$emailAddress和$passWord保存到我的API的时间”);
导航器。推(
上下文
新材料路线(
生成器:(BuildContext上下文)=>
新家();;
}
},
)
);
}
}
更改此行
void main() => runApp(new LBConnectApp());
有了这个,它将按照您的期望工作
void main() => runApp(new MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Flutter Demo',
theme: new ThemeData(
primarySwatch: Colors.blue,
),
debugShowCheckedModeBanner: false,
home: new LBConnectApp(),
);
}
}
在搞乱了我的应用程序后,我发现了问题:) 我必须用一个Material应用程序包装我的类,然后将我的routes属性添加到其中。以下是正确的代码:
void main() => runApp(MaterialApp(
routes: routes,
home: LBConnectApp()
)
);
我觉得一切都很好。如果在按下的
中输入,是否进入。consolepost完整代码中是否有错误,请查看如何使用Widget并尝试使用pushNamed(“/home”);我将编辑并发布完整的代码。控制台中没有错误,它会输入if语句。为main.dart发布的完整代码无效。同样的错误。这只是类名这是我试图修复的错误。这与我所使用的上下文有关,我对颤振完全陌生,所以任何建议都会很好。“”处理手势时引发了以下断言:使用不包含导航器的上下文请求的导航器操作。用于从导航器推送或弹出路由的上下文必须是导航器小部件的后代小部件的上下文。