[英]Navigator in MaterialApp - Flutter
我寫了一個簡單的應用程序,當我想在我的build()
使用onPressed
,它會拋出這種類型的錯誤:
Navigator operation requested with a context that does not include a Navigator.
誰能告訴我為什么我不能在onPressed()
使用導航器?
我該如何解決?
@override
Widget build(BuildContext context) {
// double width = MediaQuery.of(context).size.width;
return MaterialApp(
home:Scaffold(
appBar: PreferredSize(
preferredSize: Size.fromHeight(50.0),
child: AppBar(
title: Image(
alignment: Alignment.center,
image: AssetImage('assets/images/logo.png'),
height: 70.0,
),
centerTitle: true,
iconTheme: IconThemeData(color: Color.fromRGBO(9, 133, 46, 100)),
backgroundColor: Colors.white,
actions: <Widget>[
IconButton(
icon: Icon(
Icons.person,
color: Color.fromRGBO(9, 133, 46, 100),
size: 30.0,
),
onPressed: () {
//HERE
Navigator.push(
context,
MaterialPageRoute(builder: (context) => LoginScreen()));
},
),
IconButton(
icon: Icon(
Icons.shopping_cart,
color: Color.fromRGBO(9, 133, 46, 100),
size: 30.0,
),
onPressed: (){
//AND HERE :(
},
),
],
),
),
body: Builder(
...
),
),
),
floatingActionButton: RawMaterialButton(
...
),
drawer: MyDrawer(),
),
);
}
onPressed: _navigate
void _navigate() {
Navigator.push(
context, MaterialPageRoute(builder: (context) => HomeScreen()));
}
我通過創建新類來修復它
class UserIcon extends StatelessWidget{
@override
Widget build(BuildContext context){
return IconButton(
icon: Icon(
Icons.person,
color: Color.fromRGBO(9, 133, 46, 100),
size: 30.0,
),
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => UserPage()));
},
);
}
}
嘗試創建一個名為 Home 的類並將其用作 MaterialApp 中的 home,而不是直接創建一個 Scaffold。 像這樣,
return: MaterialApp(
home: Home(),
);
進而,
class Home extends StatefulWidget {
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: PreferredSize(
preferredSize: Size.fromHeight(50.0),
child: AppBar(
title: Image(
alignment: Alignment.center,
image: AssetImage('assets/images/logo.png'),
height: 70.0,
),
centerTitle: true,
iconTheme: IconThemeData(color: Color.fromRGBO(9, 133, 46, 100)),
backgroundColor: Colors.white,
actions: <Widget>[
IconButton(
icon: Icon(
Icons.person,
color: Color.fromRGBO(9, 133, 46, 100),
size: 30.0,
),
onPressed: () {
//TRY MY ANSWER
Navigator.push(
context,
MaterialPageRoute(builder: (context) => LoginScreen()));
},
),
IconButton(
icon: Icon(
Icons.shopping_cart,
color: Color.fromRGBO(9, 133, 46, 100),
size: 30.0,
),
onPressed: (){
//HOPEFULL IT WORKS :)
},
),
],
),
),
body: Builder(
...
),
),
),
floatingActionButton: RawMaterialButton(
...
),
drawer: MyDrawer(),
),
);
}
}
您收到此錯誤是因為MaterialApp
實際上是MyApp
的子項。 所以當我們使用“上下文”來構建另一個頁面時, MyApp
的BuildContext
不能使用MaterialApp
作為父級。 因此,使用新類通常可以解決此問題!
請告訴它是否不起作用!!!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.