我想在 isTokenExpired 变为 true 时更新 MaterialApp 小部件...当 isTokenExpired 更新时,我正在调用 notifyListeners() 并调用 builder 并执行打印语句,但 ValueListenableBuilder 并未重建 MaterialApp 小部件。
我缺少什么?
嗨,这是代码:
ValueListenableBuilder(
valueListenable: isTokenExpired,
builder: (context, value, child) {
print("app refresh token:" + currentUser.value.refreshToken.toString());
print("BUILD IS CALLED ");
print("istoken expired | ${isTokenExpired.value}");
return KeyboardDismissOnTap(
child: MaterialApp(
title: "testpal_app",
builder: BotToastInit(),
debugShowCheckedModeBanner: false,
navigatorObservers: [BotToastNavigatorObserver()],
home: isTokenExpired.value
? LoginView()
: StudentWrapper(),
),
);
},
这里也是我的 ValueNotifier 和调用的方法:
ValueNotifier<bool> isTokenExpired = new ValueNotifier(false);
refreshToken() async {
String url =
'${GlobalConfiguration().getString('base_url')}user/api/token/refresh/';
print(url);
final client = new http.Client();
var res = await client.post(
url,
headers: {
'Content-Type': 'application/json',
},
body: jsonEncode(
{
"refresh": currentUser.value.refreshToken,
},
),
);
var data = json.decode(utf8.decode(res.bodyBytes));
if (res.statusCode == 200) {
print("refresh token successfull");
currentUser.value.accessToken = data['access'];
await setCurrentUser(currentUser.value);
} else {
print(res.statusCode);
print(data);
isTokenExpired.value = true;
isTokenExpired.notifyListeners();
print("refresh token expired");
throw data;
}
}