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

时间:2020-02-05 08:36:49

标签: android flutter flutter-layout bottom-sheet

我正在使用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,
                              ));
                        },

我坚持使用此代码,如果有人可以提出任何建议,这将非常有帮助。谢谢。

4 个答案:

答案 0 :(得分:15)

使用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: () => {},
            ),
          ],
        ),
      );
    });
}

答案 1 :(得分:5)

问题在于用于显示context的{​​{1}}不是BottomSheet的{​​{1}}。您可以使用context解决此问题,也可以将Scaffold包裹在GlobalKey小部件中,以便为您提供包含GestureDetector引用的Builder

下面是一个使用context状态为Scaffold的示例:

GlobalKey

答案 2 :(得分:0)

我不是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,
                              ));
}
   );
  }
}

答案 3 :(得分:0)

使用 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,
                              ));
                        },