如何以编程方式打开/扩展浮动SliverAppBar?

时间:2020-05-18 19:37:07

标签: flutter flutter-sliver sliverappbar

我正在尝试以编程方式扩展折叠的SliverAppBar

SliverAppBarpinnedfloating。我已经实现了使用SliverAppBar关闭ScrollController并在一个方向上滚动一些像素的功能。但是,如果我滚动到另一个方向,则SliverAppBar不会展开。

示例代码:

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key}) : super(key: key);

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

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

  void _openHeader() {
    setState(() {

      // THIS CLOSES THE HEADER ...
      // _controller.animateTo(_controller.offset - 1, duration: Duration(milliseconds: 250), curve: Curves.easeIn);

      // ... BUT THIS DOES NOT OPEN THE HEADER
      // _controller.animateTo(_controller.offset + 1, duration: Duration(milliseconds: 250), curve: Curves.easeIn);

    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: CustomScrollView(
        controller: _controller,
        slivers: [
          SliverAppBar(
            snap: true,
            floating: true,
            pinned: true,
            flexibleSpace: Center(
              child: Text(
                "HEADER",
                style: TextStyle(color: Colors.white),
              ),
            ),
            expandedHeight: 200,
          ),
          SliverList(
            delegate: SliverChildBuilderDelegate((context, index) {
              return ListTile(title: Text(index.toString()));
            }),
          )
        ],
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _openHeader,
        child: Icon(Icons.add),
      ),
    );
  }
}

0 个答案:

没有答案