【发布时间】:2020-12-06 22:32:04
【问题描述】:
我想使用 Navigator.pushNamed 重定向到另一个页面,但出现错误。
这正是我得到的错误;
The method 'findAncestorStateOfType' was called on null.
Receiver: null
Tried calling: findAncestorStateOfType<NavigatorState>()**
我的代码(我使用 navigatorservice。);
class CalendarPage extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return _CalendarPageState();
}
}
class _CalendarPageState extends State {
@override
Widget build(BuildContext context) {
SystemChrome.setEnabledSystemUIOverlays([SystemUiOverlay.bottom]);
return MaterialApp(
localizationsDelegates: [
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
SfGlobalLocalizations.delegate
],
supportedLocales: [
const Locale('tr'),
],
locale: const Locale('tr'),
home: Scaffold(
body: Container(
child: SfCalendar(
onTap: testOnTap,
view: CalendarView.month,
dataSource: MeetingDataSource(_getDataSource()),
monthViewSettings: MonthViewSettings(
showAgenda: true,
appointmentDisplayMode:
MonthAppointmentDisplayMode.appointment),
),
),
),
);
}
}
导航:
if (reItem == datetest) {
Navigator.pushNamed(
_CalendarPageState().context, CalendarDataGridRoute);
testOnTap:
void testOnTap(CalendarTapDetails details) {
if (details.targetElement == CalendarElement.agenda) {
final dates = <ClickedDate>[];
dates.add(ClickedDate(details.date));
final datetest = dates[0].date.year.toString() +
"-" +
dates[0].date.month.toString() +
"-" +
dates[0].date.day.toString();
List<Meeting> list = _getDataSource();
for (var item in list) {
final reItem = item.baslangic.year.toString() +
"-" +
item.baslangic.month.toString() +
"-" +
item.baslangic.day.toString();
if (reItem == datetest) {
Navigator.pushNamed(
_CalendarPageState().context, CalendarDataGridRoute);
}
}
我可能使用了错误的上下文,你能帮帮我吗?
【问题讨论】:
-
是的,您没有使用正确的上下文。您可以直接将您的上下文作为参数发送吗?
-
当我想将它作为参数发送时,缺少1个参数。但如果我不添加任何参数,它就可以正常工作。 testOnTap(context) = Wants 2 参数(CalendarTapDetails) testOntap =working.
-
你也可以在你的问题中添加 testOnTap 方法吗?
-
我添加了你想要的。