刚开始的时候,我看到网上说使用AutomaticKeepAliveClientMixin,而且有些flutter的教学视频也是推荐这个,于是找了很多AutomaticKeepAliveClientMixin的使用案例,但是按照网上说的方式,始终没有效果,后面才在网上找到另外一个思路,就是使用IndexedStack来实现。
如下介绍:
在Flutter中,IndexedStack是一个特殊的堆栈组件,它允许你在多个子Widget之间进行切换。与普通的堆栈不同的是,IndexedStack只显示堆栈中的一个子Widget,并且它不会叠加子Widget。这对于实现标签切换效果(如Tab视图)非常有用。
下面是一个简单的使用IndexedStack的例子。在这个例子中,我们将创建一个具有两个页面的简单应用,并通过按钮来切换这两个页面。
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'IndexedStack Demo',
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _currentIndex = 0;
final List<Widget> _pages = [
Center(
child: Text('Page One', style: TextStyle(fontSize: 32.0)),
),
Center(
child: Text('Page Two', style: TextStyle(fontSize: 32.0)),
),
];
void _onItemTapped(int index) {
setState(() {
_currentIndex = index;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('IndexedStack Demo'),
),
body: IndexedStack( // !!!关键就是这个地方!!!!!
index: _currentIndex,
children: _pages,
),
bottomNavigationBar: BottomNavigationBar(
items: const <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: Icon(Icons.home),
label: 'Home',
),
BottomNavigationBarItem(
icon: Icon(Icons.school),
label: 'School',
),
],
currentIndex: _currentIndex,
onTap: _onItemTapped,
),
);
}
}
这个例子创建了一个具有两个页面的应用,并且使用了BottomNavigationBar作为导航栏。当用户点击导航栏上的项目时,_onItemTapped方法会被调用,这将改变_currentIndex变量的值。IndexedStack会根据这个索引显示相应的页面。请注意,_pages列表包含了所有要切换的页面。
你可以根据需要修改这个例子,增加更多的页面或者改变页面的内容。希望这个例子对你有所帮助!