Flutter 此表达式的类型为';无效';所以它的值可以';不可用

Flutter 此表达式的类型为';无效';所以它的值可以';不可用,flutter,recursion,dart,Flutter,Recursion,Dart,我已经创建了一个新方法,在递归时使用它。我正在创建一个函数,从API服务器获取刷新令牌 void postLogin(LoginRequest loginRequest) async { _postStream.sink.add(Result<String>.loading("Loading")); try { final response = await client.post('$BASE_URL\/$LOGIN_URL', h

我已经创建了一个新方法,在递归时使用它。我正在创建一个函数,从API服务器获取刷新令牌

  void postLogin(LoginRequest loginRequest) async {
    _postStream.sink.add(Result<String>.loading("Loading"));
    try {
      final response = await client.post('$BASE_URL\/$LOGIN_URL', headers: customHeader, body: json.encode(loginRequest));
      print(response.body.toString());
      if (response.statusCode == 200) {
        _postStream.sink.add(Result<LoginResponse>.success(
            LoginResponse.fromJson(json.decode(response.body))));
      } else if(response.statusCode == 401) {
           getAuthUpadate(postLogin(loginRequest));//error is showing at this place
      }
      else{
        _postStream.sink.add(Result.error(REQUEST_ERROR));

      }
    } catch (error) {
      print(error.toString());
      _postStream.sink.add(Result.error(INTERNET_ERROR));
    }
  }
//////////////

我可以给你一个关于这个问题的想法。
您只需调用返回值为void的函数,并将其作为参数传递给函数
getAuthUpdate


你可以试试这样的

getAuthUpadate(Function function, LoginRequest loginRequest) async { } 
else if(response.statusCode == 401) {
     getAuthUpadate(postLogin, loginRequest);  // Just pass Reference as parameter! 
}
postLogin
方法中,您可以尝试这样的方法

getAuthUpadate(Function function, LoginRequest loginRequest) async { } 
else if(response.statusCode == 401) {
     getAuthUpadate(postLogin, loginRequest);  // Just pass Reference as parameter! 
}
最后,
getAuthUpdate
方法的迭代部分

 try{
      final response = await client.post('$BASE_URL\/NEW_ACCESS_TOKEN_PATH', headers: customHeader,body:json.encode('RefreshToken'));
      //get the refreshToken from response
      String accessToken = response.body.toString();
      //store this access token to the data
      function(loginRequest);
  }
  catch (error){

  }

希望能成功

我可以给你一个关于这个问题的想法。
您只需调用返回值为void的函数,并将其作为参数传递给函数
getAuthUpdate


你可以试试这样的

getAuthUpadate(Function function, LoginRequest loginRequest) async { } 
else if(response.statusCode == 401) {
     getAuthUpadate(postLogin, loginRequest);  // Just pass Reference as parameter! 
}
postLogin
方法中,您可以尝试这样的方法

getAuthUpadate(Function function, LoginRequest loginRequest) async { } 
else if(response.statusCode == 401) {
     getAuthUpadate(postLogin, loginRequest);  // Just pass Reference as parameter! 
}
最后,
getAuthUpdate
方法的迭代部分

 try{
      final response = await client.post('$BASE_URL\/NEW_ACCESS_TOKEN_PATH', headers: customHeader,body:json.encode('RefreshToken'));
      //get the refreshToken from response
      String accessToken = response.body.toString();
      //store this access token to the data
      function(loginRequest);
  }
  catch (error){

  }

希望能成功

当我在回调方法中传入一个
void
时(例如,当函数被声明为
void function(){…}
时调用
function()
发生了这个错误

例如:

IconButton(
图标:图标(
mdicons.plusCircle,
),

onPressed:_navigateToJoinQuizScreen());//当我在回调方法中传入
void
时(例如,当函数声明为
void function(){…}
时调用
function()
时,我发生了此错误

例如:

IconButton(
图标:图标(
mdicons.plusCircle,
),

onPressed:_navigateToJoinQuizScreen();//
getAuthUpadate
需要一个不带参数的函数。您需要执行类似于
getAuthUpadate(()=>postLogin(loginRequest))
的操作
getAuthUpadate
需要一个不带参数的函数。您需要执行类似于
getAuthUpadate(()=>登录后(登录请求))