首页 > 解决方案 > 返回类型'未来'不是'未来',根据闭包上下文的要求

问题描述

我正在构建我的测验应用程序,我的测验页面正在形成,但这是我遇到的一个问题。我添加了一个 Willpopscope 只是为了让我的用户在测验开始时不能回到开头,它会弹出一个对话框。这是代码:

import 'dart:convert';
//import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

class GetJson extends StatelessWidget {
  const GetJson({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return FutureBuilder(
      future: DefaultAssetBundle.of(context).loadString("assets/python.json"),
      builder: (context, snapshot) {
        var mydata = jsonDecode(snapshot.data.toString());
        if (mydata == null) {
          return Scaffold(
            body: Center(
              child: Text(
                "Loading",
              ),
            ),
          );
        } else {
          return QuizPage();
        }
      },
    );
  }
}

class QuizPage extends StatefulWidget {
  QuizPage({Key? key}) : super(key: key);

  @override
  _QuizPageState createState() => _QuizPageState();
}

class _QuizPageState extends State<QuizPage> {
  Widget choicebutton() {
    return Padding(
      padding: EdgeInsets.symmetric(
        vertical: 10.0,
        horizontal: 20.0,
      ),
      child: MaterialButton(
        onPressed: () {},
        child: Text(
          "option 1",
          style: TextStyle(
            color: Colors.white,
            fontFamily: "Alike",
            fontSize: 16.0,
          ),
          maxLines: 1,
        ),
        color: Colors.indigo,
        splashColor: Colors.indigo[700],
        highlightColor: Colors.indigo[700],
        minWidth: 200.0,
        height: 45.0,
        shape:
            RoundedRectangleBorder(borderRadius: BorderRadius.circular(20.0)),
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    SystemChrome.setPreferredOrientations(
        [DeviceOrientation.portraitDown, DeviceOrientation.portraitUp]);

    return WillPopScope(
      onWillPop: () {
        return showDialog(
          context: context,
          builder: (context) => AlertDialog(
            title: Text(
              "Quizstar",
            ),
            content: Text("You Can't Go Back At This Stage"),
            actions: [
              // ignore: deprecated_member_use
              FlatButton(onPressed: () {
                 Navigator.of(context).pop();
              }, 
              child: Text(
                "Ok",
              ),
              )
            ],
          )
    );
      },
      child: Scaffold(
        body: Column(
          children: [
            Expanded(
              flex: 3,
              child: Container(
                padding: EdgeInsets.all(15.0),
                alignment: Alignment.bottomLeft,
                child: Text(
                  "This is a sample question which will be displayed?",
                  style: TextStyle(
                    fontSize: 16.0,
                    fontFamily: "Quando",
                  ),
                ),
              ),
            ),
            Expanded(
              flex: 6,
              child: Container(
                child: Column(
                  mainAxisAlignment: MainAxisAlignment.spaceAround,
                  children: [
                    choicebutton(),
                    choicebutton(),
                    choicebutton(),
                    choicebutton(),
                  ],
                ),
              ),
            ),
            Expanded(
              flex: 1,
              child: Container(
                alignment: Alignment.topCenter,
                child: Center(
                  child: Text(
                    "30",
                    style: TextStyle(
                      fontSize: 35.0,
                      fontWeight: FontWeight.w700,
                      fontFamily: "Times New Roman",
                    ),
                  ),
                ),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

错误出现在 showDialog() 中,但我似乎无法弄清楚。

非常感谢你们。

标签: androidflutterdartflutter-layoutflutter-web

解决方案


这可能会有所帮助

在您的willpop范围函数上执行此操作

onWillPop: () {
         showDialog(
          context: context,
          builder: (context) => AlertDialog(
            title: Text(
              "Quizstar",
            ),
            content: Text("You Can't Go Back At This Stage"),
            actions: [
              // ignore: deprecated_member_use
              FlatButton(onPressed: () {
                 Navigator.of(context).pop();
              }, 
              child: Text(
                "Ok",
              ),
              )
            ],
          )
    );


return true;
),
child : your widget

推荐阅读