- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
内底部导航 我有 2 页。第一页从网络加载数据并显示在 SliverList 和显示静态列表数据的另一个页面中。
从第 1 页移动到第 2 页然后第 1 页后,所有网络数据都消失了。我已经使用了 PageStorageKey,但仍然无法正常工作。但第二页从未重新加载。
为什么第一页没有保存其具有 StreamBuilder 的状态?
我的代码:
底部导航页面:
class MainActivity extends StatefulWidget {
@override
_MainActivityState createState() => _MainActivityState();
}
class _MainActivityState extends State<MainActivity> {
final Key keyHome = PageStorageKey('pageHome');
final Key keyChat = PageStorageKey('pageChat');
int currentTab = 0;
HomePage home;
Chat chat;
List<Widget> pages;
Widget currentPage;
final PageStorageBucket bucket = PageStorageBucket();
@override
void initState(){
home = HomePage(
key: keyHome,
);
chat = Chat(
key: keyChat,
);
pages = [home, chat];
currentPage = home;
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: PageStorage(
child: currentPage,
bucket: bucket,),
//Bottom Navigation Bar added
bottomNavigationBar: BottomNavigationBar(
currentIndex: currentTab,
onTap: (int index){
setState(() {
currentTab = index;
currentPage = pages[index];
});
},
type: BottomNavigationBarType.fixed,
items: <BottomNavigationBarItem>[
BottomNavigationBarItem(icon: Icon(Icons.home), title: Text('Home')),
BottomNavigationBarItem(icon: Icon(Icons.chat), title: Text('Chat')),
BottomNavigationBarItem(
icon: Icon(Icons.payment), title: Text('Pay')),
BottomNavigationBarItem(
icon: Icon(Icons.account_circle), title: Text('Me')),
],
//currentIndex: _selectedIndex,
fixedColor: Colors.deepPurple,
),
);
}
}
class _HomePageState extends State<HomePage>{
@override
Widget build(BuildContext context) {
final NewsCatalogBlog newsBloc = BlocProvider.of<NewsCatalogBlog>(context);
//bloc.fetchAllNews();
return Scaffold(
appBar: PreferredSize(child: HomePageGradientAppBar(),
preferredSize: const Size.fromHeight(100.0),),
body: StreamBuilder(
stream: newsBloc.outNewsList,
builder: (context, AsyncSnapshot<List<Data>> snapshot) {
Widget newsList;
newsList = new SliverList(
delegate: new SliverChildBuilderDelegate((context,index){
print("$index");
return NewsListRow(snapshot.data, newsBloc, index);
},
childCount: (snapshot.data == null ? 0 : snapshot.data.length) + 30),
);
return new CustomScrollView(
slivers: <Widget>[
SliverToBoxAdapter(child: TabPanel(),),
SliverToBoxAdapter(child: UrlButtonPanel(),),
SliverToBoxAdapter(child: ChatNowAd(),),
newsList,
],
);
},
),
);
}
}
@override
Widget build(BuildContext context) {
return ListView.builder(
itemExtent: 250.0,
itemCount: 20,
itemBuilder: (context, index) => Container(
padding: EdgeInsets.all(10.0),
child: Material(
elevation: 4.0,
borderRadius: BorderRadius.circular(5.0),
color: index % 2 == 0 ? Colors.cyan : Colors.deepOrange,
child: Center(
child: Text('Mir{$index}'),
),
),
),
);
}
}
最佳答案
更好的方法是使用 索引堆栈 而不是 PageStorage 或 AutomaticKeepAliveClientMixin。
class _MainActivityState extends State<MainActivity> {
int _selectedPage = 0;
List<Widget> pageList = List<Widget>();
@override
void initState() {
pageList.add(HomePage());
pageList.add(ChatPage());
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: IndexedStack(
index: _selectedPage,
children: pageList,
),
//Bottom Navigation Bar added
bottomNavigationBar: BottomNavigationBar(
.....
**
IndexedStack Widget 是 Stack Widget 的子类
关于flutter - BottomNavigationBar 页面更改导致 StreamBuilder 数据重新加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53682579/
我有以下正常工作的代码: 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 图标的选定颜色,但我似乎要实现的只是更改文本颜色。请协助: 目前,选中时文本颜色变为黄色,但图标保持白色,我也希望它是黄色的,并且我尝试将非事件图标的
我是一名优秀的程序员,十分优秀!