所以我试图使用导航小部件从主页转到关于页面,但突然,我发现在navigator.push中出现异常,显示“发生了异常”。FlutterError(导航器操作请求的上下文不包括导航器。用于从导航器推送或弹出路径的上下文必须是导航器小部件的子小部件的上下文。)”
它说我没有包括导航器,但我显然做了,它还说导航器小部件必须是另一个导航小部件的后代,我不明白这是什么意思。
同样对于上下文,即使在运行代码之后,by editor也没有显示任何语法错误。
代码如下:
import 'package:flutter/material.dart';
// import 'dart:math' as math;
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
backgroundColor: Colors.brown,
title: const Text('Flutter Practice'),
),
body: ElevatedButton(
child: Text('Navigate'),
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (_) => AboutScreen(),
),
);
},
),
),
);
}
}
class AboutScreen extends StatelessWidget {
const AboutScreen({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Colors.blue,
title: const Text('About'),
),
);
}
}
1条答案
按热度按时间oknwwptz1#
您需要确保您使用的
context
是有效的,并且来自Navigator小部件的后代。在代码中,您使用的是MyApp
小部件的build
方法中的context
。但是,由于MyApp
是StatelessWidget
,并且是应用的根,因此它没有Navigator
祖先。要解决这个问题,您可以使用
Builder
小部件 PackageElevatedButton
。Builder
小部件创建一个新的BuildContext
,它是最近的Navigator
祖先的后代。