Programming Framework/Flutter

[Flutter] SliverList 고정되는 항목 만들기

HoZang 2024. 5. 23. 10:52

[Flutter] SliverList 중 고정되는 항목 만들기

 

SliverPersistentHeader widget의 pnned 요소를 true로 해서  CustomScrollView widget의 slivers에 추가해준다.

SliverPersistentHeader는 스크롤 될 때  ScrollView 상단에서 고정되는걸 볼 수 있다.

class _MyHomePageState extends State<MyHomePage> {

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        children: [
          Expanded(
            child: CustomScrollView(
              slivers: [
                SliverPersistentHeader(
                    pinned: true,
                    delegate: SliverPinnedHeaderDelegate(
                        minHeight: 50,
                        maxHeight: 50,
                        child: Container(
                          color: Colors.white,
                          child: ListTileTheme(
                            child: ListTile(
                              title: Text('SubTitle_01'),
                            ),
                          ),
                        )
                    )
                ),
                SliverList(
                  delegate: SliverChildBuilderDelegate(
                      childCount: widget.products.length,
                          (context, index) {
                        return ShoppingListItem(product: widget.products[index], inCart: _shoppingCart.contains(widget.products[index]), onCardChanged: _handleCartChanged);
                      }
                  ),
                ),
                SliverPersistentHeader(
                    pinned: true,
                    delegate: SliverPinnedHeaderDelegate(
                        minHeight: 50,
                        maxHeight: 50,
                        child: Container(
                          color: Colors.white,
                          child: ListTileTheme(
                            child: ListTile(
                              title: Text('SubTitle_02'),
                            ),
                          ),
                        )
                    )
                ),
                SliverList(
                  delegate: SliverChildBuilderDelegate(
                      childCount: widget.products.length,
                          (context, index) {
                        return ShoppingListItem(product: widget.products[index], inCart: _shoppingCart.contains(widget.products[index]), onCardChanged: _handleCartChanged);
                      }
                  ),
                ),
              ],
            ),
          )
        ],
      ),
    );
  }
}