我正在尝试将我的整个应用程序嵌入到 AppBar 和页脚中。所以我尝试为我的 MaterialApp 提供一个自定义构建器,它看起来像这样(为了清晰起见,我用按钮替换了页脚和应用栏)
import 'package:epicture/scenes/Landing.dart';
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'My App',
initialRoute: '/',
builder: (context, child) => Container(
child: FlatButton(
child: Text('Click me'),
onPressed: () => Navigator.of(context).pushNamed('/app'),
)),
// In my current code
builder: (context, child) => Embedder(child),
routes: <String, WidgetBuilder>{
'/': (context) => Landing(),
'/app': (context) => Text('My App !'),
},
);
}
}
Run Code Online (Sandbox Code Playgroud)
但是在按下“单击我”按钮时,会出现一个错误,指出上下文没有导航器
the context used to push or pop routes from the Navigator must be that of a widget that is a descendant of a Navigator widget
但实际上,该按钮是一个页脚,可以单击以从每个页面更改页面。
我想知道如何从自定义构建器访问导航器,如果我只是朝着错误的方式在我的应用程序的每个页面(页脚 + 页眉)中使用相同的模式
Hem*_*Raj 14
您无法从内部访问Navigator,因为由此返回的任何小部件都将成为导航器的父级。contextbuilderbuilder
那么,我该怎么办?我可以在这里访问导航器,如何访问?
是的!您可以创建一个GlobalKey并将其传递给您的MaterialApp. 然后使用该密钥访问Navigator您的builder.
例子:
import 'package:epicture/scenes/Landing.dart';
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
final GlobalKey<NavigatorState> _navigator = GlobalKey<NavigatorState>();
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'My App',
initialRoute: '/',
navigatorKey: _navigator,
builder: (context, child) {
return Container(
child: FlatButton(
child: Text('Click me'),
onPressed: () => _navigator.currentState.pushNamed('/app'),
),
);
},
routes: <String, WidgetBuilder>{
'/': (context) => Landing(),
'/app': (context) => Text('My App !'),
},
);
}
}
Run Code Online (Sandbox Code Playgroud)
希望有帮助!
Rod*_*tos -4
将此上下文变量重命名为其他名称
builder: (context, child)
Run Code Online (Sandbox Code Playgroud)
您在此处使用的上下文出现名称冲突:
onPressed: () => Navigator.of(context).pushNamed('/app'),
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2867 次 |
| 最近记录: |