gpt4 book ai didi

flutter - Snackbar 和异常 : scaffold. of()

转载 作者:行者123 更新时间:2023-12-03 03:07:44 25 4
gpt4 key购买 nike

为什么点击我的iconButton我的 snackBarScaffold.of() 向我抛出异常?

Scaffold.of() called with a context that does not contain a Scaffold.
No Scaffold ancestor could be found starting from the context that was passed to Scaffold.of(). This usually happens when the context provided is from the same StatefulWidget as that whose build function actually creates the Scaffold widget being sought.
There are several ways to avoid this problem. The simplest is to use a Builder to get a context that is "under" the Scaffold. For an example of this, please see the documentation for Scaffold.of():
https://api.flutter.dev/flutter/material/Scaffold/of.html
A more efficient solution is to split your build function into several widgets. This introduces a new context from which you can obtain the Scaffold. In this solution, you would have an outer widget that creates the Scaffold populated by instances of your new inner widgets, and then in these inner widgets you would use Scaffold.of().
A less elegant but more expedient solution is assign a GlobalKey to the Scaffold, then use the key.currentState property to obtain the ScaffoldState rather than using the Scaffold.of() function.
The context used was:
Builder

我的代码:
        : Scaffold(
backgroundColor: Colors.white,
body: Container(
child: ListView.builder(
itemCount: user.getInvolvedEvents.length,
itemBuilder: (context, i){
return GestureDetector(
onTap: () {
//
},
child: Container(
height: 160.0,
margin: EdgeInsets.all(5),
child: Card(
child: Container(
decoration: BoxDecoration(
child: Stack(
alignment: Alignment.bottomLeft,
children: <Widget>[
Positioned(
bottom: 15,
right: 20,
child: Row(
children: <Widget>[
IconButton(
icon: Icon(Icons.cancel, color: Colors.red, size: 35),
onPressed: () {
return showDialog(
context: context,
builder: (BuildContext context){
return AlertDialog(
content: Text('Czy napewno chcesz odwołać swój udział w wydarzeniu "${user.getInvolvedEvents[i].title}"?'),
actions: <Widget>[
FlatButton(
child: Text(
'TAK',
style: TextStyle(
fontWeight: FontWeight.bold,
color: Colors.black),
),
onPressed: () async {
bool status = await removeFromInterested(user.getInvolvedEvents[i].id);
if(status){
Navigator.of(context).pop(null);

final snackBar = SnackBar(
duration: const Duration(seconds: 3),
content: Text('Nie weźmiesz udziału w wydarzeniu'),
);

Scaffold.of(context).showSnackBar(snackBar);
}
},
),

谢谢你的帮助 :)

最佳答案

这是因为您使用的是 contextAlert不包含 scaffold .
您可以使用 GlobalKey反而:

  final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();

@override
Widget build(BuildContext context) {
return Scaffold(
key: _scaffoldKey,
)
}
并显示小吃吧:
_scaffoldKey.currentState.showSnackBar(
SnackBar(
content: Text('Text'),
)
);

关于flutter - Snackbar 和异常 : scaffold. of(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61416520/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com