Как вы можете видеть, моя кнопка находится внутри корпуса Скаффолда. Но я получаю это исключение:
Scaffold.of () вызывается с контекстом, который не содержит Scaffold.
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: HomePage(),
);
}
}
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('SnackBar Playground'),
),
body: Center(
child: RaisedButton(
color: Colors.pink,
textColor: Colors.white,
onPressed: _displaySnackBar(context),
child: Text('Display SnackBar'),
),
),
);
}
}
_displaySnackBar(BuildContext context) {
final snackBar = SnackBar(content: Text('Are you talkin\' to me?'));
Scaffold.of(context).showSnackBar(snackBar);
}
РЕДАКТИРОВАТЬ:
Я нашел другое решение этой проблемы. Если мы дадим Scaffold ключ, который называется GlobalKey, мы можем отобразить SnackBar следующим образом без необходимости оборачивать наше тело виджетом Builder. Хотя виджет, который возвращает Scaffold, должен быть виджетом Stateful.
_scaffoldKey.currentState.showSnackBar(snackbar);