Que*_*tin 2 dart snackbar android-snackbar flutter
我尝试SnackBar从执行操作后显示a AppBar。在AppBar无法从一个生成器,它不能访问是脚手架的祖先建造。我知道我们可以随时使用GlobalKey对象访问上下文,但是我想知道是否有解决方案而不使用GlobalKey。我发现了一些github问题和请求请求,但我找不到它们的解决方案=> https://github.com/flutter/flutter/issues/4581和https://github.com/flutter/flutter/拉/ 9380
其他一些情况:我有一个Appbar带有的项目PopupMenuButton,其中有一项。当用户单击该项目时,我将显示一个对话框,该对话框显示showDialog方法,如果用户单击“确定”,则要显示一个对话框。SnackBar
小智 14
您可以使用 Builder 小部件
例子:
Scaffold(
appBar: AppBar(
actions: <Widget>[
Builder(
builder: (BuildContext context) {
return IconButton(
icon: const Icon(Icons.message),
onPressed: () {
final snackBar = SnackBar(content: Text('Yay! A SnackBar!'));
Scaffold.of(context).showSnackBar(snackBar);
},
);
},
),
],
)
);
Run Code Online (Sandbox Code Playgroud)
该Scaffold.appBar参数需要一个PreferredSizeWidget,因此您可以Builder像这样:
appBar: PreferredSize(
preferredSize: Size.fromHeight(56),
child: Builder(
builder: (context) => AppBar(...),
),
),
Run Code Online (Sandbox Code Playgroud)
一个选项是在对话框中使用两个上下文,并使用传递给对话框的上下文来搜索Scaffold.
当您显示对话框时,您正在显示一个完全不同的页面/路线,该页面/路线超出了调用页面的范围。所以没有可用的脚手架。
下面有一个使用第一页范围的工作示例。但问题是,它SnackBar没有被删除。
如果您使用 aGlobalKey来获取Scaffold问题是相同的。
在这种情况下,我会考虑不使用 Snackbar,因为它与下面的页面相关联。它甚至被对话框阴影变灰。
import 'package:flutter/material.dart';
void main() => runApp(new MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
home: new MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
_showDialog(BuildContext context1) {
return showDialog(
context: context1,
builder: (BuildContext context) {
return AlertDialog(
content: Text("Dialog"),
actions: <Widget>[
new FlatButton(
child: new Text("OK"),
onPressed: () => Scaffold.of(context1).showSnackBar(SnackBar(
content: Text("Pressed"),
)),
),
],
);
});
}
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text("Test"),
actions: <Widget>[
PopupMenuButton(
itemBuilder: (BuildContext context) {
return <PopupMenuEntry>[
PopupMenuItem(
child: ListTile(
title: Text('Show dialog'),
onTap: () => _showDialog(context),
),
),
];
},
)
],
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1282 次 |
| 最近记录: |