如何解决这是将 Flutter 小吃店代码从“Scaffold.of”更新为“ScaffoldMessenger”的正确方法吗?
较新的 Flutter 版本改变了零食栏的处理方式 (link to Flutter.dev documentation)。
我正在更新代码,而不是 100% 确定只需进行简单的更改即可。
旧代码摘录,在任何更改之前:
@override
Widget build(BuildContext context) {
return BlocConsumer<FeedBloc,FeedState>(
listener: (context,state) {
if (state.status == FeedStatus.error) {
showDialog(
context: context,builder: (context) => ErrorDialog(content: state.failure.message),);
} else if (state.status == FeedStatus.paginating) {
Scaffold.of(context).showSnackBar(
SnackBar(
backgroundColor: Theme.of(context).primaryColor,duration: const Duration(seconds: 1),content: const Text('Fetching More Posts...'),),);
}
},builder: (context,state) {
return Scaffold(
appBar: AppBar(
title: const Text('Howdy'),actions: [
if (state.posts.isEmpty && state.status == FeedStatus.loaded)
IconButton(
icon: const Icon(Icons.refresh),onPressed: () =>
context.read<FeedBloc>().add(FeedFetchPosts()),)
],body: _buildBody(state),);
},);
}
更新代码摘录(将Scaffold.of(context).showSnackBar(
更改为ScaffoldMessenger.of(context).showSnackBar(
:
@override
Widget build(BuildContext context) {
return BlocConsumer<FeedBloc,FeedState>(
listener: (context,state) {
if (state.status == FeedStatus.error) {
showDialog(
context: context,);
} else if (state.status == FeedStatus.paginating) {
ScaffoldMessenger.of(context).showSnackBar(
// was "Scaffold.of(context).showSnackBar(" but deprecated,per https://flutter.dev/docs/release/breaking-changes/scaffold-messenger
SnackBar(
backgroundColor: Theme.of(context).primaryColor,);
}
},state) {
return Scaffold(
appBar: AppBar(
title: const Text('Howdy'),actions: [
if (state.posts.isEmpty && state.status == FeedStatus.loaded)
IconButton(
icon: const Icon(Icons.refresh),onPressed: () =>
context.read<FeedBloc>().add(FeedFetchPosts()),)
],);
},);
}
这样对吗?我忘记做其他事情了吗?这似乎非常简单,而且可能还不够充分,因为在文档的示例中,“......构建器不再需要提供一个新的作用域,其中包含一个在脚手架“下”的 BuildContext。”
谢谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。