ValueListenableBuilder 不重建小部件

时间:2021-04-13 13:28:03

标签: flutter dart

我想在 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;
    }
  }

0 个答案:

没有答案