我在主屏幕上使用索引堆栈显示不同的屏幕在同一时间。
我的问题是,子部件再次重建,使API调用时,我重新进入任何屏幕。
主屏幕代码:
final _currentPage =
context.select<MenuProvider, int>((provider) => provider.currentPage);
void _onItemTapped(int index) {
Provider.of<MenuProvider>(context, listen: false)
.updateCurrentPage(index);
}
List<MenuItem> mainMenu = [
MenuItem(
AppLocalizations.of(context)!.sd_title,
'Home',
Icons.home,
0,
),
MenuItem(
AppLocalizations.of(context)!.profile_title,
'Profile',
Icons.person,
1,
),
MenuItem(
AppLocalizations.of(context)!.sd_calculator,
'Calculator',
Icons.calculate_rounded,
2,
),
];
var screens = [
mainMenu[_currentPage].index == 0 ? const HomeFragment() : Container(),
mainMenu[_currentPage].index == 1 ? const Profile() : Container(),
mainMenu[_currentPage].index == 2
? LoanCalculatorScreen(isHome: true)
: Container(),
];
var container = Container(
alignment: Alignment.center,
color: Colors.white,
child: FadeIndexedStack(
index: mainMenu[_currentPage].index,
children: screens,
),
);
字符串
脚手架主体采用集装箱。
底部导航:
bottomNavigationBar: BottomNavigationBar(
items: mainMenu
.map(
(item) => BottomNavigationBarItem(
label: item.bottomTitle,
icon: Icon(
item.icon,
),
),
)
.toList(),
currentIndex: _currentPage,
selectedItemColor: Colors.amber[800],
onTap: _onItemTapped,
)
型
主屏幕:在初始化状态下进行呼叫;
@override
void initState() {
var homeData = Provider.of<HomeProvider>(context, listen: false);
homeData.getOffersAndPartnersSlider();
super.initState();
}
型
我使用Provider进行状态管理和API调用。
任何建议都将帮助我编写更好的代码,并取得良好的性能。
我已经尝试过页面视图也发生同样的事情里面的孩子被重建。
我只想调用一次API。
1条答案
按热度按时间vsdwdz231#
为了解决这个问题,我对Pages进行了更改。
Decrement的网页列表上面建立的方法与PageRightKey。
字符串
和调用索引堆栈小部件子级中的页面
型