我有一个简单的应用程序,它需要两个文本字段并将它们显示在另一个页面中。
这是第一堂课:
class MyApp extends StatelessWidget {
const MyApp({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider(
create: (context) => Login(),
child: MaterialApp(
color: Colors.teal,
home: App(),
)
);
}
}
然后在 App 类中我有这个:
@override
Widget build(BuildContext context) {
Login log = Provider.of<Login>(context);
.
.
.
.
// textfields that take email and password inputs
.
.
FlatButton(
color: Colors.white,
child: Text('Save', style: GoogleFonts.pacifico()),
onPressed: () {
log.saveUser( // THIS METHOD
User(emailController.text, passwordController.text));
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => ShowUser(),
),
);
},
)
所以按下按钮会做两件事:
- 将 User 对象保存在用 ChangeNotifier 实现的 Login 类中。
登录类如下:
class Login with ChangeNotifier {
User currentUser;
void saveUser(User user) {
currentUser = user;
// notifyListeners(); THIS LINE
}
User getUser() {
return currentUser;
}
}
按下按钮还将导航到具有以下代码的第二页:
Login login = Provider.of<Login>(context); User _user = login.getUser();
然后我使用 _user 实例来显示电子邮件和密码。
代码有效,我的输入显示在第二页。这里的问题是 notifyListeners() 是否被注释掉。
我什至在这里应用状态管理?为什么不需要 notifyListeners 方法?