类型 'future<dynamic>' 不是类型 'function' 的子类型

type 'future<dynamic>' is not a subtype of type 'function'

当我 运行 我的应用程序处于调试模式时,它会在整个屏幕和调试控制台中向我显示错误 "type 'future' is not a subtype of type 'function'"。有人能帮我吗?我想这是异步函数 "reset"、"rateoGet" 和 "rateoSave" 的问题,但我找不到任何解决方案。 P.S。我已经删除了部分代码,因为它对这个问题没有用。

int plus;
int min;
int per;
int div;
double val; 
int gameswon =0;
int moves;
static int mosse=15;
String win = "gioca";
int games=0;
double rateo=1;
String mode;
int flag;
var timer=30;


@override
void initState() {
    super.initState();
    reset();
}

@override
Widget build(BuildContext context) {
    return Scaffold(
        body: 
            MyButton(text: "$per" ,color: Colors.deepPurpleAccent, onTap: (){
                setState(() {
                    val*=per;
                });
                if(widget.mode=="timermode" && flag==0){
                    timerceckresults();
                }else if(widget.mode=="movesmode"){
                    checkResult();
                }
            },

            MyBottomButton(text: "Reset",color: Colors.indigo,width:160, onTap: reset()),

    ),
}
checkResult() {
    if(val == 101) {
        print("hai vinto");
        win="Hai Vinto";
        setState(() {});
        gameswon++;
        Timer(Duration(seconds: 2), () {
            reset();
    });
    } else {
        print("ci sei quasi");
        moves++;
        mosse--;
        win="$mosse moves left";
        setState(() {});
        if(moves>14){
            print("hai perso coglione");
            win="Hai Perso Coglione";
            setState(() {});
            Timer(Duration(seconds: 2), () {
                reset();
            });
        }
    }
}
timerceckresults(){
    flag=1;
    timer = 30;
    Timer.periodic(Duration(seconds: 1), (t){
        timer--;
        setState(() {
            win = "${timer.toString()}seconds left";
        });
    if(val==101){
        timer=0;
    }
    if(timer == 0) {
        t.cancel();
        if(val == 101) {
            win="Hai Vinto";
            setState(() {});
            gameswon++;
            Timer(Duration(seconds: 2), () {
                reset();
            });
        } else {
            win="Hai Perso Coglione";
            setState(() {});
            Timer(Duration(seconds: 2), () {
                reset();
            });
        }
    }
});
static int randNum(x,y) {
    var rng = new Random();
    return rng.nextInt(y-x)+x;
}
reset() async{
    timer=1;
    plus = randNum(4, 9);
    min = randNum(5, 19);
    per = randNum(3, 9);
    div = randNum(2, 5);
    val = randNum(2, 11).toDouble();
    moves = 0;
    mosse=15;
    if(widget.mode=="timermode"){
        win="start playing";
    }else{
        win="$mosse moves left";
    }
    await rateoSave();
    await rateoGet();
    games++;
    rateo=gameswon/(games-1);
    await rateoSave();
    flag=0; 
    setState(() {});
}
rateoSave() async {
    SharedPreferences prefs=await SharedPreferences.getInstance();
    await prefs.setInt("games",games);
    await prefs.setInt("gameswon",gameswon);
}
rateoGet() async {
    SharedPreferences prefs=await SharedPreferences.getInstance();
    games=(prefs.getInt("games") ?? 0);
    gameswon=(prefs.getInt("gameswon") ?? 0);

https://dart.dev/codelabs/async-await在检查答案之前阅读此内容会对您有很大帮助

reset() async{
    timer=1;
    plus = randNum(4, 9);
    min = randNum(5, 19);
    per = randNum(3, 9);
    div = randNum(2, 5);
    val = randNum(2, 11).toDouble();
    moves = 0;
    mosse=15;
    if(widget.mode=="timermode"){
        win="start playing";
    }else{
        win="$mosse moves left";
    }
    await rateoSave();
    await rateoGet();
    games++;
    rateo=gameswon/(games-1);
    await rateoSave();
    flag=0; 
    setState(() {});
}
Future<bool> rateoSave() {
    SharedPreferences prefs= SharedPreferences.getInstance();
    prefs.setInt("games",games);
    prefs.setInt("gameswon",gameswon);
return true;
}

Future<bool> rateoGet() async {
    SharedPreferences prefs= SharedPreferences.getInstance();
    await  games=(prefs.getInt("games") ?? 0);
    await  gameswon=(prefs.getInt("gameswon") ?? 0);
    return true;
  }

您正在尝试从 returns 未来的方法中获取变量。您需要在调用该函数之前添加 await 。

你能告诉我们这个错误发生在哪一行吗?

要记住的最重要的事情是,如果你的调用链中的 anything returns 一个 Future,everything 在上面它必须处理期货,或者通过返回未来本身(如果不需要进行任何处理),或者 await'ing 并处理返回的值(但你仍然会返回一个未来)。