return 类型 'Future<bool?> Function()' 不是闭包上下文所要求的 'Future<bool>'

The return type 'Future<bool?> Function()' isn't a 'Future<bool>', as required by the closure's context

  Future<bool?> _onBackPressed() async {
    return showDialog(
        context: context,
        builder: (BuildContext context) {
          return AlertDialog(
            title: Text('Do you want to exit without saving changes?'),
            content:
                Text('Please press the SAVE button at the bottom of the page'),
            actions: <Widget>[
              TextButton(
                child: Text('NO'),
                onPressed: () {
                  Navigator.of(context).pop(false);
                },
              ),
              TextButton(
                child: Text('YES'),
                onPressed: () {
                  Navigator.of(context).pop(true);
                  Navigator.of(context).pop(true);
                },
              ),
            ],
          );
        });
  }
..
    return WillPopScope(
      onWillPop: () => _onBackPressed, // causing error
      child: Scaffold(
        key: _scaffoldkey,
        body: SafeArea(
          child: SingleChildScrollView(
            child: Container(
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: <Widget>[
                  Stack(
                    children: <Widget>[
                      Positioned(
                        child: AppBar(
                          centerTitle: true,
                          title: Text(
                            "Sample",
                            style: TextStyle(
                              fontFamily: 'LobsterTwo',
                              fontStyle: FontStyle.italic,
                              fontWeight: FontWeight.bold,
                              fontSize: 18.0,
                              color: Colors.black87,
                            ),
                          ),
                          backgroundColor: Colors.transparent,
                          elevation: 0,
                          leading: IconButton(
                            icon: Icon(
                              Icons.arrow_back,
                              color: Colors.black,
                              size: 30,
                            ),
                            onPressed: () {
                              _onBackPressed();
                            },
                            ..
                            ..
                          ),
                        ),
                      ),
                    ],
                  ),
                ],
              ),
            ),
          ),
        ),
      ),
    );

onWillPop 期望 Future<bool>,这意味着 return 值要么为真要么为假,但 _onBackPressed 的 return 类型为 Future<bool?> 表示 return 值为 true、false 或 null。将 _onWillPop 的 return 类型从 Future<bool?> 更改为 Future<bool>

你可以这样试试

  onWillPop: () async {
          bool? result= await _onBackPressed();
          if(result == null){
             result = false;
          }
          return result!;
        }, 

由于您的 _onBackPressed 函数 return Future<bool?>onWillPop 需要 Future<bool>。 我所做的是使用 result_onBackPressed 获取你的 return。 return 可能是 true falsenull。所以我添加了一个空值检查并将其更改为 false。最后是关键,使用!将可空的bool?改为boolresult! 意味着您保证 result 不为空,即使您将其定义为可为空。