我在显示SnackBar时遇到问题。我尝试了GlobalKey,将小部件拆分为另一个类和生成器。
我遇到了一个例外,这里将对此进行更多的讨论
NoSuchMethodError: The method 'showSnackBar' was called on null.
但是没有什么能解决我的问题。
这是我的课程
class LoginScreen extends StatelessWidget {
final _scaffoldKey = GlobalKey<ScaffoldState>();
@override
Widget build(BuildContext context) {
final provider = Provider.of<LoginProvider>(context);
final bloc = Provider.of<LoginBloc>(context);
return Scaffold(
key: _scaffoldKey,
body: provider.loginStatus == LoginStatus.Authorizing
? Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
CircularProgressIndicator(),
const Text('Signing in...')
],
),
)
: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
RaisedButton(
child: Text(
Constants.loginButton,
style: TextStyle(fontSize: 16.0),
),
onPressed: () {
var loginValues = bloc.loginValues();
print(loginValues);
provider.signIn(loginValues).then(
(value) {
if (value != null) {
Navigator.pushReplacementNamed(
context, MainScreen.routeName);
}
},
).catchError(
(error) {
_scaffoldKey.currentState.showSnackBar(
SnackBar(
content: Text(error.toString()),
),
);
},
);
},
),
],
),
),
);
} }
显示SnackBar在onCatch()中执行。我发现,当我的LoginScreen类是有状态的小部件不是无状态的时,同样的代码也可以工作。但是我不知道为什么。
谢谢大家。
答案 0 :(得分:0)
用于在支架下显示小吃栏:
final snackBar = SnackBar(
content: Text(e.message),
);
Scaffold.of(context).showSnackBar(snackBar);
catchError((e) {
final snackBar = SnackBar(
content: Text(e.message),
);
Scaffold.of(context).showSnackBar(snackBar);
});
已更新:
使用Builder小部件包装中心小部件并传递BuildContext