// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'package:flutter/material.dart';

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

class SliverFloatingHeaderApp extends StatelessWidget {
  const SliverFloatingHeaderApp({super.key});

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(home: FloatingHeaderExample());
  }
}

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

  @override
  State<FloatingHeaderExample> createState() => _FloatingHeaderExampleState();
}

class _FloatingHeaderExampleState extends State<FloatingHeaderExample> {
  @override
  Widget build(BuildContext context) {
    return const Scaffold(
      body: SafeArea(
        child: Padding(
          padding: EdgeInsets.all(4),
          child: CustomScrollView(
            slivers: <Widget>[
              SliverFloatingHeader(
                child: ListHeader(
                  text:
                      'SliverFloatingHeader\nScroll down a little to show\nScroll up a little to hide',
                ),
              ),
              ItemList(),
            ],
          ),
        ),
      ),
    );
  }
}

// A widget that displays its text within a thick rounded rectangle border
class ListHeader extends StatelessWidget {
  const ListHeader({super.key, required this.text});

  final String text;

  @override
  Widget build(BuildContext context) {
    final ThemeData theme = Theme.of(context);
    final ColorScheme colorScheme = theme.colorScheme;

    return Container(
      color: colorScheme.surface,
      padding: const EdgeInsets.symmetric(horizontal: 4),
      child: Material(
        color: colorScheme.primaryContainer,
        shape: RoundedRectangleBorder(
          borderRadius: BorderRadius.circular(8),
          side: BorderSide(width: 7, color: colorScheme.outline),
        ),
        child: Container(
          alignment: Alignment.center,
          padding: const EdgeInsets.symmetric(vertical: 16),
          child: Text(
            text,
            textAlign: TextAlign.center,
            style: theme.textTheme.headlineMedium!.copyWith(
              color: colorScheme.onPrimaryContainer,
            ),
          ),
        ),
      ),
    );
  }
}

// A placeholder SliverList of 50 items.
class ItemList extends StatelessWidget {
  const ItemList({super.key, this.itemCount = 50});

  final int itemCount;

  @override
  Widget build(BuildContext context) {
    final ColorScheme colorScheme = Theme.of(context).colorScheme;
    return SliverList.builder(
      itemCount: itemCount,
      itemBuilder: (BuildContext context, int index) {
        return Card(
          color: colorScheme.onSecondary,
          child: ListTile(
            textColor: colorScheme.secondary,
            title: Text('Item $index'),
          ),
        );
      },
    );
  }
}
