Как убрать вторую панель приложений во Flutter

Я пытаюсь создать демонстрационное приложение для чата с Flutter. После моего основного экрана я использую Navigator.push, чтобы перейти к экрану деталей. Скриншот проблемы:

Как убрать вторую панель приложений во Flutter

метод сборки 1-го экрана:

@override
 Widget build(BuildContext context) {
return Scaffold(
    appBar: AppBar(
      title: const Text("Chat Thread App"),
      actions: <Widget>[
        IconButton(
          icon: Icon(Icons.settings),
          onPressed: () {
            Navigator.pushNamed(context, '/settings');
          },
        )
      ],
    ),
    body: isLoading
        ? Center(
            child: CircularProgressIndicator(),
          )
        : new ChatThreadListCard(messageThreads: _messageThreadLists, user: _user,),
);
}

код метода Navigator.push:

Navigator.push(context, MaterialPageRoute(
        builder: (context) => ChatDetailsScreen(threadModel: new ThreadModel(
              user.id, 
              user.fullName, 
              user.pic, 
              "otherId", 
              "otherName", 
              "otherPic", 
              post.threadId
            )
          ),
      ),);

метод сборки 2-го экрана, где возникает проблема:

return Scaffold(
  appBar: AppBar(
    title: Text("Chat demo"),
  ),
  body: WillPopScope(
    child: isLoading
        ? Center(
            child: CircularProgressIndicator(),
          )
        : Stack(
            alignment: AlignmentDirectional.bottomCenter,
            children: <Widget>[
              SizedBox(
                width: 300,
                height: 300,
              ),
              Column(
                children: <Widget>[
                  buildChat(),
                  buildInput(),
                ],
              )
            ],
          ),
    onWillPop: onBackPress,
  ),
);

Не вкладывать Scaffold

Günter Zöchbauer 22.01.2019 17:08

не могли бы вы уточнить? я не должен использовать леса на втором экране? если я не использую скаффолд на втором экране, то кнопка «Назад» не появляется.

Star Lut 22.01.2019 17:12

Можете ли вы ввести ошибку, я не вижу изображения, я думаю, что imgur здесь запрещен

stuckedoverflow 22.01.2019 17:28

проблема в том, что когда я не использую Scaffold на втором экране и не перехожу к нему, кнопка «Назад» не отображается. и, когда я использую скаффолд и панель приложений на втором экране, на втором экране есть две панели приложений.

Star Lut 22.01.2019 17:31

@GünterZöchbauer

Star Lut 22.01.2019 17:56
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
5
6 966
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я предполагаю, что что-то не так работает с тем местом, где вы настраиваете Material App?

приложение.дротик:

class App extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        home: HomePage());
  }
}

домашняя_страница и вторая_страница

import 'package:flutter/material.dart';

class HomePage extends StatefulWidget {
  @override
  State createState() => HomePageState();
}

class HomePageState extends State<HomePage> with TickerProviderStateMixin {

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text('First Page'),
        ),
        body: Container(
          child: Center(child: RaisedButton(child: Text('Forward'), onPressed: () async {
            await Navigator.push(context, MaterialPageRoute(builder: (context) => SecondPage()));
          },)),
        ));
  }
}

class SecondPage extends StatefulWidget {
  @override
  State createState() => SecondPageState();
}

class SecondPageState extends State<SecondPage> with TickerProviderStateMixin {

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text('Second Page'),
        ),
        body: Container(
          child: Center(child: RaisedButton(child: Text('Backward'), onPressed: () {
            Navigator.of(context).pop();
          },)),
        ));
  }
}

Что производит:

Navigation Demo

main.dart code: void main() { runApp(MaterialApp( title: 'Chat apps Demo', initialRoute: '/', route: { '/': (context) => SplashScreen(), '/login': ( context) => LoginScreen(), '/home' : (context) => ChatThreadScreen(), '/settings' : (context) => SettingScreen(), })); } после этого: if (isLoggedin){ Navigator.pushReplacementNamed(context, "/home"); }else{ Navigator.pushReplacementNamed(context, "/login"); }

Star Lut 22.01.2019 17:35

извините, не знаю, как добавить туда новую строку. вот ссылка pastebin ссылка на сайт

Star Lut 22.01.2019 17:38

проблема заключается в том, что я создавал виджет MaterialApp в теле скаффолда. поэтому при вызове метода onTap новый экран заменялся областью приложения MaterialApp. не заменили весь экран.

хитрость заключалась в том, чтобы удалить return new MaterialApp().

всем спасибо.

Другие вопросы по теме