Flutter自带的AppBar需要带导航的context
Flutter own AppBar needs context with navigation
我通过教程制作了一个带有渐变颜色的应用栏。但是现在我不能使用按钮导航到我的设置视图。该按钮需要上下文。你能帮我解决这个问题吗?谢谢!
class MyAppBar extends AppBar {
MyAppBar({Key key, Widget title})
: super(
key: key,
title: title,
centerTitle: true,
flexibleSpace: Container(
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topLeft,
end: Alignment.bottomRight,
colors: <Color>[
Color.fromRGBO(255, 120, 84, 1),
Color.fromRGBO(236, 10, 131, 1)
])
)),
actions: <Widget>[
new IconButton(
icon: new Icon(Icons.notifications),
onPressed: ()=> print("tap"),
),
new IconButton(
icon: new Icon(Icons.settings),
onPressed: () => Navigator.pushReplacementNamed(context, Settings.id),
)
]);
}
您需要扩展一个 StatelessWidget 来获取您的 BuildContext,然后实现 PreferredSizeWidget,因为 AppBar 本身实现了它。
class MyAppBar extends StatelessWidget implements PreferredSizeWidget {
final String screenTitle;
MyAppBar({@required this.screenTitle});
@override
Widget build(BuildContext context) {
return AppBar(
title: Text(screenTitle),
actions: // Whatever you need
);
}
@override
Size get preferredSize => Size.fromHeight(kToolbarHeight);
}
您还需要覆盖 get preferredSize 并指定高度。在这个例子中,我为 AppBar 的工具栏组件使用了 Flutter 已经指定的常量 56.0。
您可以将新参数传递给您的 MyAppBar({Key key, Widget title}) 作为上下文:
MyAppBar({Key key, Widget title, BuildContext context})
然后在 MyAppBar 中使用它。
使用 Navigator.pushReplacementNamed(context, "some.path") 时,它会帮我完成工作
您必须在 MyAppBar class 定义中添加此类参数并使其成为必需的
我通过教程制作了一个带有渐变颜色的应用栏。但是现在我不能使用按钮导航到我的设置视图。该按钮需要上下文。你能帮我解决这个问题吗?谢谢!
class MyAppBar extends AppBar {
MyAppBar({Key key, Widget title})
: super(
key: key,
title: title,
centerTitle: true,
flexibleSpace: Container(
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topLeft,
end: Alignment.bottomRight,
colors: <Color>[
Color.fromRGBO(255, 120, 84, 1),
Color.fromRGBO(236, 10, 131, 1)
])
)),
actions: <Widget>[
new IconButton(
icon: new Icon(Icons.notifications),
onPressed: ()=> print("tap"),
),
new IconButton(
icon: new Icon(Icons.settings),
onPressed: () => Navigator.pushReplacementNamed(context, Settings.id),
)
]);
}
您需要扩展一个 StatelessWidget 来获取您的 BuildContext,然后实现 PreferredSizeWidget,因为 AppBar 本身实现了它。
class MyAppBar extends StatelessWidget implements PreferredSizeWidget {
final String screenTitle;
MyAppBar({@required this.screenTitle});
@override
Widget build(BuildContext context) {
return AppBar(
title: Text(screenTitle),
actions: // Whatever you need
);
}
@override
Size get preferredSize => Size.fromHeight(kToolbarHeight);
}
您还需要覆盖 get preferredSize 并指定高度。在这个例子中,我为 AppBar 的工具栏组件使用了 Flutter 已经指定的常量 56.0。
您可以将新参数传递给您的 MyAppBar({Key key, Widget title}) 作为上下文: MyAppBar({Key key, Widget title, BuildContext context}) 然后在 MyAppBar 中使用它。 使用 Navigator.pushReplacementNamed(context, "some.path") 时,它会帮我完成工作 您必须在 MyAppBar class 定义中添加此类参数并使其成为必需的