flutter Getx控制器无法处置

w8biq8rn  于 2023-06-07  发布在  Flutter
关注(0)|答案(1)|浏览(293)

我创建了一个函数来检查用户,从API来检查用户是否登录。我使用这个是因为我API不是实时的。这是我的代码funcheckuser

void funfetchUser() async {
  print('get user');
  SharedPreferences prefs = await SharedPreferences.getInstance();
  var token = prefs.getString('token');
  try {
    var headers = {
      'Accept': 'application/json',
      'Authorization': 'Bearer $token',
    };
    var url = Uri.parse(Api.base + Api.user);
    https.Response response = await https.get(url, headers: headers);
    if (response.statusCode == 200) {
      var user = jsonDecode(response.body)['user'];
      var isLogin = token;
      print(isLogin);
      UserList.email = user['email'];
      UserList.userlongname = user['user_longname'];
      UserList.userphone = user['user_phone'];
      
      Future.delayed(Duration(seconds: 1), (() {
        if (isLogin == null) {
          Get.toNamed('/login');
        } else {
          print('stay');
        }
      }));
      
    } else {
      var login2 = jsonDecode(response.body);
      print(login2);
      // customAllertDialog("Sesi", 'Sesi Berakhir', 'error');
      print('logout');
      prefs.clear();
      Get.toNamed('/login');
    }
  } catch (e) {
    print(e);
    prefs.clear();
  }
}

我在我所有的控制器上创造这个乐趣

@override
  void onInit() {
    // TODO: implement onInit
    super.onInit();
    print('ini profile');
    funfetchUser();
  }
  @override
  void onReady() {
    // TODO: implement onReady
    super.onReady();
    Timer.periodic(Duration(seconds: 
    30), (timer) { 
      print('cek user profile gan');
      funfetchUser();
    });
  }
  @override
  void onClose() {
    // TODO: implement onClose
    super.onClose();
    Get.delete<ProfilController>();
  }

那个控制器总是运行即使我移动页面。我想调用每一个控制器在每一页,但一个n唯一的控制器运行是contoller配置文件

mwg9r5ms

mwg9r5ms1#

Getx包内控制器的移除路由有关
并且不应该手动删除控制器****

相关问题