Android 颤振:持续应用程序栏,标题不断变化
我正在开发我的第一个颤振应用程序,我正在努力找到解决这个问题的好方法。我的应用程序有多个页面和用户可以选择的不同路线。目前,我正在为这些页面中的每一个重新定义应用程序栏,这并不是什么大不了的事情,因为所有放在应用程序栏上的都是每个页面的标题。我想在应用程序栏上为每个页面放置一个按钮,该按钮将用户返回主页,无论他们在应用程序中的何处。我还需要能够更改不同页面上应用程序栏上的标题。我可以为每个页面重新定义这个导航功能,但直觉告诉我必须有更好的解决方案,因为这违反了DRY原则。提前谢谢 在按下时调用Android 颤振:持续应用程序栏,标题不断变化,android,ios,flutter,dart,Android,Ios,Flutter,Dart,我正在开发我的第一个颤振应用程序,我正在努力找到解决这个问题的好方法。我的应用程序有多个页面和用户可以选择的不同路线。目前,我正在为这些页面中的每一个重新定义应用程序栏,这并不是什么大不了的事情,因为所有放在应用程序栏上的都是每个页面的标题。我想在应用程序栏上为每个页面放置一个按钮,该按钮将用户返回主页,无论他们在应用程序中的何处。我还需要能够更改不同页面上应用程序栏上的标题。我可以为每个页面重新定义这个导航功能,但直觉告诉我必须有更好的解决方案,因为这违反了DRY原则。提前谢谢 在按下时调用N
Navigator.pop()
的AppBar
中添加一个前导的图标按钮。这将使用户返回到最后一页:
AppBar(
leading: IconButton(
icon: Icon(Icons.arrow_back),
onPressed: () => Navigator.pop(context),
),
title: Text('AppBar'),
),
请记住,页面存储在视图堆栈中。使用Navigator.pushNamed()
推送页面时,您将该页面添加到初始页面的顶部。因此,一个简单的pop
将返回主页
这一点在中也有解释
此外,如果您在不首先访问初始页面的情况下直接导航到路由,则初始页面仍会被推送。作为缔约国:
如果路由名称以斜杠开头,则将其视为“深度链接”,在推送此路由之前,也会推送指向此路由的路由。例如,如果路由是/a/b/c,那么应用程序将以四个路由/、/a、/a/b和/a/b/c的顺序开始加载。即使路径仅为/a,应用程序也会以/a和/a加载开始
如果您对路由有任何其他问题,请随时联系我。尝试制作一个包含
import 'package:flutter/material.dart';
class CustomAppBar extends StatelessWidget implements PreferredSizeWidget {
final String appBarText;
CustomAppBar(this.appBarText);
Size get preferredSize => const Size.fromHeight(kToolbarHeight);
@override
Widget build(BuildContext context) {
return AppBar(
centerTitle: true,
title: Text(
appBarText,
),
leading: IconButton(
icon: Icon(
Icons.arrow_back_ios_sharp,
),
onPressed: () => Navigator.pop(context)
),
);
}
}
然后,在任何需要使用自定义应用程序栏的地方导入文件,然后在脚手架中像普通应用程序栏一样使用它
import 'YOUR DIRECTORY/CustomAppBar.dart';
Scaffold(
appBar: CustomAppBar('your title here'),
)
对不起,我可能没有很好地解释我的问题。我知道,为了返回到上一页,您将当前页从导航堆栈中弹出。我的问题是,我需要能够直接返回主页,即使我在导航中有几层,我希望能够通过单击单独定义的应用程序栏上的按钮来实现这一点。我已经定义了这样做的功能,我只需要一种方法将其添加到每个页面的应用程序栏中,而无需为每个页面重新定义应用程序栏。然后,您应该按照@Apg的建议,创建一个小部件,作为每个页面的固定应用程序栏。应用程序栏应该有一个“主页”按钮,可以调用Navigator.pushNamed('/')
将用户返回主页。然后,堆栈上的页面将自动删除以返回主页。这很有效!非常感谢你!我不知道你可以像这样重新定义应用程序栏的功能,所以非常有用。这也让我看到了以类似方式向其他小部件添加功能的可能性。@Jamison没问题。如果这解决了你的问题,请。完成。我的错,这实际上是我第一次在网上发帖,所以我不知道。非常感谢。