Android 颤振:持续应用程序栏,标题不断变化

Android 颤振:持续应用程序栏,标题不断变化,android,ios,flutter,dart,Android,Ios,Flutter,Dart,我正在开发我的第一个颤振应用程序,我正在努力找到解决这个问题的好方法。我的应用程序有多个页面和用户可以选择的不同路线。目前,我正在为这些页面中的每一个重新定义应用程序栏,这并不是什么大不了的事情,因为所有放在应用程序栏上的都是每个页面的标题。我想在应用程序栏上为每个页面放置一个按钮,该按钮将用户返回主页,无论他们在应用程序中的何处。我还需要能够更改不同页面上应用程序栏上的标题。我可以为每个页面重新定义这个导航功能,但直觉告诉我必须有更好的解决方案,因为这违反了DRY原则。提前谢谢 在按下时调用N

我正在开发我的第一个颤振应用程序,我正在努力找到解决这个问题的好方法。我的应用程序有多个页面和用户可以选择的不同路线。目前,我正在为这些页面中的每一个重新定义应用程序栏,这并不是什么大不了的事情,因为所有放在应用程序栏上的都是每个页面的标题。我想在应用程序栏上为每个页面放置一个按钮,该按钮将用户返回主页,无论他们在应用程序中的何处。我还需要能够更改不同页面上应用程序栏上的标题。我可以为每个页面重新定义这个导航功能,但直觉告诉我必须有更好的解决方案,因为这违反了DRY原则。提前谢谢

在按下时调用
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没问题。如果这解决了你的问题,请。完成。我的错,这实际上是我第一次在网上发帖,所以我不知道。非常感谢。