如果需要在异步任务中使用BuildContext,可以将BuildContext对象作为参数传递给异步函数,而不是在异步函数内直接使用。
例如:
class MyWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return RaisedButton(
onPressed: () async {
// 错误示范:在异步函数内使用BuildContext
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text('Dialog'),
content: Text('This is a dialog.'),
actions: [
FlatButton(
onPressed: () {
Navigator.of(context).pop();
},
child: Text('Close'),
),
],
);
},
);
// 正确示范:将BuildContext作为参数传递
showDialog(
context: context,
builder: (BuildContext dialogContext) {
return AlertDialog(
title: Text('Dialog'),
content: Text('This is a dialog.'),
actions: [
FlatButton(
onPressed: () {
Navigator.of(dialogContext).pop();
},
child: Text('Close'),
),
],
);
},
);
},
child: Text('Show Dialog'),
);
}
}