Jak widzisz, mój przycisk znajduje się wewnątrz ciała Scaffolda. Ale mam ten wyjątek:
Scaffold.of () wywołano z kontekstem, który nie zawiera 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);
}
EDYTOWAĆ:
Znalazłem inne rozwiązanie tego problemu. Jeśli damy Scaffoldowi klucz, którym jest GlobalKey, możemy wyświetlić SnackBar jako następujący bez potrzeby zawijania naszego ciała widżetem Builder. Jednak widget, który zwraca Scaffold, powinien być widgetem Stateful .:
_scaffoldKey.currentState.showSnackBar(snackbar);