当前位置: 首页 > 知识库问答 >
问题:

使用不包含脚手架的上下文调用的Scaffold.of()

曾嘉祯
2023-03-14
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);
}

编辑:

我找到了另一个解决这个问题的方法。如果我们给scaffold一个键,它是globalkey ,我们可以如下所示显示快捷键,而不需要将主体封装在builder小部件中。但是,返回scaffold的小部件应该是一个有状态的小部件。

 _scaffoldKey.currentState.showSnackBar(snackbar); 

共有1个答案

邢炯
2023-03-14

发生此异常是因为您正在使用实例化scaffold的小部件的上下文。不是scaffold的子级的上下文

您可以通过使用不同的上下文来解决这个问题:

Scaffold(
    appBar: AppBar(
        title: Text('SnackBar Playground'),
    ),
    body: Builder(
        builder: (context) => 
            Center(
            child: RaisedButton(
            color: Colors.pink,
            textColor: Colors.white,
            onPressed: () => _displaySnackBar(context),
            child: Text('Display SnackBar'),
            ),
        ),
    ),
);

注意,虽然我们在这里使用builder,但这并不是获得不同的buildcontext的唯一方法。

 类似资料:
  • 我一直试图在Flutter中获得整个上下文视图的大小。但每次我尝试,我都会得到上面提到的错误。这是我的密码: 注意:我还尝试了一个。请帮我找出我做错了什么。

  • **试图通过终结点调用存储库,但始终出现错误**

  • 本文向大家介绍Rails脚手架使用实例,包括了Rails脚手架使用实例的使用技巧和注意事项,需要的朋友参考一下 脚手架是rails非常省事的方法,一些简单的增删改查脚手架都能实现,省去了我们不必要的麻烦,那么怎么用rails的脚手架呢,今天来讲解一下。 .指定端口启动rails项目 0.创建一个项目 1.用脚手架创建产品(控制 模型 显示 数据) 2.如果创建错了销毁这些(destroy 销毁 s

  • 为了能让开发者快速开发一个插件,qap-cli集成了脚手架的功能,使用qap的脚手架功能只需要如下3个命令。 初始化项目 首先通过命令行进入到你希望创建项目的目录,运行 qap init myProject 上边的myPoject是项目的名称,把myProject替换为你的项目名称即可 命令运行后,qap将会帮你创建myPoject的目录和创建好了基础文件。 安装项目依赖 运行如下2个命令 cd

  • 问题内容: 我将如何使用AngularJS 显示以下HTML(Twitter Bootstrap脚手架)?本质上,我需要关闭每第三条记录,打印,然后打开另一个 我为代码演示创建了一个小提琴。 http://jsfiddle.net/ADukg/261/ 问题答案: 一种更优雅的方法是使用视图模型来提供分块的集合,然后让视图像 并且coffeescript非常简单 ​ http://jsfiddle

  • 在创建spring maven rest WebService时,我得到了以下错误。当我使用postman测试OCBC api上的post请求时,它工作得很好。但是当我试图为citi执行post请求时,我得到了以下错误:servlet.service()for servlet[dispatcherServlet]上下文中的path[]抛出异常[request processing Failed;嵌