Flutter 你好,我是新来的,仍然在练习基本功。我想学习如何在不使用firebase auth的情况下在登录页面上设置默认凭据
在进入主页之前,如何比较输入的值和默认凭据Flutter 你好,我是新来的,仍然在练习基本功。我想学习如何在不使用firebase auth的情况下在登录页面上设置默认凭据,flutter,Flutter,在进入主页之前,如何比较输入的值和默认凭据 class LoginPage extends StatelessWidget { final _username = "admin"; final _password = "123"; final usernameController = TextEditingController(); final passwordController = TextEditingController(); @overrid
class LoginPage extends StatelessWidget {
final _username = "admin";
final _password = "123";
final usernameController = TextEditingController();
final passwordController = TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(body: Container(
child: Column(children: [
Padding(
padding: EdgeInsets.all(20.0),
child: TextField(
controller: usernameController,
decoration: InputDecoration(
border: OutlineInputBorder(),
labelText: "Username"),
autofocus: true;)),
Padding(
padding: EdgeInsets.all(20.0),
child: TextField(
controller: passwordController,
decoration: InputDecoration(
border: OutlineInputBorder(),
labelText: "Password"),
obscureText: true;)),
我想做的是,一旦用户输入了正确的默认凭据(例如Uname=admin,pass=123),登录按钮将转到我的主页()。否则它会给我一个消息,让我再试一次。再说一遍,我现在还不想使用firebase身份验证。如果有办法做到这一点,只需创建两个变量username=“admin”和password=“123” 从用户处获取输入并与用户名和密码进行比较 如果两者都匹配,只需重定向到主页 否则指定一个bool变量,如invalid true(不要忘记使用
setState((){})
)
在登录按钮的上方/下方创建一个
ElevatedButton(
onPressed: (){Navigator.push(context,
MaterialPageRoute(builder: (context) => HomePage()));})
])
)
);
}
不管怎样,我终于得到了这个。感谢@adrsh23的回答!我是这样做的: 首先,我有脚手架登录页面。这还不包含我的登录表单
if(invalid == true)
Text("Try Again")
在这里,我创建了一个有状态的小部件,它已经包含了我的表单:
import 'package:flutter/material.dart';
import 'LoginPageState.dart';
class LoginPage extends StatelessWidget{
Widget build(BuildContext context){
return Scaffold(
body: Container(
child: SingleChildScrollView(
child: Column(
children: [
Padding(
padding: EdgeInsets.fromLTRB(20.0, 90.0, 20.0, 20.0),
child: Container(
color: Colors.green[300],
padding: EdgeInsets.symmetric(horizontal: 50.0, vertical: 20.0),
child: Text("Sample Flutter Login"))),
LoginPageState(),]
)
)
)
);
}
}
导入“包装:颤振/材料.省道”;
导入“homepage.dart”;
@凌驾
类LoginPagentate扩展StatefulWidget{
LoginPage createState()=>LoginPage();}
类LoginPage扩展状态{
final _formKey=GlobalKey();
最终_username=“admin”;
最终_password=“123”;
最终用户名控制器=TextEditingController();
最终密码控制器=TextEditingController();
@凌驾
小部件构建(构建上下文){
报税表(
键:_formKey,
子项:列(子项:[
//用户名
填充物(
填充:来自LTRB(20.0,90.0,20.0,20.0,20.0)的边缘设置,
子项:TextFormField(
自动对焦:对,
控制器:usernameController,
装饰:输入装饰(
边框:OutlineInputBorder(),
labelText:“用户名”),
验证器:(值){
if(value.isEmpty | | value!=\u用户名){
返回“输入正确的用户名”;}
返回null;
})),
//密码
填充物(
填充:所有边缘设置(20.0),
子项:TextFormField(
蒙昧文字:对,
控制器:密码控制器,
装饰:输入装饰(
边框:OutlineInputBorder(),
labelText:“密码”),
验证器:(值){
if(value.isEmpty | | value!=\u密码){
返回“输入正确的密码”;}
返回null;
})),
//登录
升降按钮(
样式:钮扣样式(
backgroundColor:MaterialStateProperty.all(Colors.green[300]),
子:文本(“登录”,
样式:TextStyle(颜色:Colors.black)),
已按下:(){
if(_formKey.currentState.validate()){
导航器。推(
context,materialpage(builder:(context)=>HomePage());
}
},
)
]
)
);
}
}
我将其用于没有firebase身份验证的基本Flatter登录,而是使用默认凭据。import'package:flatter/material.dart';
import 'package:flutter/material.dart';
import 'homepage.dart';
@override
class LoginPageState extends StatefulWidget {
LoginPage createState() => LoginPage();}
class LoginPage extends State<LoginPageState>{
final _formKey = GlobalKey<FormState>();
final _username = "admin";
final _password = "123";
final usernameController = TextEditingController();
final passwordController = TextEditingController();
@override
Widget build(BuildContext context) {
return Form(
key: _formKey,
child: Column(children: [
//USERNAME
Padding(
padding: EdgeInsets.fromLTRB(20.0, 90.0, 20.0, 20.0),
child:TextFormField(
autofocus: true,
controller: usernameController,
decoration: InputDecoration(
border: OutlineInputBorder(),
labelText: "Username"),
validator: (value){
if (value.isEmpty || value != _username){
return "Input correct username";}
return null;
})),
//PASSWORD
Padding(
padding: EdgeInsets.all(20.0),
child: TextFormField(
obscureText: true,
controller: passwordController,
decoration: InputDecoration(
border: OutlineInputBorder(),
labelText: "Password"),
validator: (value){
if (value.isEmpty || value != _password){
return "Input correct password";}
return null;
})),
//LOGIN
ElevatedButton(
style: ButtonStyle(
backgroundColor: MaterialStateProperty.all<Color>(Colors.green[300])),
child: Text("LOGIN",
style: TextStyle(color: Colors.black)),
onPressed: ( ) {
if(_formKey.currentState.validate()){
Navigator.push(
context, MaterialPageRoute(builder: (context) => HomePage()));
}
},
)
]
)
);
}
}
导入“homepage.dart”;
@凌驾
类LoginPagentate扩展StatefulWidget{
静态常量字符串id='Home';
LoginPage createState()=>LoginPage();}
类LoginPage扩展状态{
final _formKey=GlobalKey();
最终_username=“admin”;
最终_password=“123”;
最终用户名控制器=TextEditingController();
最终密码控制器=TextEditingController();
@凌驾
无效处置(){
usernameController.dispose();
passwordController.dispose();
super.dispose();
}
作废(提交){
if(_formKey.currentState.validate()){
if(_username==usernameController.text&&u password==passwordController.text){
导航器。推(
context,materialpage(builder:(context)=>HomePage());
}否则{
//你想干什么都行
//您可以显示一个对话框
}
}
}
@凌驾
小部件构建(构建上下文){
报税表(
键:_formKey,
子项:列(子项:[
//用户名
填充物(
填充:来自LTRB(20.0,90.0,20.0,20.0,20.0)的边缘设置,
子项:TextFormField(
自动对焦:对,
控制器:usernameController,
装饰:输入装饰(
边框:OutlineInputBorder(),
labelText:“用户名”),
验证器:(值){
if(value.isEmpty){
返回“需要用户名”;}
返回null;
},
),
),
//密码
填充物(
填充:所有边缘设置(20.0),
子项:TextFormField(
蒙昧文字:对,
控制器:密码控制器,
装饰:输入装饰(
边框:OutlineInputBorder(),
labelText:“密码”),
验证器:(值){
if(value.isEmpty){
返回“需要密码”;}
返回null;
})),
//登录
升降按钮(
样式:钮扣样式(
backgroundColor:MaterialStateProperty.all(Colors.green[300]),
子:文本(“登录”,
样式:TextStyle(颜色:Colors.black)),
按下按钮:_提交,
)
]
)
);
}
}
当不再需要TextEditingController时,最好将其丢弃。查看更多信息
我想这应该可以解决你的问题。分享你的代码。@UjjwalRaijada嗨,谢谢你立即回复,对我的天真有点尴尬,但是
import 'package:flutter/material.dart';
import 'homepage.dart';
@override
class LoginPageState extends StatefulWidget {
static const String id = 'Home';
LoginPage createState() => LoginPage();}
class LoginPage extends State<LoginPageState>{
final _formKey = GlobalKey<FormState>();
final _username = "admin";
final _password = "123";
final usernameController = TextEditingController();
final passwordController = TextEditingController();
@override
void dispose() {
usernameController.dispose();
passwordController.dispose();
super.dispose();
}
void _submit() {
if(_formKey.currentState.validate()){
if(_username == usernameController.text && _password == passwordController.text) {
Navigator.push(
context, MaterialPageRoute(builder: (context) => HomePage()));
} else {
// whatever you want to do
// you can show a dialog box
}
}
}
@override
Widget build(BuildContext context) {
return Form(
key: _formKey,
child: Column(children: [
//USERNAME
Padding(
padding: EdgeInsets.fromLTRB(20.0, 90.0, 20.0, 20.0),
child:TextFormField(
autofocus: true,
controller: usernameController,
decoration: InputDecoration(
border: OutlineInputBorder(),
labelText: "Username"),
validator: (value){
if (value.isEmpty){
return "Username required";}
return null;
},
),
),
//PASSWORD
Padding(
padding: EdgeInsets.all(20.0),
child: TextFormField(
obscureText: true,
controller: passwordController,
decoration: InputDecoration(
border: OutlineInputBorder(),
labelText: "Password"),
validator: (value){
if (value.isEmpty){
return "Password required";}
return null;
})),
//LOGIN
ElevatedButton(
style: ButtonStyle(
backgroundColor: MaterialStateProperty.all<Color>(Colors.green[300])),
child: Text("LOGIN",
style: TextStyle(color: Colors.black)),
onPressed: _submit,
)
]
)
);
}
}