我的应用程序有一个抽屉,在它里面,我根据一个整数(跟踪索引)改变页面,而不是通过从一个页面导航到另一个页面。我尝试使用AuthomaticKeepAlive,但它确实在那里工作。还有别的办法吗?
您可以使用有状态小部件简单地实现这一点
import 'package:flutter/material.dart';
class SimpleDrawerPage extends StatefulWidget {
const SimpleDrawerPage({Key? key}) : super(key: key);
@override
_SimpleDrawerPageState createState() => _SimpleDrawerPageState();
}
class _SimpleDrawerPageState extends State<SimpleDrawerPage> {
final pagesMenu = ["Home", "Settings"];
int pageIndex = 0;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: Builder(builder: (context) {
switch (pageIndex) {
case 1:
return SettingsPage();
// case 2:
// return SecondPage();
// case 3:
// return ThirdPage();
default:
// here we use [default] for [index 0] ;
return HomePage();
}
}),
drawer: Drawer(
child: ListView.builder(
itemCount: pagesMenu.length,
itemBuilder: (context, index) => ListTile(
title: Text(pagesMenu.elementAt(index)),
tileColor: index == pageIndex ? Colors.teal : null,
onTap: () {
setState(() {
pageIndex = index;
});
},
))),
);
}
}
class HomePage extends StatelessWidget {
const HomePage({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container(child: Center(child: Text('HomePage')));
}
}
class SettingsPage extends StatelessWidget {
const SettingsPage({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container(child: Center(child: Text('SettingsPage')));
}
}
我从另一个问题中得到了答案
有两种方法<<strong> 1方法/strong>第一种方法是在子页面上使用页面视图小部件并使用页面视图控制器来改变页面索引。显然,您必须使用AutomaticKeepAliveStateMixin来维护页面的状态<<strong>第二方法/strong>另一种简单方便的方法是使用indexedStack小部件并为其提供一组子(页面)和当前页面索引。它只是将所有子线程都保存在堆栈中,而不会丢失其状态。