在这个问题之后,我理解了为什么StatefulWidgets在基于 Redux 的颤振应用程序的上下文中确实有意义。这也是我想要完成的——
一个页面,它是来自应用程序范围状态的“馈送”信息(登录用户详细信息、api 数据等),并且还可以从其连接的 ViewModel 调度操作,但它还包含范围较小、寿命短的有状态小部件状态。诸如动画之类的东西,在提交之前动态验证用户输入,以及根据用户操作更改 UI。
所以我对这里的方法很感兴趣,希望有人可以帮助我。目前我所有的“页面”都是通过商店连接到应用程序状态的无状态小部件,方式如下:
class LoginPage extends StatelessWidget {
final String TAG = "LoginPage";
bool isGreen = false;
LoginPage({Key key}) : super(key: key);
void changeColor() {
isGreen = !!isGreen;
}
@override
Widget build(BuildContext context) {
/// [StoreConnector] is used to convert store data (using the fromStore)
/// into a ViewModel suitable for the page.
return StoreConnector<AppState, LoginPageViewModel>(
builder: (context, viewModel) {
return Scaffold(
body: Column(
children: <Widget>[
Container(...),
Text(
text: viewModel.some_value_from_the_store,
color: isGreen ? Colors.green : Colors.red,
),
ElevatedButton(
onPressed: () => changeColor(),
child: Text('Press to change color'),
)
],
));
},
converter: LoginPageViewModel.fromStore);
}
}
在这里,我只是尝试根据用户点击简单地更改“LoginPage”小部件内的文本颜色,同时仍保持与商店的连接,以便 UI 在新的应用程序状态信息到达时不断更新。
我们那里有这样的参考吗?谁能提供一个例子,或者只是如何实现这一目标的基本准则?看起来很简单,但我正在努力解决它。