Super Cupertino Navigation Bar

Flutter 扩展

Super Cupertino Navigation Bar

自定义您的 iOS 风格导航栏,提升您项目的用户体验。

作为一名欣赏 Cupertino 精致设计的开发者,您不想将这个自定义包添加到您的开发应用中吗?Super Cupertino Navigation Bar 帮助您创建一个 iOS 风格的导航栏,同时允许您添加搜索字段并自定义头像。

浮动的标题 固定的标题 仅标题
普通导航栏浮动 普通导航栏固定

这是从一开始就必需的,我刚刚完成了它。

为什么你应该使用 Super Cupertino Navigation Bar?

  1. iOS 风格导航栏:为您的 iOS 用户提供更熟悉体验。Super Cupertino Navigation Bar 反映了 iOS 设备的原生外观和感觉。

  2. 搜索字段:帮助用户更快、更轻松地在您的应用中查找内容。提供用户搜索能力。

  3. 头像自定义:让用户能够个性化他们的个人资料。自定义头像的添加是识别和定制用户的绝佳方式。

  4. 完美兼容:与 Cupertino 库无缝集成。它与您的 Flutter 应用的其他组件和谐工作。

  5. 过渡动画:使用此扩展,您可以实现页面路由上的所有过渡动画。

好的!让我们深入探讨!

示例。尽情享用!

目录

入门

添加依赖

dependencies:
  super_cupertino_navigation_bar: ^1.0.0

导入包

import 'package:super_cupertino_navigation_bar/super_cupertino_navigation_bar.dart';

易于使用

SuperCupertinoNavigationBar 小部件在其内部包含 CustomScrollView 小部件,因此您应该将子项放在 slivers 键下,其类型为 List。

CupertinoPageScaffold(  //inside CupertinoPageScaffold
  child: SuperCupertinoNavigationBar(
      largeTitleType: AppBarType.LargeTitleWithFloatedSearch, // Set desired AppBarType
      avatarModel: AvatarModel(
        avatarUrl: null,
        avatarIsVisible: true, // Avatar is hidden as default, if you want to set visible, simply set true
        onTap: () => print("some event"),
      ),
      largeTitle: const Text('Home'),
      searchFieldDecoration: SearchFieldDecoration(
          hideSearchBarOnInit: true,
          searchFieldBehaviour: SearchFieldBehaviour.ShowResultScreenAfterFieldInput, // There are 3 SearchFieldBehaviour
      ),
      slivers: [
        // Any Sliver here
      ],
  ),
);

SuperCupertinoNavigationBar 属性

属性 类型 说明
largeTitle Widget 提供 Text 小部件以获得正确的过渡动画
leading Widget 您可以在导航栏左上方添加所需的小部件
automaticallyImplyLeading 布尔值 用于在导航到路由后的第二个屏幕上移除返回按钮
automaticallyImplyTitle 布尔值 如果为 true 且 [largeTitle] 为 null,则自动填充一个 Text() 小部件,其中包含当前路由的标题
alwaysShowMiddle 布尔值 如果您只想在展开状态下显示 [largeTitle] 并在折叠状态下显示 [middle],则应将此值设置为 false
physics ScrollPhysics SuperCupertinoNavigationBar 包含 CustomScrollView。Physic 用于设置 CustomScrollView 的 physics
previousPageTitle 字符串 手动指定上一个路由的标题,当自动暗示后退按钮时
middle Widget 放置在导航栏中间的小部件。通常是标题或分段控件。
trailing Widget 放置在导航栏末尾的小部件。通常是页面上的附加操作,如搜索或编辑功能。
border Border 小部件内容将对齐的方向
backgroundColor 颜色 导航栏的背景颜色。如果包含透明度,则选项卡栏会自动对内容产生模糊效果。如果为 null,则默认为 CupertinoTheme 的 scaffoldBackgroundColor。
collapsedBackgroundColor 颜色 折叠导航栏的背景颜色。如果包含透明度,则选项卡栏会自动对内容产生模糊效果。如果为 null,则默认为 CupertinoTheme 的 barBackgroundColor。
brightness Brightness 指定 backgroundColor 的亮度。设置此值会更改系统状态栏的样式。
padding EdgeInsetsDirectional 导航栏内容的填充。默认值:垂直方向,高度与导航栏本身减去状态栏的高度相同。水平方向,填充为 16 像素
transitionBetweenRoutes 布尔值 设置为 true 以在导航栏之间进行过渡
heroTag Object 如果 transitionBetweenRoutes 为 true,则为导航栏的 Hero 小部件设置标签
stretch 布尔值 这指定了当发生负滚动时的导航栏行为。如果为 true,它会随着滚动内容一起移动。但它在滚动时将是静态的。
slivers List[Widget] SuperCupertinoNavigationBar 包含 CustomScrollView,所以请将所有子项放在此处作为 Sliver Widget,例如 SliverToBoxAdapter 等。
scrollController ScrollController SuperCupertinoNavigationBar 有自己的 scrollController,但如果您想自定义添加 scrollController,可以在此处设置。这将用作主要的 scrollController
appBarType AppBarType (Enum) AppBarType 是一个枚举,它将 Appbar 设置为大标题或普通导航栏,以及是否包含搜索栏。

值: LargeTitleWithPinnedSearch, LargeTitleWithFloatedSearch, LargeTitleWithoutSearch, NormalNavbarWithPinnedSearch, NormalNavbarWithFloatedSearch

