#修正前
import 'package:flutter/material.dart';
import 'package:flutter_location/home.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget{
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body:
Center(
child: RaisedButton(
child: Text('次へ'),
onPressed: (){
Navigator.push(
context,
MaterialPageRoute(builder: (context) => MyHome(),
)
);
},
)
)
),
);
}
}
#エラーコード
Navigator operation requested with a context that does not include a Navigator.
#原因
flutterの公式ドキュメントでは、画面遷移を行う際に、MaterialApp WidgetとScaffol Widgetを別のクラスに分けて書いていました。しかし、私のコードはそれらをまとめて一つのクラスで書いています。それが原因と考えました。
##修正後
import 'package:flutter/material.dart';
import 'package:flutter_location/home.dart';
void main() {
runApp(MySignUp());
}
class MySignUp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'My Location App',
home: MySignUpHome(),
);
}
}
class MySignUpHome extends StatelessWidget{
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: RaisedButton(
child: Text('Next to Home'),
onPressed: (){
Navigator.push(
context,
MaterialPageRoute(builder: (context) => MyHome()),
);
},
)
),
);
}
}
エラーが消え、画面遷移ができました。
#まとめ
公式のチュートリアルではMaterialApp WidgetとScaffold Widgetをまとめて書いてありました。今回なぜ分けなければいけなかったかは、分かっていません、、、
どなたか教えた頂けると助かります。
#参考
Navigator operation requested with a context that does not include a Navigator.エラーの原因