找不到脚手架小部件:打开底部对话框表时出现异常

Posted

技术标签:

【中文标题】找不到脚手架小部件:打开底部对话框表时出现异常【英文标题】:No Scaffold widget found : Getting exception while opening Bottom Dialog sheet 【发布时间】:2020-05-21 03:14:28 【问题描述】:

我正在使用 Scaffold 小部件,但在打开底部对话框时出现此异常

@override
Widget build(BuildContext context) 

return Scaffold(
  appBar: AppBar(
    title: Text("Calendar"),
  ),
  body: SafeArea(
  .......
  .......

    child: GestureDetector(
                        onTap: ()
                          //getting exception here
                          showBottomSheet(
                              context: context,
                              builder: (context) => Container(
                                color: Colors.red,
                              ));
                        ,

我被困在这段代码上,如果有人可以提出任何建议,那将非常有帮助。谢谢。

【问题讨论】:

添加你的整个代码 【参考方案1】:

使用showModalBottomSheet 代替showBottomSheet 试试下面 例如。

void _settingModalBottomSheet(BuildContext context)
    showModalBottomSheet(
        context: context,
        builder: (BuildContext bc)
      return Container(
        child: new Wrap(
          children: <Widget>[
            new ListTile(
                leading: new Icon(Icons.music_note),
                title: new Text('Music'),
                onTap: () => 
            ),
            new ListTile(
              leading: new Icon(Icons.videocam),
              title: new Text('Video'),
              onTap: () => ,
            ),
          ],
        ),
      );
    );

【讨论】:

为什么有效??...有什么区别。【参考方案2】:

问题是用于显示BottomSheetcontext 不是Scaffoldcontext。您可以通过使用GlobalKey 或将GestureDetector 包装在Builder 小部件中来解决此问题,以便它为您提供包含Scaffold 引用的context

这是一个使用GlobalKey 的示例,其状态为Scaffold

// created the ScaffoldState key    
final scaffoldState = GlobalKey<ScaffoldState>();
    
    class MyWidget extends StatelessWidget 
      void _showSheet() 
        // Show BottomSheet here using the Scaffold state instead ot«f the Scaffold context
        scaffoldState.currentState
            .showBottomSheet((context) => Container(color: Colors.red));
      
    
      @override
      Widget build(BuildContext context) 
        return Scaffold(
            key: scaffoldState,
            appBar: AppBar(
              title: Text("Calendar"),
            ),
            body: SafeArea(child: GestureDetector(onTap: () 
              //getting exception here
              _showSheet();
            )));
      
    

【讨论】:

我在使用您的代码时遇到了不同的错误 在 null 上调用了方法“addLocalHistoryEntry”。接收方:null 尝试调用:addLocalHistoryEntry(Instance of 'LocalHistoryEntry') 您使用哪个类来调用 addLocalHistoryEntry?【参考方案3】:

用 Builder 小部件包装小部件树

 @override
Widget build(BuildContext context) 

return Scaffold(
  appBar: AppBar(
    title: Text("Calendar"),
  ),
  body: Builder(  //HERE
     builder:(context)
    
     return SafeArea(
     .......
     .......

    child: GestureDetector(
                        onTap: ()
                          //getting exception here
                          showBottomSheet(
                              context: context,
                              builder: (context) => Container(
                                color: Colors.red,
                              ));
                        ,

【讨论】:

【参考方案4】:

我不是 100% 知道为什么会这样,但我猜是因为它在脚手架之外。

 class Example extends StatelessWidget 
      @override
      Widget build(BuildContext context) 
        return Scaffold(
            
            appBar: AppBar(
              
            ),
            body: SafeArea(child: YourWidget(),
)
);
      
    

class YourWidget extends StatelessWidget 
  const YourWidget(
    Key key,
  ) : super(key: key);
   @override
  Widget build(BuildContext context) 
 return GestureDetector(
                        onTap: ()
                          //getting exception here
                          showBottomSheet(
                              context: context,
                              builder: (context) => Container(
                                color: Colors.red,
                              ));

   );
  

【讨论】:

以上是关于找不到脚手架小部件:打开底部对话框表时出现异常的主要内容,如果未能解决你的问题,请参考以下文章

当我从 qr_code_scanner 包打开 QRView 小部件时出现平台异常

如何在颤动中更改底部工作表对话框内的文本?

Android:小部件 - 在远程视图上使用 setOnclickPendingIntent 时出现空指针异常?

扩展类异常时出现PHP“找不到类”错误

解析 nlog.config 时出现 NLog 异常 - 找不到目标:'EventLog'

在 Activity 中访问小部件时出现 NullPointerException