Эта страница на официальном сайте mongodb адресует точно этот вопрос:
http://docs.mongodb.org/ecosystem/tutorial/model-data- for-ruby-on-rails /
Когда мы показываем наш список историй, нам нужно будет показать имя пользователя, разместившего историю. Если бы мы использовали реляционную базу данных, мы могли бы выполнить соединение с пользователями и магазинами и получить все наши объекты в одном запросе. Но MongoDB не поддерживает объединения, и поэтому время от времени требуется бит денормализации. Здесь это означает кеширование атрибута «имя пользователя».
Реляционные пуристы уже чувствуют себя неловко, как будто мы нарушаем какой-то универсальный закон. Но давайте иметь в виду, что коллекции MongoDB не эквивалентны реляционным таблицам; каждая из которых служит уникальной проектной цели. Нормализованная таблица обеспечивает атомный изолированный кусок данных. Однако документ более тесно представляет собой объект в целом. В случае сайта социальных новостей можно утверждать, что имя пользователя является неотъемлемой частью истории, опубликованной.
blockquote>
Объявите 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,
));
}
Возьмите переменную 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
Пожалуйста, уточните это, если это работает для вас.