Как удалить постоянную нижнюю панель навигации из некоторых конкретных маршрутов?

Эта страница на официальном сайте mongodb адресует точно этот вопрос:

http://docs.mongodb.org/ecosystem/tutorial/model-data- for-ruby-on-rails /

Когда мы показываем наш список историй, нам нужно будет показать имя пользователя, разместившего историю. Если бы мы использовали реляционную базу данных, мы могли бы выполнить соединение с пользователями и магазинами и получить все наши объекты в одном запросе. Но MongoDB не поддерживает объединения, и поэтому время от времени требуется бит денормализации. Здесь это означает кеширование атрибута «имя пользователя».

Реляционные пуристы уже чувствуют себя неловко, как будто мы нарушаем какой-то универсальный закон. Но давайте иметь в виду, что коллекции MongoDB не эквивалентны реляционным таблицам; каждая из которых служит уникальной проектной цели. Нормализованная таблица обеспечивает атомный изолированный кусок данных. Однако документ более тесно представляет собой объект в целом. В случае сайта социальных новостей можно утверждать, что имя пользователя является неотъемлемой частью истории, опубликованной.

blockquote>

4
задан NewOnStackoverflow 28 March 2019 в 07:09
поделиться

2 ответа

Объявите variable для bottomNavigationBar content как

var navContent;

Создайте метод для исключения вашего bottomNavigationBar

excludeBottomNavigationBar(){
    return Container(
      height: 0.0,
    );
  } 

Теперь вам нужно назначить контент bottomNavigationBar согласно вашему требованию, исключите bottomNavigationBar для страницы входа

import 'package:flutter/material.dart';
  import './login/login.dart';
  import './alerts/alerts.dart';
  import './home/home.dart';
  import './Theme.dart';
  import './settings/settings.dart';
  import './enroll/enroll.dart';
  import './add_device/add_device.dart';
  import './eachDevice/index.dart';
  import './device_settings/device_settings.dart';
  import 'splash_screen/splash_screen.dart';
  import './geofences/geofence_list.dart';
  import './geofences/draw_geofence.dart';
  import 'package:firebase_messaging/firebase_messaging.dart';
  import './home/second_navigation_bar.dart';
  import 'dart:io';
  import 'package:path/path.dart';
  void main() {
    GlobalKey<NavigatorState> navigator = new GlobalKey<NavigatorState>();
    HttpOverrides.global = new AppHttpOverrides();
    var navContent;

    excludeBottomNavigationBar(){
      return Container(
        height: 0.0,
      );
    }

    Map<String, WidgetBuilder> _routes = <String, WidgetBuilder>{
      "/alerts": (BuildContext context){
        navContent = myBottomNavigationBar();
        new Alerts();
      },
      "/login": (BuildContext context){
        navContent = excludeBottomNavigationBar();
        new LoginPage();
      },
      "/settings": (BuildContext context){
        navContent = myBottomNavigationBar();
        new Settings();
      },
      "/enroll": (BuildContext context){
        navContent = myBottomNavigationBar();
        new Enroll();
      },
      "/add_device": (BuildContext context){
        navContent = myBottomNavigationBar();
        new AddDevice();
      },
      "/history": (BuildContext context){
        navContent = myBottomNavigationBar();
        new History();
      },
      "/home": (BuildContext context){
        navContent = myBottomNavigationBar();
        new Home();
      },
      "/device_settings": (BuildContext context){
        navContent = myBottomNavigationBar();
        new DeviceSettings()
      },
      "/geofence_list": (BuildContext context){
        navContent = myBottomNavigationBar();
        new GeofenceList()
      },
      "/draw_geofence": (BuildContext context){
        navContent = myBottomNavigationBar();
        new DrawGeofence()
      },
    };

    runApp(new MaterialApp(
      navigatorKey: navigator,
      home: new SplashScreen(),
      builder: (context, child) {
        return new Scaffold(
            body: child,
            bottomNavigationBar:navContent,
            resizeToAvoidBottomPadding: false
        );
      },
      theme: buildTheme(),
      routes: _routes,
    ));
  }
0
ответ дан Android Team 28 March 2019 в 07:09
поделиться

Возьмите переменную bool isBottomNavBarToBeShown. Вы можете использовать какую-то функцию для тела в Scaffold, например,

  _getScreen(route) {
    switch (route) {
      case 'route1':
        return Route1();
        break;

      case 'route2':
        return Route2();
        break;

      default:
        break;
    }
  }

, но в вашем случае вы должны изменить

  "/login": (BuildContext context) => new LoginPage(),

на

      "/login": (BuildContext context) { 
               return new LoginPage();
              },
[ 1117] теперь просто установите

    setState(() {
      isBottomNavBarToBeShown=false;
    });

например

case 'route1':
setState(() {
      isBottomNavBarToBeShown=false;
    });
return Route1();
break;

в вашем случае

    "/login": (BuildContext context) { 
               setState(() {
               isBottomNavBarToBeShown=false;
               });
               return new LoginPage();
             },

, поэтому в вашем Scaffold

bottomNavigationBar:myBottomNavigationBar(), просто используйте bottomNavigationBar:isBottomNavBarToBeShown ? myBottomNavigationBar() : null,

Сначала создайте Stateful ] сначала откройте экран и добавьте его в Scaffold. Таким образом, вы можете получить доступ к setState

Пожалуйста, уточните это, если это работает для вас.

0
ответ дан Amol G 28 March 2019 в 07:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: