Flutter自定义修复滚动应用栏插件scroll_app_bar_2_0_0_custom_fix的使用

发布于 1周前 作者 sinazl 来自 Flutter

Flutter 自定义修复滚动应用栏插件 scroll_app_bar_2_0_0_custom_fix 的使用

隐藏或显示应用栏

通过此插件,您可以根据滚动行为隐藏或显示应用栏。该插件无需自定义滚动视图或 Sliver,因此可以轻松地将其与 Scaffold 结合使用。

效果展示

  • 简单滚动效果 n1

  • 快速滚动效果(Snap 行为) n2

路线图

这是当前路线图,欢迎随时提出您的建议或更改:

功能 进度
简单滚动
快速滚动
锁定/解锁
渐变背景
透明背景

注意: 建议结合 scroll_bottom_navigation_bar 插件使用以获得更好的用户体验。查看示例

使用方法

开始使用

首先,在项目中添加 scroll_app_bar 包。您可以参考以下步骤进行安装:

dependencies:
  scroll_app_bar: ^2.0.0
基本实现

首先,需要一个 ScrollController 实例:

final controller = ScrollController(); 

此控制器用于获取该插件的主要功能。您需要将它传递给 ScrollAppBar 的控制器,并在 ListView 中也设置相同的控制器。否则,您只会得到一个普通的应用栏。

示例如下:

@override
Widget build(BuildContext context) {
  return Scaffold(
    appBar: ScrollAppBar(
      controller: controller, // 注意这里的控制器
      title: Text("App Bar"),
    ),
    body: ListView.builder(
      controller: controller, // 控制器同样在这里
      itemCount: 100,
      itemBuilder: (context, index) {
        return ListTile(title: Text('Item $index'));
      },
    ),
  );
}
快速滚动(Snap 行为)

要启用快速滚动效果,只需将主滚动部件包裹在 Snap 小部件中并附上控制器:

@override
Widget build(BuildContext context) {
  return Scaffold(
    appBar: ScrollAppBar(
      controller: controller, // 注意这里的控制器
      title: Text("App Bar"),
    ),
    body: Snap(
      controller: controller, // 控制器同样在这里
      child: ListView.builder(
        controller: controller, // 控制器同样在这里
        itemCount: 100,
        itemBuilder: (context, index) {
          return ListTile(title: Text('Item $index'));
        },
      ),
    ),
  );
}
完整示例

完整的示例代码如下:

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

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final ScrollController controller = ScrollController();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: ScrollAppBar(
        controller: controller,
        title: Text("App Bar"),
      ),
      body: Snap(
        controller: controller,
        child: ListView.builder(
          controller: controller,
          itemCount: 100,
          itemBuilder: (context, index) {
            return ListTile(title: Text('Item $index'));
          },
        ),
      ),
    );
  }
}

API 参考

// 返回栏的总高度
controller.appBar.height;

// 不可见高度因子的通知器
controller.appBar.heightNotifier;

// 锁定状态变化的通知器
controller.appBar.isPinned;

// 返回 [true] 如果栏被锁定,否则返回 [false]
controller.appBar.pinNotifier;

// 设置新的锁定状态
controller.appBar.setPinState(state);

// 切换锁定状态
controller.appBar.tooglePinState();

// 释放资源
controller.appBar.dispose();

更多关于Flutter自定义修复滚动应用栏插件scroll_app_bar_2_0_0_custom_fix的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter自定义修复滚动应用栏插件scroll_app_bar_2_0_0_custom_fix的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,关于使用 scroll_app_bar_2_0_0_custom_fix 这个 Flutter 插件来实现自定义修复滚动应用栏的功能,下面是一个简单的代码示例。请注意,这个插件可能是一个特定版本的修复或自定义版本,所以假设你已经将这个插件添加到了你的 pubspec.yaml 文件中。

首先,确保你的 pubspec.yaml 文件中包含了这个插件的依赖项:

dependencies:
  flutter:
    sdk: flutter
  scroll_app_bar_2_0_0_custom_fix: ^x.y.z  # 替换为实际的版本号

然后,运行 flutter pub get 来获取依赖项。

接下来,是一个简单的 Flutter 应用示例,展示了如何使用这个插件来实现自定义的滚动应用栏:

import 'package:flutter/material.dart';
import 'package:scroll_app_bar_2_0_0_custom_fix/scroll_app_bar.dart'; // 根据实际包路径调整

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Custom Scroll App Bar Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: CustomScrollAppBarDemo(),
    );
  }
}

class CustomScrollAppBarDemo extends StatefulWidget {
  @override
  _CustomScrollAppBarDemoState createState() => _CustomScrollAppBarDemoState();
}

class _CustomScrollAppBarDemoState extends State<CustomScrollAppBarDemo> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: NestedScrollView(
        headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {
          return <Widget>[
            SliverAppBar(
              expandedHeight: 200.0,
              floating: true,
              pinned: true,
              flexibleSpace: FlexibleSpaceBar(
                centerTitle: true,
                title: Text('Custom Scroll App Bar'),
                background: Image.network(
                  'https://via.placeholder.com/1500x500',
                  fit: BoxFit.cover,
                ),
              ),
            ),
            // 这里可以添加其他Sliver组件,比如SliverPersistentHeader等
          ];
        },
        body: Builder(
          builder: (BuildContext context) {
            return CustomScrollView(
              slivers: <Widget>[
                SliverPadding(
                  padding: const EdgeInsets.all(8.0),
                  sliver: SliverFixedExtentList(
                    itemExtent: 50.0,
                    delegate: SliverChildBuilderDelegate(
                      (BuildContext context, int index) {
                        return ListTile(
                          title: Text('Item $index'),
                        );
                      },
                      childCount: 20,
                    ),
                  ),
                ),
              ],
            );
          },
        ),
      ),
    );
  }
}

在这个示例中,我们使用了 NestedScrollViewSliverAppBar 来创建一个可滚动的应用栏。NestedScrollView 允许我们有一个复杂的头部(比如包含图片和标题),并且当内容滚动时,头部可以响应滚动事件。

需要注意的是,由于 scroll_app_bar_2_0_0_custom_fix 是一个自定义或修复版本的插件,具体的API和用法可能会有所不同。上述代码是一个标准的 Flutter 滚动应用栏实现,如果你需要利用该插件提供的特定修复或功能,你可能需要参考该插件的文档或源代码来了解如何使用。

如果 scroll_app_bar_2_0_0_custom_fix 提供了额外的API或修复,比如更灵活的滚动行为或特定的布局修复,你可能需要在 SliverAppBar 或其他相关组件上应用这些特性。建议查阅该插件的官方文档或源代码以获取更多信息。

回到顶部