return 类型 'Future<bool?> Function()' 不是闭包上下文所要求的 'Future<bool>'
The return type 'Future<bool?> Function()' isn't a 'Future<bool>', as required by the closure's context
- 我已经将我的项目 sdk 升级到
>2.12
,所以我正在进行更改,但我被困在这个特定的错误中,无法找到任何解决方案。
- 我已经对方法进行了更改,正如您在调用它时看到的,我不确定如何修复它。这个问题是在我升级并尝试解决所有
non-nullable
或 ``null-safety``` 问题后引起的
- 代码
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
false
或 null
。所以我添加了一个空值检查并将其更改为 false
。最后是关键,使用!
将可空的bool?
改为bool
。 result!
意味着您保证 result
不为空,即使您将其定义为可为空。
- 我已经将我的项目 sdk 升级到
>2.12
,所以我正在进行更改,但我被困在这个特定的错误中,无法找到任何解决方案。 - 我已经对方法进行了更改,正如您在调用它时看到的,我不确定如何修复它。这个问题是在我升级并尝试解决所有
non-nullable
或 ``null-safety``` 问题后引起的 - 代码
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
false
或 null
。所以我添加了一个空值检查并将其更改为 false
。最后是关键,使用!
将可空的bool?
改为bool
。 result!
意味着您保证 result
不为空,即使您将其定义为可为空。