我对 Dart 和 Flutter 有疑问。所以我试图重构一些代码,但我陷入了引用问题。
class _LoginPageState extends State<LoginPage> {
String _email;
String _password;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: new AppBar(
title: new Text("Login Page"),
),
body: new Container(
padding: new EdgeInsets.all(16),
child: new Form(
child: new Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: buildInputs()
)),
));
}
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) => val = value, …Run Code Online (Sandbox Code Playgroud) 在 Dart 中,我如何最好地编写等效于(不可变/值/非对象)输出或引用参数的代码?
例如在 C#-ish 中,我可能会编码:
function void example()
{
int result = 0;
if (tryFindResult(anObject, ref result))
processResult(result);
else
processForNoResult();
}
function bool tryFindResult(Object obj, ref int result)
{
if (obj.Contains("what I'm looking for"))
{
result = aValue;
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud) 我想重用一个函数来更新StatefulWidget. 更新哪个状态变量应取决于作为参数传递给函数的变量引用。这是一些示例代码:
class _MyScreenState extends State<MyScreen> {
String stateVariable = 'initial value';
void update(String variableRef) {
setState((() {
variableRef = 'updated value';
})
}
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () => update(stateVariable),
child: Text(stateVariable)
)
}
}
Run Code Online (Sandbox Code Playgroud)
函数中状态设置成功setState,但遗憾的是状态变化并未在 UI 中体现,即build函数未再次调用。
我的期望是应该更新,因为我通过引用stateVariable将变量传递给函数。update这个假设是错误的吗?
您知道一种通过引用传递状态变量以便可以通过函数幂等更新它的方法吗?