Флаттер: стек - за сценой - TextFormField - проблема с фокусом - PullRequest
0 голосов
/ 04 мая 2018

У меня есть стек из списка виджетов за сценой. Каждый из этих виджетов Offstage ссылается на MaterialApp для отображения формы. Каждая из этих форм содержит несколько TextFormFields.

Проблема, с которой я столкнулся, заключается в том, что первый и второй элементы Offstage TextFormFields никогда не получают фокус (конечно, учитывая правильный сценарий offstage: index).

Для того, чтобы заставить его работать, если я помещаю первый Offstage в третью позицию (то есть сверху), все работает нормально.

Скорее всего, это происходит от понятия стека или от сцены.

Есть ли способ заставить эквивалент " z-index "? Я также пытался использовать IndexedStack, но результат идентичен.

Должен ли я использовать что-то еще, кроме Вне сцены?

Большое спасибо за вашу помощь.

Вот код:

Widget build(BuildContext context) {
    return new Scaffold(
      backgroundColor: Color(0xF4FFFFFF),
      bottomNavigationBar: new Theme(
        data: Theme.of(context).copyWith(
              canvasColor: Colors.amber[700],
              primaryColor: Colors.white,
              textTheme: Theme
                  .of(context)
                  .textTheme
                  .copyWith(caption: new TextStyle(color: Colors.grey[800])),
            ),
        child: new BottomNavigationBar(
            iconSize: 8.0,
            currentIndex: index,
            onTap: (int index) {
              setState(() {
                this.index = index;
              });
            },
             type: BottomNavigationBarType.fixed,
            items: <BottomNavigationBarItem>[
                new BottomNavigationBarItem(
                  title: new Text('Sign In',
                      style: new TextStyle(fontSize: 20.0)),
                  icon: new Container(height: 8.0),
                ),
                new BottomNavigationBarItem(
                  title: new Text('Register',
                      style: new TextStyle(fontSize: 20.0)),
                  icon: new Text('No account yet',
                      style: new TextStyle(fontSize: 10.0)),
                ),
                new BottomNavigationBarItem(
                  title: new Text('lost password',
                      style: new TextStyle(fontSize: 12.0)),
                  icon: new Container(height: 8.0),
                ),
              ]),
      ),
      body: new SafeArea(
        top: false,
        bottom: false,
        child: new Stack(children: <Widget>[
          new Offstage(
              offstage: index != 0,
              child: new MaterialApp(
                home: new LoginForm(),
                debugShowCheckedModeBanner: false,
              )),
          new Offstage(
            offstage: index != 1,
            child: new MaterialApp(
              home: new RegisterForm(),
              debugShowCheckedModeBanner: false,
            ),
          ),
          new Offstage(
            offstage: index != 2,
            child: new MaterialApp(
              home: new LostPasswordForm(),
              debugShowCheckedModeBanner: false,
            ),
          ),
        ]),
      ),
    );
  }

1 Ответ

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

Наткнулся на этот вопрос, пытаясь найти решение аналогичной проблемы. Вы, вероятно, пошли дальше, но я уверен, что это та же проблема, описанная в https://github.com/flutter/flutter/issues/17098. Надеюсь, это поможет кому-то в будущем.

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