Như bạn có thể thấy nút của tôi ở trong cơ thể của Scaffold. Nhưng tôi nhận được ngoại lệ này:
Scaffold.of () được gọi với bối cảnh không chứa 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);
}
BIÊN TẬP:
Tôi tìm thấy một giải pháp khác cho vấn đề này. Nếu chúng tôi cung cấp cho Scaffold một khóa là GlobalKey, chúng tôi có thể hiển thị SnackBar như sau mà không cần phải bọc cơ thể bằng tiện ích Builder. Các widget trả về Scaffold phải là widget Stateful mặc dù:
_scaffoldKey.currentState.showSnackBar(snackbar);