这是将 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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...