Как сделать так, чтобы BottomNavigationBar НЕ прилипал к верхней части клавиатуры? - PullRequest
0 голосов
/ 31 марта 2020

Так что я хотел сделать остановку BottomNavigationBar на клавиатуре. Я попытался:

resizeToAvoidBottomPadding: false; (or true both not working), 

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

Вот мой код:

@override
void initState() {
super.initState();

getUser();

//PostController().getUser(widget.auth.getCurrentUser());
pages = [Home(), Search(), NewPostPage(), Notifications(), Profile()];
}

@override
Widget build(BuildContext context) {
return new Scaffold(
   resizeToAvoidBottomPadding: true,
  body: Home(context),
);
}

Widget Home(context) {
var bottomOptions = <BottomNavigationBarItem>[];
for (var i = 0; i < widget.bottomItems.length; i++) {
  var d = widget.bottomItems[i];
  bottomOptions.add(
    new BottomNavigationBarItem(
      icon: d.icon,
      title: Padding(
        padding: const EdgeInsets.fromLTRB(3, 3, 3, 0),
        child: new Text(d.title, style: TextStyle(fontSize: 12.0)),
      ),
    ),
  );
}
return Scaffold(  
  appBar: AppBar(
      title: Text(title),
      leading: Container(
        alignment: Alignment.centerLeft,
        child: IconButton(
            icon: Icon(Icons.motorcycle),
            onPressed: () {
              Navigator.push(
                  context,
                  PageRouteBuilder(
                    pageBuilder: (context, anim1, anim2) => Finder(),
                    transitionsBuilder: (context, anim1, anim2, child) =>
                        FadeTransition(opacity: anim1, child: child),
                    transitionDuration: Duration(seconds: 0),
                  ));
            }),
      ),
  body: isLoading
      ? CollectionScaleTransition(
          children: <Widget>[
            Padding(
              padding: const EdgeInsets.all(2.0),
              child: Icon(Icons.add_circle, size: 10, color: Colors.blue),
            ),
            Padding(
              padding: const EdgeInsets.all(2.0),
              child: Icon(Icons.add_circle, size: 10, color: Colors.blue),
            ),
            Padding(
              padding: const EdgeInsets.all(2.0),
              child: Icon(Icons.add_circle, size: 10, color: Colors.blue),
            ),
          ],
        )
      : PageView(
          controller: pageController,
          children: pages,
          onPageChanged: onPageChanged, 
          physics: NeverScrollableScrollPhysics(), 
        ),
  bottomNavigationBar: BottomNavigationBar(
    showUnselectedLabels: true,
    items: bottomOptions,
    currentIndex: currentIndex,
    selectedFontSize: 9,
    unselectedFontSize: 9,
    type: BottomNavigationBarType.fixed,
    onTap: (index) {
      setState(() {
        onTap(index);
        currentIndex = index;
      });
    },
  ),
);
}
}

Как заставить его перестать появляться, когда я пытаюсь набрать текстовое поле?

Заранее спасибо!

1 Ответ

2 голосов
/ 31 марта 2020

resizeToAvoidBottomPadding собственность устарела. Нам нужно использовать resizeToAvoidBottomInset вместо этого. Подробнее здесь .

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

return Scaffold(
        resizeToAvoidBottomInset: false,
        appBar: AppBar(
        title: Text('test'),
    leading: Container(
    alignment: Alignment.centerLeft,
    child: IconButton(
    icon: Icon(Icons.motorcycle),
    onPressed: () {}),
    )),
        bottomNavigationBar: BottomNavigationBar(
          currentIndex: 0, // this will be set when a new tab is tapped
          items: [
            BottomNavigationBarItem(
              icon: new Icon(Icons.home),
              title: new Text('Home'),
            ),
            BottomNavigationBarItem(
              icon: new Icon(Icons.mail),
              title: new Text('Messages'),
            ),
            BottomNavigationBarItem(
                icon: Icon(Icons.person),
                title: Text('Profile')
            )
          ],
        ),
        body: Center(
            child: TextField(
              keyboardType: TextInputType.text,
              decoration: InputDecoration(
                  border: InputBorder.none,
                  hintText: 'Enter a search term'
              ),
            ))
    );

С кодом выше, когда я нажимаю на текстовое поле, bottom nav не отображается, и я смог правильно набрать .

Надеюсь, это поможет.

enter image description here

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