Флаттер: за сценой с навигатором внутри не получается - PullRequest
0 голосов
/ 17 января 2019

В моем приложении у меня есть нижняя панель, которая всегда видна. На этом сайте я обнаружил, что хороший способ сохранить вкладки в памяти, в то же время имея несколько навигаторов, - использовать Offscreen. Тем не менее, когда я помещаю Навигатор внутри экрана, ни одно из его содержимого не может получить фокус. Я сделал очень простой пример, который воспроизводит то, что я говорю:

void main() async {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  MyApp({
    Key key,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      home: MyHomeScreen(),
    );
  }
}

class MyHomeScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Container(
      child: Scaffold(
        body: Stack(
          children: [
            Offstage(
              offstage:false,
              child: Navigator(
                onGenerateRoute: (RouteSettings settings) {
                  return MaterialPageRoute(
                    builder: (BuildContext context) {
                      return Center(child: TextField());
                    },
                  );
                },
              ),
            ),

            Offstage(
              offstage:true,
              child: Navigator(
                onGenerateRoute: (RouteSettings settings) {
                  return MaterialPageRoute(
                    builder: (BuildContext context) {
                      return Center(child: TextField());
                    },
                  );
                },
              ),
            ),
          ],
        ),
      ),
    );
  }
}

Если вы нажмете на TextField, он не получит фокус, поэтому пользователь ничего не сможет набрать.

Есть ли способ направить фокус на активный (видимый) экран? Любое другое предложение для этой проблемы?

Спасибо

1 Ответ

0 голосов
/ 17 января 2019

Это актуальная проблема в Github. Чтобы решить эту проблему, вы должны поместить виджет FocusScope поверх каждого навигатора.

Этот комментарий в ветке GH содержит пример: https://github.com/flutter/flutter/issues/17098#issuecomment-414610135

...