Skip to content

Instantly share code, notes, and snippets.

@allansrc
Created June 28, 2025 02:22
Show Gist options
  • Save allansrc/ca3291925c521fb34105f7bad55cdf52 to your computer and use it in GitHub Desktop.
Save allansrc/ca3291925c521fb34105f7bad55cdf52 to your computer and use it in GitHub Desktop.
sticky header flutter
import 'package:flutter/material.dart';
void main() => runApp(MaterialApp(home: StickyHeaderWithScrollController()));
class StickyHeaderWithScrollController extends StatefulWidget {
@override
_StickyHeaderWithScrollControllerState createState() =>
_StickyHeaderWithScrollControllerState();
}
class _StickyHeaderWithScrollControllerState
extends State<StickyHeaderWithScrollController> {
final Map<String, List<String>> _data = {
'Janeiro': [
'Débito 2.0',
'Crédito 1.0',
'Crédito 3.0',
'Débito 2.0',
'Crédito 1.0',
'Crédito 3.0',
'Débito 2.0',
'Crédito 1.0',
'Crédito 3.0',
'Débito 2.0',
'Crédito 1.0',
'Crédito 3.0',
'Débito 2.0',
'Crédito 1.0',
'Crédito 3.0',
'Débito 2.0',
'Crédito 1.0',
'Crédito 3.0',
],
'Fevereiro': [
'Débito 2.5',
'Crédito 1.2',
'Crédito 4.0',
'Débito 2.0',
'Crédito 1.0',
'Crédito 3.0',
'Débito 2.0',
'Crédito 1.0',
'Crédito 3.0',
'Débito 2.0',
'Crédito 1.0',
'Crédito 3.0',
'Débito 2.0',
'Crédito 1.0',
'Crédito 3.0',
'Débito 2.0',
'Crédito 1.0',
'Crédito 3.0',
],
'Março': [
'Crédito 5.0',
'Débito 1.5',
'Débito 2.0',
'Crédito 1.0',
'Crédito 3.0',
'Débito 2.0',
'Crédito 1.0',
'Crédito 3.0',
'Débito 2.0',
'Crédito 1.0',
'Crédito 3.0',
'Débito 2.0',
'Crédito 1.0',
'Crédito 3.0',
'Débito 2.0',
'Crédito 1.0',
'Crédito 3.0',
'Débito 2.0',
'Crédito 1.0',
'Crédito 3.0',
'Débito 2.0',
'Crédito 1.0',
'Crédito 3.0',
'Débito 2.0',
'Crédito 1.0',
'Crédito 3.0',
'Débito 2.0',
'Crédito 1.0',
'Crédito 3.0',
],
};
List<Widget> _buildListItems() {
List<Widget> widgets = [];
_data.forEach((month, items) {
widgets.add(
Container(
padding: EdgeInsets.symmetric(horizontal: 16, vertical: 12),
color: Colors.blue.shade100,
child: Text(
month,
style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
),
),
);
widgets.addAll(items.map((e) => ListTile(title: Text(e))).toList());
});
return widgets;
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Sticky Header com ScrollController')),
body: CustomScrollView(
slivers: [
for (final statements in _data.entries) ...[
SliverMainAxisGroup(
slivers: [
SliverAppBar(
title: Text(statements.key),
pinned: true,
forceElevated: true,
centerTitle: false,
),
SliverToBoxAdapter(
child: Column(
children: [
for (final value in statements.value)
ListTile(title: Text(value)),
],
),
),
],
),
],
],
),
);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment