flutter - Navigator.push 中未定义的上下文
问题描述
我正在创建一个可以跨多个页面使用的自定义 AppBar。customappbar.dart
class CustomAppBar extends AppBar {
CustomAppBar({Key key, Widget title})
: super(
key: key,
title: title,
actions: <Widget>[
IconButton(
icon: Icon(Icons.directions_car),
onPressed: () {
Navigator.push(
context, //UNDEFINED
MaterialPageRoute(
builder: (context) => NewPage(),
),
);
},
),
],
);
}
这是它要去的地方的一个例子。newpage.dart
class _ NewPageState extends State<NewPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: CashOnHandAppBar(
title: Text('New Page'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[],
),
),
);
}
}
上下文越来越不确定。缺少构建方法吗?
解决方案
您正在扩展 AppBar 类,它不适用于自定义 appbar 您必须扩展 StatelessWidget 并为自定义 appbar 实现 PreferredSizeWidget 类这是自定义 appbar 的工作示例:-
import 'package:flutter/material.dart';
class SimpleAppBar extends StatelessWidget implements PreferredSizeWidget {
final String _title;
final bool centerTitle;
SimpleAppBar(this._title, {this.centerTitle = false, Key key})
: preferredSize = Size.fromHeight(56.0),
super(key: key);
@override
final Size preferredSize; // default is 56.0
@override
Widget build(BuildContext context) {
return AppBar(
title: Text(_title),
centerTitle: centerTitle,
);
}
}
而不是直接将函数添加到自定义appbar中,而是将函数引用传递给类构造函数需要传递下面的函数添加引用:-
onPressed: () {
Navigator.push(
context, //UNDEFINED
MaterialPageRoute(
builder: (context) => NewPage(),
),
推荐阅读
- android - 为纵向模式设计的android应用程序在恢复时以横向显示
- rust - 是否可以为由所有实现该特征的类型组成的任何元组自动实现特征?
- javascript - 执行捆绑时使用相应子包的模块
- mysql - 插入新行后事件无法正常工作
- flutter - 如何在每次点击时播放相同的 Flare 动画?
- java - 如何在junit测试中跳过从抽象类调用超级方法?
- c# - 将网络浏览器控件和工具条放在用户控件中...无法从主窗体控制它们
- html - 针对同一父级中特定元素的第一个子级
- jasmine - 不在下拉列表中选择正确的选项
- function - Julia:为什么“未定义”,当在 for 循环中调用函数来更新矩阵时