我的main.dart中有一个TabBarView,每个选项卡都有一个类来显示内容(它是listview对象),当我在两个选项卡之间移动时,每次都会刷新listview页面,对于tabbarview来说正常吗?我不希望它在每次进入选项卡时都会刷新。
这是我班上的问题吗?如何解决这个问题?代码是这样的。
class ListWidget extends StatefulWidget {
final catID;
ListWidget(this.catID);
_ListWidgetState createState() => new _ListWidgetState(catID);
}
class _ListWidgetState extends State<ListWidget> {
var catID;
void initState() {
super.initState();
_fetchListData();
}
@override
Widget build(BuildContext context) {
// TODO: implement build
return new Scaffold(.......
}
答案 0 :(得分:3)
MahMoos是正确的,但是在这里举个例子是很好的……
`
class ListWidget extends StatefulWidget {
@override
_ListWidgetState createState() => _ListWidgetState();
}
class _ListWidgetState extends State<ListWidget> with
AutomaticKeepAliveClientMixin<ListWidget>{ // ** here
@override
Widget build(BuildContext context) {
return Container();
}
@override
bool get wantKeepAlive => true; // ** and here
}
答案 1 :(得分:1)
如果我对您的理解很好,则您抱怨刷新,因为在选项卡之间移动后,需要视图来保存其状态。在这个问题上有一个open issue,并且有一种方法可以解决注释中提到的这个问题。
答案 2 :(得分:0)
如果您希望在更改Tab时不刷新Tab视图数据,则应使用
AutomaticKeepAliveClientMixin
class BaseScreen extends StatefulWidget {
BaseScreen(this.title, this.listener, {Key key}) : super(key: key);
}
class BaseScreenState extends State<BaseScreen> with AutomaticKeepAliveClientMixin {
@override
Widget build(BuildContext context) {
screenWidth = MediaQuery.of(context).size.width;
screenHeight = MediaQuery.of(context).size.height;
primaryColor = Theme.of(context).primaryColor;
textTheme = Theme.of(context).textTheme;
return Scaffold(
key: scaffoldKey,
appBar: getAppBar(),
body: Container(),
);
}
@override
bool get wantKeepAlive => true;
}
我遇到了同样的问题,this tutorial帮助了我。
快乐编码。
答案 3 :(得分:0)
为此:在我们的国家使用mixin
和AutomaticKeepAliveClientMixin
。
实施:bool get wantKeepAlive => true;
注意:在此示例中,wantKeepAlive => true
代表第一个标签,wantKeepAlive => false
代表第二个标签。这样您就可以很好地了解其工作原理。
class ResidentListScreen extends StatefulWidget {
@override
_ResidentListScreenState createState() => _ResidentListScreenState();
}
class _ResidentListScreenState extends State<ResidentListScreen> with
AutomaticKeepAliveClientMixin<ResidentListScreen>{
@override
bool get wantKeepAlive => true;
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
}
}