【发布时间】:2020-10-09 19:36:50
【问题描述】:
我正在尝试从我的提供商处设置我的TextFormField 的 initialValue。这有效,但不适用于我的屏幕的初始加载。为此,我需要转到上一个屏幕,然后返回。以下是相关的源代码。
用户类别:
class User with ChangeNotifier {
String name;
String email;
User() {
_deserialiseUser();
}
}
void _deserialiseUser() async {
final prefs = await SharedPreferences.getInstance();
final String jsonUser = prefs.getString('user');
if (jsonUser != null) {
var ju = jsonDecode(jsonUser);
name = ju['name'];
email = ju['email'];
notifyListeners();
}
}
主类:
void main() => runApp(
MultiProvider(
providers: [
ChangeNotifierProvider(create: (context) => User()),
...
],
child: MyApp(),
),
);
受影响的屏幕:
class AccountScreen extends StatefulWidget {
@override
_AccountScreenState createState() => _AccountScreenState();
}
class _AccountScreenState extends State<AccountScreen> {
User user;
@override
Widget build(BuildContext context) {
user = context.watch<User>();
return Scaffold(
appBar: AppBar(
title: Text('Account'),
),
body: TextFormField(
initialValue: user.name,
),
);
}
}
如果我用Text 替换我的TextFormField,这工作正常。我错过了什么?
【问题讨论】:
-
你用的是模型???
-
User 类是我的模型。