Вкладка флаттера теряет фокус или не реагирует на нажатие - PullRequest
0 голосов
/ 01 апреля 2019

У меня есть приложение flutter, где главный экран имеет вид tabBar, например:

class MainRoute extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    SystemChrome.setEnabledSystemUIOverlays([SystemUiOverlay.top]);
    return MaterialApp(
      home: DefaultTabController(
        length: 3,
        child: Scaffold(
          body: TabBarView(
            physics: NeverScrollableScrollPhysics(),
            children: [
              Container(
                color: Color.fromRGBO(40, 40, 40, 1.0),
                child: Tab1(),
              ),
              Container(
                color: Color.fromRGBO(40, 40, 40, 1.0),
                child: Tab2(),
              ),
              Container(
                color: Color.fromRGBO(40, 40, 40, 1.0),
                child: Tab3(),
              ),
            ],
          ),
          bottomNavigationBar: TabBar(
            labelStyle: null,
            tabs: [
              Tab(
                icon: Icon(MdiIcons.home),
              ),
              Tab(
                icon: Icon(MdiIcons.settings),
              ),
              Tab(
                icon: Icon(MdiIcons.account),
              )
            ],
            indicatorColor: Colors.transparent,
            labelColor: Color.fromRGBO(255, 255, 255, 1),
            unselectedLabelColor: Color.fromRGBO(255, 255, 255, .3),

          ),
          backgroundColor: Colors.black,
        ),
      ),
    );

И, например, мой Tab3 () выглядит так:

class Tab3 extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => Tab3State();
}

class Tab3State extends State<Tab3> {

  @override
  Widget build(BuildContext context) {
    // TODO: Implement build
    return Scaffold(
      body: Center(
        child: Container(
          padding: EdgeInsets.only(top: 50),
          width: MediaQuery
              .of(context)
              .size
              .width,
          height: MediaQuery
              .of(context)
              .size
              .height,
          color: Colors.white,
          child: Column(
            children: <Widget>[
              Container(
                padding: EdgeInsets.all(10),
                child: RaisedButton(
                  padding: const EdgeInsets.all(20.0),
                  textColor: Colors.white,
                  onPressed: () {
                    print("GAllery tapped");
                  },
                  color: Colors.blue,
                  elevation: 10,
                  child: Text("Gallery"),
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

Приложение работает нормально в эмуляторе, но когда я запускаю на реальном устройстве Adnroid, у него возникает проблема с краном.

Когда отображается MainRoute, если я пытаюсь перейти к последней вкладке, нажав значок, при первом нажатии на него он не распознается (не в фокусе ???) во второй раз и с этого момента работает как положено, то же самое для всех вкладок только при первом нажатии.

Теперь, когда загружено Tab3, кнопка Галерея не распознает первое касание (тоже не в фокусе ???), но затем распознается второе касание, и оно теперь работает.

Это проблема с кодом? проблема с архитектурой кода? проблема с моим реальным устройством (Samsung Galaxy S7)?

1 Ответ

0 голосов
/ 01 апреля 2019

Я не знаю, связано ли это, но у вас не должно быть 2 Scaffold виджетов.Попробуйте удалить один из класса Tab3State, он вам там все равно не нужен.

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