Можно использовать два контекста в диалоге и использовать контекст, переданный диалогу, для поиска Scaffold
.
Когда вы показываете диалог, вы отображаете совершенно другую страницу / маршруткоторый выходит за рамки вызывающей страницы.Таким образом, строительные леса недоступны.
Ниже приведен рабочий пример, в котором вы используете область действия первой страницы.Проблема, однако, в том, что SnackBar
не удаляется.
Если вместо этого вы используете GlobalKey
, чтобы получить 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),
),
),
];
},
)
],
),
);
}
}