首页 > 解决方案 > Flutter:向下滚动时移动顶部的固定元素

问题描述

我想知道当用户向下滚动页面时,Flutter 中是否可以将固定元素向上移动(换句话说,一旦垂直滚动到达目标位置,将其垂直向上移动)。

下面是 js 中的一个例子(见右边的“总结 1”框):

http://bigspotteddog.github.io/ScrollToFixed/

带有打印屏幕的示例:

在此处输入图像描述

任何想法?

标签: dartflutter

解决方案


这应该可以使用sticky_headers插件来实现。

允许您将标题放置在可滚动内容上,这些标题将在滚动内容时粘在容器顶部。

这是一个关于如何实现此插件的简单示例:

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

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

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatelessWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);
  final String title;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Colors.blueGrey[900],
      ),
      body: ListView.builder(
        itemBuilder: (context, index) {
          return StickyHeader(
            header: Container(
              height: 50.0,
              color: Colors.blue,
              padding: EdgeInsets.symmetric(horizontal: 16.0),
              alignment: Alignment.centerLeft,
              child: Text(
                'Header #$index',
                style: const TextStyle(color: Colors.white),
              ),
            ),
            content: Column(
              children: List<int>.generate(5, (index) => index)
                  .map((item) => Container(
                        height: 50,
                        color: Colors.grey[(item + 1) * 100],
                      ))
                  .toList(),
            ),
          );
        },
      ),
    );
  }
}

在此处输入图像描述


推荐阅读