searchFieldDecoration SearchFieldDecoration (Model) 这是 Search Field Model,您可以在下面找到更多信息
avatarModel AvatarModel (Model) 这是 Avatar Model,您可以在下面找到更多信息

AppBarType 枚举

AppBarType 值如下;

enum AppBarType {
  LargeTitleWithPinnedSearch,
  LargeTitleWithFloatedSearch,
  LargeTitleWithoutSearch,
  NormalNavbarWithPinnedSearch,
  NormalNavbarWithFloatedSearch,
}

SearchFieldDecoration 属性

属性 类型 说明
控制器 TextEditingController SearchField TextEditingController
onChanged ValueChanged[String] onChange 时获取文本值并执行某些事件
onSubmitted ValueChanged[String] onSubmit 时获取文本值并执行某些事件
placeholderText 字符串 Search Field 占位符文本值
装饰 BoxDecoration 样式化您的搜索字段
keyboardType TextInputType 选择 TextInputType
padding EdgeInsetsGeometry 仅适用水平内边距
prefixIconColor 颜色
placeholderColor 颜色
prefixInsets EdgeInsetsGeometry 前缀图标周围的内边距
prefixIcon Widget 选择所需的图标,默认是 Icon(CupertinoIcons.search)
suffixInsets EdgeInsetsGeometry 后缀图标周围的内边距
suffixIcon Icon 选择所需的图标,默认是 Icon(CupertinoIcons.xmark_circle_fill)
onSuffixTap VoidCallback 不返回任何值。仅清除搜索字段,您可以执行某些事件
onCancelTap VoidCallback 不返回任何值。仅清除搜索字段并取消搜索操作。您也可以执行某些事件
paddingLeft 双精度
paddingRight 双精度
cancelButtonName 字符串
cancelButtonStyle TextStyle
cursorColor 颜色
onFocused ValueChanged[bool] 在搜索字段聚焦时触发所需的事件
hideSearchBarOnInit 布尔值 这仅适用于 LargeTitleWithFloatedSearch 和 NormalNavbarWithFloatedSearch
searchFieldBehaviour SearchFieldBehaviour (Enum) 这指定了结果屏幕的行为。可以设置 3 种行为

ShowResultScreenAfterFieldInput, ShowResultScreenAfterFieldFocused, NeverShowResultScreen。

如下所示

searchResultHeader SearchResultHeader (Widget) 这只是一个模型,需要设置高度和子项属性
searchResultChildren List[Widget] 这会根据 SearchFieldBehaviour 显示。您可以在执行所需操作(如 onChanged、onSubmitted 等)后在此处设置子项。

SearchFieldBehaviour 枚举

SearchFieldBehaviour 值如下;

enum SearchFieldBehaviour {
  ShowResultScreenAfterFieldInput,
  ShowResultScreenAfterFieldFocused,
  NeverShowResultScreen,
}

让我们看看预期的行为;

ShowResultScreenAfterFieldInput ShowResultScreenAfterFieldFocused NeverShowResultScreen

SearchResultHeader

在搜索字段操作后,结果屏幕将出现,在此屏幕上,搜索栏下方您可以放置任何您想要的小部件!看看图片

示例 1 Apple Music 示例 2 Apple Music

const SearchResultHeader({
  super.key,
  required this.height,
  required this.child,
});

AvatarModel 属性

您可以像 Apple Applications 一样设置头像。查看所需模型属性;

属性 类型 说明
avatarUrl 字符串 在此处写入 Image.asset(url) 的 url 字符串
avatarIsVisible 布尔值 默认值为 false
onTap VoidCallback Callback,设置 onTap 事件
avatarIconColor 颜色 头像图标的默认颜色是 CupertinoColors.link
icon IconData 您可以更改默认图标,即 CupertinoIcons.profile_circled

AvatarModel({
  this.avatarUrl,
  this.avatarIsVisible = false,
  this.onTap,
  this.avatarIconColor = CupertinoColors.link,
  this.icon = CupertinoIcons.profile_circled,
});

一些注意事项

  1. 如果您想使用默认导航栏,可以简单地这样使用;

CupertinoPageScaffold(
  navigationBar: DefaultCupertinoNavigationBar( // same as CupertinoNavigationBar but little differencies
  backgroundColor: CupertinoColors.systemGrey.withOpacity(0.5),
  middle: const Text('CupertinoNavigationBar Sample'),
  )
);
  1. 不使用默认导航栏,您可以简单地使用此值来使用 SuperCupertinoNavigationBar 而不使用 largeTitle;

CupertinoPageScaffold(  //inside CupertinoPageScaffold
  child: SuperCupertinoNavigationBar(
    largeTitleType: AppBarType.NormalNavbarWithoutSearch, // This will make appbar like CupertinoNavigationBar
    middle: Text("Home")
    slivers: [
      // Any Sliver here
    ],
  ),
);

在这些情况下,您应该注意您将使用自定义滚动视图和 sliver 小部件。

贡献和提供反馈

如果您希望为该项目做出贡献,请查看我的 GitHub 仓库并报告任何问题或错误。您可以帮助我进一步改进项目!

许可证

此包根据 MIT 许可证授权。有关详细信息,请查看 LICENSE 文件。

GitHub

查看 Github