flutter-SnackBar не отображается в TabBarView - PullRequest
0 голосов
/ 22 мая 2018

Это официальная демонстрационная вкладка от Flutter.io.И я хочу добавить панель закусок во вкладку, которая вызывается кнопкой RadioButton.

Я обернул его в виджет Скаффолд.И это работает не в TabBarView, а в одной радиокнопке.Но когда я помещаю Snackbar во вкладку, ничего не отображается.

Основная часть кода показана ниже

class MyApp extends StatelessWidget {
  @override
   Widget build(BuildContext context) {
     return new MaterialApp(
       title: 'Flutter Demo',
       theme: new ThemeData(

       primarySwatch: Colors.blue,
       ),
       home: new DefaultTabController(
        length: 3,
        child: new Scaffold(
        appBar: new AppBar(
          bottom: new TabBar(tabs: [
            new Tab(icon: new Icon(Icons.home)),
            new Tab(icon: new Icon(Icons.favorite)),
            new Tab(icon: new Icon(Icons.list))
          ]),
          title: new Text("Tabs Demo"),
        ),
        body: new TabBarView(children: [
          new MyHomePage(),
          new Center(
              child: new RaisedButton(
                onPressed: () {
                  final snackBar = new SnackBar(
                    content: new Text('Yay! A SnackBar!'),
                    action: new SnackBarAction(
                      label: 'Undo',
                      onPressed: () {
                        // Some code to undo the change!
                      },
                    ),
                  );

                  // Find the Scaffold in the Widget tree and use it to show a SnackBar!
                  Scaffold.of(context).showSnackBar(snackBar);
                },
                child: new Text('Show SnackBar'),
              )
          ),
            new Center(
              child: new IconButton(icon: new Icon(Icons.add), onPressed: (){
                final snackBar = new SnackBar(
                  content: new Text('Yay! A SnackBar!'),
                  action: new SnackBarAction(
                    label: 'Undo',
                    onPressed: () {
                      // Some code to undo the change!
                    },
                  ),
                );

                // Find the Scaffold in the Widget tree and use it to show a SnackBar!
                Scaffold.of(context).showSnackBar(snackBar);
              })
            ),
        ]),
      )),
);
}
 }

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Я нашел решение в другом посте How to Show-snackbar-in-flutter

Я понял, что контекст в Scaffold.of (context) должен быть встроен в Scaffoldвиджет, что означает, что необходимо обернуть Snackbar в другой виджет.Пример кода, подобный этому:

class ShowSnackBarBtn extends StatelessWidget{
   @override
   Widget build(BuildContext context) {
   // TODO: implement build
   return new Center(
    child: new RaisedButton(
      onPressed: () {
        final snackBar = new SnackBar(
          content: new Text('Yay! A SnackBar!'),
          action: new SnackBarAction(
            label: 'Undo',
            onPressed: () {
              // Some code to undo the change!
            },
          ),
        );

        // Find the Scaffold in the Widget tree and use it to show a SnackBar!
        Scaffold.of(context).showSnackBar(snackBar);
      },
      child: new Text('Show SnackBar'),
    )
);
}
}

Тогда в моем случае все, что мне нужно, это поместить этот фрагмент кода в TabBarView

class MyApp extends StatelessWidget {

 // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
  return new MaterialApp(
  title: 'Flutter Demo',
  theme: new ThemeData(
    primarySwatch: Colors.blue,
  ),
  home: new DefaultTabController(
      length: 3,
      child: new Scaffold(
        appBar: new AppBar(
          bottom: new TabBar(tabs: [
            new Tab(icon: new Icon(Icons.home)),
            new Tab(icon: new Icon(Icons.favorite)),
            new Tab(icon: new Icon(Icons.list))
          ]),
          title: new Text("Tabs Demo"),
        ),
        body: new TabBarView(children: [
          new MyHomePage(),
          new ShowSnackBarBtn(),
          new ShowSnackBarIcon(),
        ]),
      )),
);
}
}

Наконец, извините, что исключение не было 'т отправил.Интересно, почему в Android Studion не отображается консоль входа в систему, соединяющая мой телефон?Однако, когда я отлаживал программу в эмуляторе, в консоли показывалось исключение.

0 голосов
/ 22 мая 2018
Add a GlobalKey of the Scaffold state and use that to display SnackBar as below,

GlobalKey<ScaffoldState> scaffoldState = new GlobalKey();

Scaffold(
key: scaffoldState,

....

scaffoldState.currentState.showSnackBar(new SnackBar(content: new Text('Hello!')));

....

);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...