Flutter嵌套滚动视图插件extended_nested_scroll_view_plus的使用

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

Flutter嵌套滚动视图插件extended_nested_scroll_view_plus的使用

extended_nested_scroll_view_plus 是一个强大的 Flutter 插件,用于实现复杂的嵌套滚动视图。该插件基于 fluttercandies/extended_nested_scroll_view 进行了扩展,提供了更多的功能和更好的性能。

安装插件

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

dependencies:
  extended_nested_scroll_view_plus: ^0.0.1

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

基本使用

以下是一个简单的示例,展示了如何使用 extended_nested_scroll_view_plus 实现一个包含多个子滚动视图的主滚动视图。

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Nested Scroll View Example')),
        body: NestedScrollViewPlus(
          headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {
            return <Widget>[
              SliverAppBar(
                title: Text('Nested Scroll View'),
                floating: true,
                forceElevated: innerBoxIsScrolled,
              ),
            ];
          },
          body: ListView.builder(
            itemCount: 30,
            itemBuilder: (context, index) {
              return ListTile(
                title: Text('Item $index'),
              );
            },
          ),
        ),
      ),
    );
  }
}

更多配置选项

ExtendedNestedScrollViewPlus 提供了许多配置选项,可以满足更复杂的需求。以下是一些常用的配置选项:

  • headerSliverBuilder: 构建头部 Sliver 的方法。
  • body: 主滚动视图的内容。
  • floatHeaderSlivers: 是否使头部 Sliver 浮动。
  • center: 指定滚动视图的中心点。
  • physics: 滚动视图的物理特性,例如弹性效果等。

示例代码详解

// 导入必要的库
import 'package:flutter/material.dart';
import 'package:extended_nested_scroll_view_plus/extended_nested_scroll_view_plus.dart';

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Nested Scroll View Example')), // 设置应用栏标题
        body: NestedScrollViewPlus(
          headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {
            // 构建头部 Sliver
            return <Widget>[
              SliverAppBar(
                title: Text('Nested Scroll View'), // 设置 SliverAppBar 的标题
                floating: true, // 设置为浮动模式
                forceElevated: innerBoxIsScrolled, // 当内部滚动视图滑动时,强制显示阴影
              ),
            ];
          },
          body: ListView.builder( // 主滚动视图内容
            itemCount: 30, // 列表项数量
            itemBuilder: (context, index) {
              return ListTile(
                title: Text('Item $index'), // 列表项内容
              );
            },
          ),
        ),
      ),
    );
  }
}

更多关于Flutter嵌套滚动视图插件extended_nested_scroll_view_plus的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter嵌套滚动视图插件extended_nested_scroll_view_plus的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


extended_nested_scroll_view_plus 是一个用于 Flutter 的插件,它扩展了 Flutter 的 NestedScrollView,提供了更灵活和强大的嵌套滚动视图功能。这个插件可以帮助你实现复杂的嵌套滚动布局,特别是在处理带有 SliverAppBar 和 TabBar 的场景时非常有用。

安装

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

dependencies:
  flutter:
    sdk: flutter
  extended_nested_scroll_view_plus: ^1.0.0

然后运行 flutter pub get 来安装依赖。

基本使用

extended_nested_scroll_view_plus 的核心组件是 ExtendedNestedScrollView,它是对 Flutter NestedScrollView 的扩展。以下是一个简单的使用示例:

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

class NestedScrollViewExample extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: ExtendedNestedScrollView(
        headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {
          return <Widget>[
            SliverAppBar(
              expandedHeight: 200.0,
              floating: false,
              pinned: true,
              flexibleSpace: FlexibleSpaceBar(
                title: Text('Nested Scroll View'),
                background: Image.network(
                  'https://picsum.photos/250?image=9',
                  fit: BoxFit.cover,
                ),
              ),
            ),
          ];
        },
        body: ListView.builder(
          itemCount: 50,
          itemBuilder: (BuildContext context, int index) {
            return ListTile(
              title: Text('Item $index'),
            );
          },
        ),
      ),
    );
  }
}

void main() => runApp(MaterialApp(
  home: NestedScrollViewExample(),
));

高级使用

1. 结合 TabBar 和 TabBarView

ExtendedNestedScrollView 通常与 TabBarTabBarView 结合使用,以实现带有可滚动标题和多个标签页的布局。

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

class TabbedNestedScrollViewExample extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return DefaultTabController(
      length: 3,
      child: Scaffold(
        body: ExtendedNestedScrollView(
          headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {
            return <Widget>[
              SliverAppBar(
                expandedHeight: 200.0,
                floating: false,
                pinned: true,
                flexibleSpace: FlexibleSpaceBar(
                  title: Text('Tabbed Nested Scroll View'),
                  background: Image.network(
                    'https://picsum.photos/250?image=9',
                    fit: BoxFit.cover,
                  ),
                ),
              ),
              SliverPersistentHeader(
                delegate: _SliverAppBarDelegate(
                  TabBar(
                    tabs: [
                      Tab(icon: Icon(Icons.home), text: 'Home'),
                      Tab(icon: Icon(Icons.business), text: 'Business'),
                      Tab(icon: Icon(Icons.school), text: 'School'),
                    ],
                  ),
                ),
                pinned: true,
              ),
            ];
          },
          body: TabBarView(
            children: [
              ListView.builder(
                itemCount: 50,
                itemBuilder: (BuildContext context, int index) {
                  return ListTile(
                    title: Text('Home Item $index'),
                  );
                },
              ),
              ListView.builder(
                itemCount: 50,
                itemBuilder: (BuildContext context, int index) {
                  return ListTile(
                    title: Text('Business Item $index'),
                  );
                },
              ),
              ListView.builder(
                itemCount: 50,
                itemBuilder: (BuildContext context, int index) {
                  return ListTile(
                    title: Text('School Item $index'),
                  );
                },
              ),
            ],
          ),
        ),
      ),
    );
  }
}

class _SliverAppBarDelegate extends SliverPersistentHeaderDelegate {
  final TabBar tabBar;

  _SliverAppBarDelegate(this.tabBar);

  @override
  Widget build(BuildContext context, double shrinkOffset, bool overlapsContent) {
    return Container(
      color: Theme.of(context).primaryColor,
      child: tabBar,
    );
  }

  @override
  double get maxExtent => tabBar.preferredSize.height;

  @override
  double get minExtent => tabBar.preferredSize.height;

  @override
  bool shouldRebuild(_SliverAppBarDelegate oldDelegate) {
    return false;
  }
}

void main() => runApp(MaterialApp(
  home: TabbedNestedScrollViewExample(),
));

2. 自定义滚动行为

ExtendedNestedScrollView 允许你自定义滚动行为,例如设置不同的滚动控制器或调整滚动范围。

ExtendedNestedScrollView(
  controller: ScrollController(), // 自定义滚动控制器
  physics: BouncingScrollPhysics(), // 自定义滚动行为
  headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {
    return <Widget>[
      SliverAppBar(
        expandedHeight: 200.0,
        floating: false,
        pinned: true,
        flexibleSpace: FlexibleSpaceBar(
          title: Text('Custom Scroll Behavior'),
          background: Image.network(
            'https://picsum.photos/250?image=9',
            fit: BoxFit.cover,
          ),
        ),
      ),
    ];
  },
  body: ListView.builder(
    itemCount: 50,
    itemBuilder: (BuildContext context, int index) {
      return ListTile(
        title: Text('Item $index'),
      );
    },
  ),
);
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!