TextFormField 不反映来自 ChangeNotifierProvider 的 initialValue

TextFormField does not reflect initialValue from a ChangeNotifierProvider

我正在尝试从我的供应商处设置 TextFormFieldinitialValue。这有效但不适用于我屏幕的初始负载。为此,我需要转到上一个屏幕,然后返回。下面是相关的源代码。

用户class:

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();
  }
}

主要class:

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,
      ),
    );
  }
}

如果我将 TextFormField 替换为 Text,则效果很好。我错过了什么?

编辑:虽然我已经有了答案,但我仍然会接受能够解释问题根本原因的答案。

我通过不像这样延迟加载我的 User 提供商解决了这个问题:

void main() => runApp(
  MultiProvider(
    providers: [
      ChangeNotifierProvider(
        create: (context) => User(),
        lazy: false,
      ),
    ],
    child: MyApp(),
  ),
);