Как видите, моя кнопка находится внутри тела Леса. Но я получаю это исключение:
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, должен быть видоизмененным.
_scaffoldKey.currentState.showSnackBar(snackbar);