Виджет Scaffold не найден: получение исключения при открытии диалогового окна Bottom - PullRequest
1 голос
/ 05 февраля 2020

Я использую виджет 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,
                              ));
                        },

Я застрял в этом коде, будет очень полезно, если кто-то может дать какой-либо предложение. Спасибо.

Ответы [ 2 ]

3 голосов
/ 05 февраля 2020

Используйте 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 голосов
/ 05 февраля 2020

Проблема в том, что контекст, используемый для отображения BottomSheet, не является context из Scaffold. Вы можете решить эту проблему с помощью GlobalKey или использовать обтекание GestureDetector в виджете Builder, чтобы получить context из Scaffold.

Вот пример использования 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();
            })));
      }
    }
...