Flutter共享Drawer导航报错:Navigator上下文异常求助
执行Drawer内的导航操作时,抛出以下异常:
FlutterError (Navigator operation requested with a context that does not include a Navigator.
The context used to push or pop routes from the Navigator must be that of a widget that is a descendant of a Navigator widget.)
我有一个继承自StatelessWidget的共享Drawer,所有页面都通过Scaffold加载该Drawer(所有页面均以Scaffold开头,应用以MaterialApp启动)。尝试过直接pop路由、用Builder包装导航按钮等多种修复方法,但都无效。
Drawer代码
import 'package:arcadious/home.dart'; import 'package:flutter/material.dart'; class ArcadiousDrawer extends StatelessWidget { const ArcadiousDrawer({super.key}); @override Widget build(BuildContext context) { return Drawer( child: ListView( padding: EdgeInsets.zero, children: <Widget>[ SizedBox( height: 100, child: DrawerHeader( decoration: const BoxDecoration(color: Color.fromARGB(255, 10, 10, 10)), child: Center( child: Container( padding: const EdgeInsets.all(0), child: Image.asset('assets/arcadious_logo.png', fit: BoxFit.contain), ), ), ), ), Builder(builder: (context) => ListTile( title: const Text( '- HOME', style: TextStyle( fontFamily: 'Outfit', fontWeight: FontWeight.w700, color: Colors.white, fontSize: 22, ), ), onTap: () { final ScaffoldState scaffoldState = context.findRootAncestorStateOfType<ScaffoldState>()!; scaffoldState.closeDrawer(); Navigator.pushAndRemoveUntil( context, MaterialPageRoute(builder: (context) => const HomeScreen()), (Route<dynamic> route) => false, ); }, ),), ], ), ); } }
Header代码(用于打开Drawer)
import 'package:flutter/material.dart'; class Header extends StatelessWidget { const Header({super.key}); @override Widget build(BuildContext context) { return Container( margin: const EdgeInsets.only(bottom: 10), padding: const EdgeInsets.only(bottom: 15), decoration: const BoxDecoration( border: Border(bottom: BorderSide(width: 1, color: Colors.grey, style: BorderStyle.solid)) ), child: Row( children: <Widget>[ Expanded( child: Align( alignment: Alignment.centerLeft, child: SizedBox( width: 23, height: 23, child: GestureDetector( onTap: () { final ScaffoldState scaffoldState = context.findRootAncestorStateOfType<ScaffoldState>()!; scaffoldState.openDrawer(); }, child: Image.asset('assets/hamburger.png', fit: BoxFit.contain), ), ), ), ), Expanded( child: SizedBox( width: 25, height: 25, child: Image.asset('assets/arcadious_logo.png', fit: BoxFit.contain), ), ), Expanded( child: Align( alignment: Alignment.centerRight, child: SizedBox( width: 25, height: 25, child: Image.asset('assets/avatar.png', fit: BoxFit.contain), ), ), ), ], ), ); } }
补充说明:该Drawer所在的页面都包含Scaffold,且根页面嵌套在MaterialApp中。
内容的提问来源于stack exchange,提问作者Arcadious Wade
相关产品推荐
相关产品推荐

