【发布时间】:2019-04-01 21:56:46
【问题描述】:
我知道如何解决问题,但我不知道为什么会这样:
我有一个有 2 个屏幕的应用:
这个 main.dart:
import 'package:flutter/material.dart';
import 'HomeActivity.dart';
void main() {
runApp(App());
}
class App extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new HomeActivity();
}
}
HomeActivity.Dart:
import 'package:flutter/material.dart';
import 'AddGameActivity.dart';
class HomeActivity extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
home: new Scaffold(
appBar: AppBar(title: new Text("Home")),
floatingActionButton: FloatingActionButton(
onPressed: () => Navigator.push(context, new MaterialPageRoute(builder: (context) => new AddGameActivity())),
child: new Icon(Icons.add))),
);
}
所以这里我有一个带有 FAB 按钮的屏幕,可以将我导航到 AddGameActivity,当我按下 FAB 按钮时,这是错误消息:
使用不包含导航器的上下文请求导航器操作
现在为了解决这个问题,我将 MaterialApp 添加到 main.dart 并将其从 HomeActivity.dart 中删除,如下所示:
main.dart:
import 'package:flutter/material.dart';
import 'HomeActivity.dart';
void main() {
runApp(App());
}
class App extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(home: HomeActivity());
}
}
家庭活动:
import 'package:flutter/material.dart';
import 'AddGameActivity.dart';
class HomeActivity extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: AppBar(title: new Text("Home")),
floatingActionButton: FloatingActionButton(
onPressed: () => Navigator.push(context, new MaterialPageRoute(builder: (context) => new AddGameActivity())),
child: new Icon(Icons.add)));
}
}
在这种情况下,当我在 main.dart 添加 Material 应用程序时,它可以正常工作,没有任何问题。
所以我的问题是为什么会发生这种情况?在这两种方式中,我都有一个Material app,里面有一个Scaffold!
【问题讨论】:
-
查看 Reimi 的出色回答:stackoverflow.com/a/51292613/666221
-
@diegoveloper 因此,如果我理解正确:在第二个示例中,当我从 main.dart 调用 HomeActivity() 时,我将 main.dart 中 MaterialApp 的上下文传递给 build 方法在 HomeAcitivty.dart 中对吗?
-
是的,没错
-
好的,非常感谢@diegoveloper