Flutter: как получить доступ к специальной панели приложений - PullRequest
3 голосов
/ 27 мая 2020

Если вы используете шаблон материала по умолчанию с панелью приложений по умолчанию и открываете приложение с помощью TalkBack, фокус специальных возможностей автоматически перемещается к первому элементу на панели приложений (обычно это кнопка «Назад»).

Я бы хотел, чтобы моя панель приложений была выше, чем стандартная, поэтому я создал собственный и передал его в эшафот:

class CustomAppbar extends StatelessWidget implements PreferredSizeWidget {
  @override
  Widget build(BuildContext context) {
    return Container(
      height: 120,
      child: Semantics(
        focused: true,
        child: RaisedButton(
          child: Text('Test'),
          onPressed: () {},
        ),
      ),
    );
  }

  @override
  Size get preferredSize => Size.fromHeight(120);
}

Widget build(BuildContext context) {
    return Scaffold(
      appBar: CustomAppbar(),
      body: SafeArea(
        child: Stack(children: <Widget>[
          Column(children: <Widget>[
            _buildContent(),
          ]),
        ]),
      ),
    );
  }

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

Как по умолчанию Scaffold обрабатывает автоматический c фокус? Я искал код и не нашел.

1 Ответ

0 голосов
/ 27 мая 2020

Итак, flutter предоставляет нам виджет PreferredSize, в котором мы можем переопределить его высоту и ширину, я решил свою проблему таким образом

 Widget appBar() {
        return PreferredSize(
          preferredSize: Size.fromHeight(120.0),
          child: AppBar(
            automaticallyImplyLeading: false,
            elevation: 0,
            backgroundColor: Colors.blue,
            flexibleSpace: SafeArea(
              child: Container(
                padding: EdgeInsets.only(
                  left: 16,
                  right: 16,
                  top: 16,
                  bottom: 16
                ),
                child: Container(
                  // make any type of view
                ),
              ),
            ),
          ),
        );
      }
...