Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 你好,我是新来的,仍然在练习基本功。我想学习如何在不使用firebase auth的情况下在登录页面上设置默认凭据_Flutter - Fatal编程技术网

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,
          )
        ]
      )
    );
  }
}