Flutter自动隐藏AppBar插件app_bar_auto_hide的使用

Flutter自动隐藏AppBar插件app_bar_auto_hide的使用

AppBar自动隐藏

一个为Flutter提供的可自定义的AppBarAutoHide组件,允许根据滚动事件自动隐藏或显示AppBar。这非常适合通过最大化屏幕空间来增强用户体验。

特性

  • 自动隐藏和显示:根据滚动方向自动隐藏和显示AppBar。
  • 平滑动画:使用淡入淡出和大小变化的动画效果。
  • 完全可定制化:可以匹配你的应用设计。

20250113_235040

开始使用

在你的pubspec.yaml文件中添加以下依赖:

dependencies:
  app_bar_auto_hide: ^0.0.1 # 替换为实际版本号

然后运行:

flutter pub get

使用方法

将你的AppBar包裹在AppBarAutoHide中,并提供一个监听滚动事件的ValueNotifier<ScrollNotification?>

class Screen1 extends StatefulWidget {
  const Screen1({super.key});

  [@override](/user/override)
  State<Screen1> createState() => _Screen1State();
}

class _Screen1State extends State<Screen1> {
  final ValueNotifier<ScrollNotification?> _notifier = ValueNotifier(null);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBarAutoHide(
        notifier: _notifier,
        title: Text('自动隐藏AppBar'),
        autoHideThreshold: 100.0, // 滚动距离超过此值时隐藏AppBar
        animationDuration: Duration(milliseconds: 200), // 隐藏/显示动画时长
      ),
      body: NotificationListener<ScrollNotification>(
        onNotification: (notification) {
          _notifier.value = notification;
          return true;
        },
        child: ListView.builder(
          itemCount: 100,
          itemBuilder: (context, index) {
            return Padding(
              padding: const EdgeInsets.all(10.0),
              child: SizedBox(
                height: 100,
                width: double.infinity,
                child: Card(
                  color: Colors.primaries[index % Colors.primaries.length],
                  child: ListTile(
                    title: Text('项目 $index'),
                  ),
                ),
              ),
            );
          },
        ),
      ),
    );
  }

  [@override](/user/override)
  void dispose() {
    _notifier.dispose();
    super.dispose();
  }
}

更多关于Flutter自动隐藏AppBar插件app_bar_auto_hide的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter自动隐藏AppBar插件app_bar_auto_hide的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


app_bar_auto_hide 是一个 Flutter 插件,它可以帮助你在滚动内容时自动隐藏或显示 AppBar。这在创建具有沉浸式体验的应用程序时非常有用,特别是在处理长列表或可滚动内容时。

安装插件

首先,你需要在 pubspec.yaml 文件中添加 app_bar_auto_hide 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  app_bar_auto_hide: ^1.0.0  # 请检查最新的版本号

然后运行 flutter pub get 来安装插件。

使用 app_bar_auto_hide

app_bar_auto_hide 提供了一个 AutoHideAppBar 小部件,你可以将它放在 ScaffoldappBar 属性中。以下是一个简单的示例:

import 'package:flutter/material.dart';
import 'package:app_bar_auto_hide/app_bar_auto_hide.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Auto Hide AppBar Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: AutoHideAppBarExample(),
    );
  }
}

class AutoHideAppBarExample extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AutoHideAppBar(
        title: Text('Auto Hide AppBar'),
      ),
      body: ListView.builder(
        itemCount: 50,
        itemBuilder: (context, index) {
          return ListTile(
            title: Text('Item $index'),
          );
        },
      ),
    );
  }
}

参数说明

AutoHideAppBar 提供了多个参数来自定义行为:

  • title: AppBar 的标题,通常是一个 Text 小部件。
  • leading: AppBar 左侧的按钮,通常是返回按钮。
  • actions: AppBar 右侧的操作按钮列表。
  • elevation: AppBar 的阴影高度。
  • backgroundColor: AppBar 的背景颜色。
  • iconTheme: AppBar 中图标的主题。
  • textTheme: AppBar 中文本的主题。
  • centerTitle: 是否将标题居中。
  • hideOnScroll: 是否在滚动时隐藏 AppBar,默认为 true
  • showOnScrollUp: 是否在向上滚动时显示 AppBar,默认为 true
  • scrollController: 可以传入一个自定义的 ScrollController,以便控制滚动行为。

自定义滚动行为

如果你想要更精细地控制 AppBar 的显示和隐藏行为,可以通过 scrollController 参数传入一个自定义的 ScrollController,并在其监听器中实现自定义逻辑。

class AutoHideAppBarExample extends StatefulWidget {
  [@override](/user/override)
  _AutoHideAppBarExampleState createState() => _AutoHideAppBarExampleState();
}

class _AutoHideAppBarExampleState extends State<AutoHideAppBarExample> {
  final ScrollController _scrollController = ScrollController();

  [@override](/user/override)
  void initState() {
    super.initState();
    _scrollController.addListener(() {
      // 自定义逻辑
    });
  }

  [@override](/user/override)
  void dispose() {
    _scrollController.dispose();
    super.dispose();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AutoHideAppBar(
        title: Text('Auto Hide AppBar'),
        scrollController: _scrollController,
      ),
      body: ListView.builder(
        controller: _scrollController,
        itemCount: 50,
        itemBuilder: (context, index) {
          return ListTile(
            title: Text('Item $index'),
          );
        },
      ),
    );
  }
}
回到顶部