- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在构建一个在底部导航栏中包含 3 个项目的应用。当我更改选项卡时,会呈现一个不同的小部件。到目前为止,还不错...
import 'package:flutter/material.dart';
class BottomTest extends StatefulWidget {
State createState() => new _BottomTestState();
}
class _BottomTestState extends State<BottomTest> {
List<Widget> _pages;
Widget _selectedContent;
int _bottomIndex;
@override
void initState() {
_bottomIndex = 0;
super.initState();
}
@override
Widget build(BuildContext context) {
_definePages();
return Scaffold(
appBar: AppBar(
title: Text('Bottom Navigation Test'),
),
body: _selectedContent ?? _pages[_bottomIndex],
bottomNavigationBar: BottomNavigationBar(
items: [
BottomNavigationBarItem(
icon: Icon(Icons.add),
title: Text("Red")
),
BottomNavigationBarItem(
icon: Icon(Icons.location_on),
title: Text("Blue")
),
BottomNavigationBarItem(
icon: Icon(Icons.people),
title: Text("Green")
)
],
currentIndex: _bottomIndex,
onTap: _onTabTapped,
)
);
}
_definePages() {
_pages = [
Container(
color: Colors.red,
child: Stack(children: <Widget>[
_defineFloatingActionButton(),
])
),
Container(color: Colors.blue),
Container(color: Colors.green),
];
}
_defineFloatingActionButton() {
return Align(
alignment: Alignment.bottomRight,
child: FloatingActionButton(
child: Icon(Icons.add),
onPressed: () {
//TODO: How to navigate to another page with still displaying the bottom navigation bar?
}
),
);
}
void _onTabTapped(int index) {
setState(() {
_bottomIndex = index;
_selectedContent = _pages[index];
});
}
}
//POST
class Post extends StatefulWidget {
State createState() => new _PostState();
}
class _PostState extends State<Post> {
@override
Widget build(BuildContext context) {
return Column(children: <Widget>[
PostHeader(),
Text('This is a post.')
]);
}
}
//POSTHEADER
class PostHeader extends StatefulWidget {
State createState() => new _PostHeaderState();
}
class _PostHeaderState extends State<PostHeader> {
@override
Widget build(BuildContext context) {
return ListTile(
leading: Text('Author'),
onTap: () {
//TODO: This should navigate to another page but still displaying the bottom navigation bar, too.
},
);
}
}
但我想不出更高级导航的最佳实践。我目前面临两个问题。
当在第一页点击 FloatingActionButton 时,我想显示第四页,但 BottomNavigationBar 仍然需要可见和可操作。
构建一个更复杂的应用程序时,我要处理一些嵌套类。所以在我的根页面上,有一个类“Post”,帖子包含一个类“PostHeader”。在 PostHeader 中,有一个带有 onTap 回调的 ListTile 应该会影响我的 _selectedContent。我如何定义这个回调?通过所有不同的类传递它似乎不正确。
我考虑过在我的 BottomTest.dart 中定义它并通过 Post 和 PostTile 传递它,但这对我来说似乎不是最佳实践,尤其是在谈论大量必需的回调时。
非常非常感谢您!
最佳答案
我假设第四页将显示为其他三页中的任何一页,并且由于按钮位于第一页中,因此第四页将取代第一页并且仍然表示第一个底部为“红色” "字段处于事件状态。
如果是这种情况,您应该为第一页创建一个独立的小部件,其中包含显示其他内容所需的所有逻辑。因此,您可以避免重建主要布局,包括 BottomNavigationBar
。
您可以使用 FirstPage
小部件,沿着这些思路使用:
import 'package:flutter/material.dart';
void main() => runApp(new MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Flutter Demo',
theme: new ThemeData(
primarySwatch: Colors.blue,
),
home: new BottomTest(),
);
}
}
class BottomTest extends StatefulWidget {
State createState() => new _BottomTestState();
}
class _BottomTestState extends State<BottomTest> {
List<Widget> _pages;
Widget _selectedContent;
int _bottomIndex;
@override
void initState() {
_bottomIndex = 0;
super.initState();
}
@override
Widget build(BuildContext context) {
_definePages();
return Scaffold(
appBar: AppBar(
title: Text('Bottom Navigation Test'),
),
body: _selectedContent ?? _pages[_bottomIndex],
bottomNavigationBar: BottomNavigationBar(
items: [
BottomNavigationBarItem(icon: Icon(Icons.add), title: Text("Red")),
BottomNavigationBarItem(
icon: Icon(Icons.location_on), title: Text("Blue")),
BottomNavigationBarItem(
icon: Icon(Icons.people), title: Text("Green"))
],
currentIndex: _bottomIndex,
onTap: _onTabTapped,
));
}
_definePages() {
_pages = [
FirstPage(),
Container(color: Colors.blue),
Container(color: Colors.green),
];
}
void _onTabTapped(int index) {
setState(() {
_bottomIndex = index;
_selectedContent = _pages[index];
});
}
}
//POST
class Post extends StatefulWidget {
State createState() => new _PostState();
}
class _PostState extends State<Post> {
@override
Widget build(BuildContext context) {
return Column(children: <Widget>[PostHeader(), Text('This is a post.')]);
}
}
//POSTHEADER
class PostHeader extends StatefulWidget {
State createState() => new _PostHeaderState();
}
class _PostHeaderState extends State<PostHeader> {
@override
Widget build(BuildContext context) {
return ListTile(
leading: Text('Author'),
onTap: () {
//TODO: This should navigate to another page but still displaying the bottom navigation bar, too.
},
);
}
}
class FirstPage extends StatefulWidget {
@override
_FirstPageState createState() => _FirstPageState();
}
class _FirstPageState extends State<FirstPage> {
bool showFirst = true;
_defineFloatingActionButton() {
return Align(
alignment: Alignment.bottomRight,
child: FloatingActionButton(
child: Icon(Icons.add),
onPressed: _onButtonPressed,
),
);
}
_onButtonPressed() {
setState(() {
showFirst = !showFirst;
});
}
_buildFirst() {
return Container(
color: Colors.red,
child: Stack(children: <Widget>[
_defineFloatingActionButton(),
]));
}
_buildFourth() {
return Container(
color: Colors.grey,
child: Stack(children: <Widget>[
_defineFloatingActionButton(),
]));
}
@override
Widget build(BuildContext context) {
return showFirst ? _buildFirst() : _buildFourth();
}
}
对于第二点,也许你应该打开另一个问题,这样你就可以在不同的答案中保留两个或多或少不相关的问题。
关于Flutter BottomNavigationBar 和高级导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52699361/
我有以下正常工作的代码: import 'package:flutter/material.dart'; import 'screen_curiosities.dart'; import 'scree
我在我的应用程序中集成了底部栏导航栏。但是当我滑动时,选项卡的颜色不会改变。这很奇怪,因为我有选择器文件。有解决这个问题的想法吗? Activity.java BottomNavigationView
我想在 BottomNavigationBar 的元素被点击后的一段时间内禁用与它的交互。 我尝试使用 AbsorbPointer 来做到这一点: int _bottomBarIndex = 0;
我正在构建一个在底部导航栏中包含 3 个项目的应用。当我更改选项卡时,会呈现一个不同的小部件。到目前为止,还不错... import 'package:flutter/material.dart';
是的,我的问题是这个。我该怎么做? 我做了一个 BottomNavigationBar,但它看起来像这样。 我的代码是这样的: bottomNavigationBar: BottomNavigatio
我试图弄清楚如何在 BottomNavigationBar 的顶部添加一条非常微妙的黑线,使其开始与其余内容更加不同。 AirBnb 就是一个很好的例子。 有没有办法用 Flutter 实现这一点?
我有一个带有 BottomNavigationBar 的 Android 应用程序,横向模式下有四个菜单项。这些项目像这样在中间聚集在一起: 我想让它们像这样均匀地分布在导航栏上: 如何完成这种格式化
在我的应用程序中,我创建了一个带有 LinearLayout 的自定义 bottomNavigationView。 但我遇到了一个问题,当虚拟键盘出现时,我的自定义 navigationView 并没
我正在使用来自 here 的 BottomNavigationBar .我仔细按照每条说明进行操作,它工作正常,直到我遇到这个问题,即图标从屏幕上弹出,并且它们之间的间隙太大。 Menu_items.
目标: 1) 使状态栏透明 - 完成 2) 使BottomNavigationView 和Navbar 颜色相同。 - 几乎完成 问题 通过在我的 Activity 中添加以下代码,状态栏变得透明。但
我在 flutter 上工作,我制作了一个有 5 个标签的应用程序,使用 BottomNavigationBar,它改变了当前显示的内容。当我点击一个选项卡时,内容会更新为新内容,但选项卡图标不会改变
我在我的 flutter 应用程序中使用 BottomNavigationBar。这是存在 View : 但我需要在项目之间添加分隔符。像这样: 这可能吗?有没有简单的方法来实现这个? 最佳答案 可以
我们可以使用 AppBar 小部件添加标题。 class HomePage extends StatelessWidget { @override Widget build(BuildCont
我正在制作一个带有标签栏的简单应用。我需要将底部导航栏的背景颜色更改为蓝色。应用程序的其余部分应为白色背景,导航栏应为蓝色背景。我该怎么做?在 ThemeData 中设置 canvasColor 无效
我用了bmnav到底部导航栏的实现。这是我的实现。 主.dart class MainWidgetState extends State { @override void initState
我无法让顶部 TabBar 在我的 BottomNavigationBar 中呈现。我只希望顶部 TabBar 显示在首页 BottomNavigationBarItem 内。我知道我可以在主页中设置
我正在用 flutter 创建我的第一个应用,但我遇到了状态管理方面的问题。我有一个带有 BottomNavigationBar 和 body: 带有 tabPages[MainTab, ...] 的
我将 BottomNavigationBar 与 TabController 一起使用。通过单击 BottomNavigationBar 的不同选项卡,TabView 正在更改内容。但是,如果我在 T
我们如何禁用连接到脚手架的 BottomNavigationBar 上的滑动? 我在官方文档中找不到这样做的方法。 最佳答案 明白了: 就用 physics: const NeverScrollabl
我正在尝试更改 BottomNavigation 图标的选定颜色,但我似乎要实现的只是更改文本颜色。请协助: 目前,选中时文本颜色变为黄色,但图标保持白色,我也希望它是黄色的,并且我尝试将非事件图标的
我是一名优秀的程序员,十分优秀!