我对Dart和Flutter有疑问。所以我试图重构一些代码,我陷入了一个引用问题。
class _LoginPageState extends State< LoginPage> { String _email; 字符串……
既然你正在使用 _email 和 _password 在同一个类中的变量,为什么要使用额外的参数?你可以这样做:
_email
_password
Widget buildInput(String label) { return new TextFormField( decoration: new InputDecoration( labelText: label, ), validator: (value) => value.isEmpty ? "$label can't be empty" : null, onSaved: (value) => this._email = value, ); }
此外,dart语言不支持通过引用传递基元,因此它们将始终按值传递。 如果你需要通过引用传递,那么你将需要包装 _email 和 _password 单独的模型类中的变量,并将该类的对象传递给 buildInputs() 功能。
buildInputs()
你可以参考 这个问题 有关在Dart中通过引用传递的更多详细信息。希望这可以帮助!
的 更新: 强>
如果你只需要使用一个函数 TextField 然后有一个解决方法。你可以这样做:
TextField
Widget buildInput(String label, String val) { return new TextFormField( decoration: new InputDecoration( labelText: label, ), validator: (value) => value.isEmpty ? "$label can't be empty" : null, onSaved: (value) { if(val == "email") this._email = value; else if(val == "password") this._password = value; } ); }
你可以像这样调用函数:
List<Widget> buildInputs() { return [ buildInput("Email", "email"), buildInput("Password", "password"), ]; }
这只是检查数据是电子邮件还是密码的一种方法。你也可以用a实现同样的目标 bool 变量或使用 enum 。
bool
enum