Flutter页面切换时PageB()出现死代码错误,求排查解决
问题分析与解决
错误原因
你将isPageA变量定义在了build方法内部,每次调用setState触发组件重建时,build方法会重新执行,isPageA会被重新赋值为true。这导致isPageA ? PageA() : PageB()的分支永远只会走PageA(),PageB()的代码永远不会被执行,因此IDE将其标记为死代码。
解决方案
把isPageA变量提升为State类的成员变量,这样它的状态会在组件生命周期中被保留,setState修改后的值不会在重建时被重置。
修正后的完整代码
主页面逻辑
class _YourPageState extends State<YourPage> { // 将变量放在State类中作为成员变量 bool isPageA = true; @override Widget build(BuildContext context) { return Scaffold( body: isPageA ? PageA() : PageB(), floatingActionButton: Column( mainAxisAlignment: MainAxisAlignment.end, children: [ SizedBox(height: 10), FloatingActionButton( onPressed: () { setState(() { isPageA = true; }); }, child: Icon(Icons.swap_horiz), ), SizedBox(height: 10), Padding( padding: const EdgeInsets.fromLTRB(0,0,0,50), child: FloatingActionButton( onPressed: () { setState(() { isPageA = false; }); }, child: Icon(Icons.swap_vert), ), ) ], ), ); } }
PageA和PageB组件(无需修改)
class PageA extends StatefulWidget { @override State<PageA> createState() => _PageAState(); } class _PageAState extends State<PageA> { @override Widget build(BuildContext context) { return Center( child: Text("This is Page A"), ); } } class PageB extends StatefulWidget { @override State<PageB> createState() => _PageBState(); } class _PageBState extends State<PageB> { @override Widget build(BuildContext context) { return Center( child: Text("This is Page B"), ); } }
修改后,点击按钮修改isPageA的值时,状态会被正确保留,组件重建时会根据最新值渲染对应页面,PageB()也不会再被标记为死代码。
内容的提问来源于stack exchange,提问作者Michael Ng'ang'a Njoroge
相关产品推荐
相关产品推荐

