【问题标题】:How to fix this For loop not working error? for loop only work once in Flutter如何解决此 For 循环不工作错误? for 循环在 Flutter 中只工作一次
【发布时间】:2018-10-20 19:45:13
【问题描述】:

如何解决这个 For loop not working 错误? for 循环在 Flutter 中只工作一次

这是一个简单的登录表单。如果用户名和密码匹配转到用户 其他页面转到管理页面。

方法代码:

checkLogin(){
  setState(() {
  for(var c=0;c < global.user_name_arr.length-1 ; c++){
   if(global.user_name_arr[c]==myController.text&&global.user_password_arr[c]==myControllerPwd.text)

        Navigator.push(context, MaterialPageRoute(builder: (context)=>user()),);
      else
        Navigator.push(context, MaterialPageRoute(builder:(context)=>admin()),);   }    
 }); }

RaiseButton 代码:

new RaisedButton(
                  child:new Text("Click"),
                  onPressed:checkLogin, 
                )

global.dart

library user_login.globlas;

var user_name_arr=['bhanuka','isuru','sampath'];
var user_password_arr=['1234','123','12'];

【问题讨论】:

    标签: dart flutter


    【解决方案1】:

    首先,让我们重构您的代码 :) 像这样创建一个用户类:

    class User {
      final String name;
      final String password;
    
      User(this.name, this.password); 
    }
    

    接下来,修复您的全局用户集合:

    final validUsers = [User('bhanuka', '1234'), User('isuru', '123'), User('sampath', '12')];
    

    现在,使用此代码执行正确的导航:

    checkLogin() {
      if (validUsers.indexWhere((user) => user.name == myController.text && user.password == myControllerPwd.text) >= 0) {
        Navigator.push(context, MaterialPageRoute(builder: (context)=>user()),);
      } else {
        Navigator.push(context, MaterialPageRoute(builder:(context)=>admin()),);   
      }         
    }
    

    有更好的方法来进行这种比较,但我想这对于您的用例来说已经足够了。

    【讨论】:

      【解决方案2】:

      这里你使用 if else 来判断条件是对还是错,其中一个部分被执行。

         import 'package:flutter/material.dart';
      
      void main() => runApp(new MaterialApp(
            title: 'Forms in Flutter',
            home: new LoginPage(),
          ));
      
      class LoginPage extends StatefulWidget {
        @override
        State<StatefulWidget> createState() => new _LoginPageState();
      }
      
      class _LoginData {
        String email = '';
        String password = '';
      }
      
      class _LoginPageState extends State<LoginPage> {
        final GlobalKey<FormState> _formKey = new GlobalKey<FormState>();
        _LoginData _data = new _LoginData();
        var user_name_arr = ['bhanuka', 'isuru', 'sampath'];
        var user_password_arr = ['1234', '123', '12'];
        var p;
        void submit() {
          if (this._formKey.currentState.validate()) {
            _formKey.currentState.save(); // Save our form now.
            if (user_name_arr.contains(_data.email)) {
              p = user_name_arr.indexOf(_data.email);
              if (user_password_arr.elementAt(p) == _data.password) {
                Navigator.push(context, MaterialPageRoute(builder: (context)=>user()),);
              } else {
                Navigator.push(
                  context,
                  MaterialPageRoute(builder: (context) => admin()),
                );
              }
            } else {
              Navigator.push(
                context,
                MaterialPageRoute(builder: (context) => admin()),
              );
            }
          }
        }
      
        @override
        Widget build(BuildContext context) {
          final Size screenSize = MediaQuery.of(context).size;
      
          return new Scaffold(
            appBar: new AppBar(
              title: new Text('Login'),
            ),
            body: new Container(
                padding: new EdgeInsets.all(20.0),
                child: new Form(
                  key: this._formKey,
                  child: new ListView(
                    children: <Widget>[
                      new TextFormField(
                          keyboardType: TextInputType
                              .emailAddress, // Use email input type for emails.
                          decoration: new InputDecoration(
                              hintText: 'you@example.com',
                              labelText: 'E-mail Address'),
                          onSaved: (String value) {
                            this._data.email = value;
                          }),
                      new TextFormField(
                          obscureText: true, // Use secure text for passwords.
                          decoration: new InputDecoration(
                              hintText: 'Password', labelText: 'Enter your password'),
                          onSaved: (String value) {
                            this._data.password = value;
                          }),
                      new Container(
                        width: screenSize.width,
                        child: new RaisedButton(
                          child: new Text(
                            'Login',
                            style: new TextStyle(color: Colors.white),
                          ),
                          onPressed: this.submit,
                          color: Colors.blue,
                        ),
                        margin: new EdgeInsets.only(top: 20.0),
                      )
                    ],
                  ),
                )),
          );
        }
      }
      
      class user extends StatelessWidget {
        @override
        Widget build(BuildContext context) {
          return Scaffold(
            body: Container(
              child: Center(child: new Text("user")),
            ),
          );
        }
      }
      
      class admin extends StatelessWidget {
        @override
        Widget build(BuildContext context) {
          return Scaffold(
            body: Container(
              child: Center(child: new Text("admin")),
            ),
          );
        }
      }
      

      【讨论】:

      • 路由推送应该不需要调用‘setState’了。
      • 我刚刚用完整的代码更新了我的答案,可能会对你有所帮助。
      • 谢谢..现在可以工作了..非常感谢@Viren V Varasadiya
      猜你喜欢
      • 1970-01-01
      • 2017-09-12
      • 1970-01-01
      • 2017-12-08
      • 1970-01-01
      • 2011-06-02
      • 2013-12-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多