代码之家  ›  专栏  ›  技术社区  ›  Dominik Roszkowski

如何设置颤振时嵌套滚动视图中SliVerAppBar的最小高度

  •  1
  • Dominik Roszkowski  · 技术社区  · 6 年前

    我想在一个普通的scaffold应用程序的nestedcollview中使用sliverappbar。当用户向下滚动时,我还希望有一些应用程序栏的最小高度。

    我不知道如何使用PreferredSize小部件或任何其他在线解决方案,例如 this .

    下面是我当前的简化解决方案:

    import 'package:flutter/material.dart';
    
    void main() => runApp(MyApp());
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Flutter Demo',
          theme: ThemeData(primarySwatch: Colors.blue, fontFamily: 'Oswald'),
          home: SliverHome(),
        );
      }
    }
    
    class SliverHome extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Container(
          child: testHome(),
        );
      }
    
      Widget testHome() {
        return Scaffold(
          body: NestedScrollView(
            headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {
              return <Widget>[
                SliverAppBar( // this is where I would like to set some minimum constraint
                  expandedHeight: 300,
                  floating: false,
                  pinned: true,
                  flexibleSpace: Container(
                    padding: EdgeInsets.all(10),
                    height: 340,
                    width: double.infinity,
                    child: Column(
                      mainAxisAlignment: MainAxisAlignment.end,
                      crossAxisAlignment: CrossAxisAlignment.start,
                      children: <Widget>[
                        Container(
                          height: 40,
                        ),
                        Container(
                          height: 60,
                        ),
                        Expanded(child: Container()),
                        Text('TEST'),
                      ],
                    ),
                    decoration: BoxDecoration(
                        image: DecorationImage(
                            image: NetworkImage('https://picsum.photos/400/400'),
                            fit: BoxFit.cover)),
                  ),
                )
              ];
            },
            body: Container(),
          ),
          floatingActionButton: FloatingActionButton(
            onPressed: () => {},
            tooltip: '+',
            child: Icon(Icons.accessibility_new),
          ),
        );
      }
    }
    

    我想停止在接近60 dp的地方缩小应用程序栏

    screenshot

    2 回复  |  直到 6 年前
        1
  •  1
  •   anmol.majhail    6 年前

    这实际上是请求的功能- https://github.com/flutter/flutter/issues/21298

    周围的工作就是利用 Bottom

    SliverAppBar(
                  // this is where I would like to set some minimum constraint
                  expandedHeight: 300,
                  floating: false,
                  pinned: true,
                  bottom: PreferredSize(                       // Add this code
                    preferredSize: Size.fromHeight(60.0),      // Add this code
                    child: Text(''),                           // Add this code
                  ),                                           // Add this code
                  flexibleSpace: Container(
                    padding: EdgeInsets.all(10),
                    height: 340,
                    width: double.infinity,
                    child: Column(
                      mainAxisAlignment: MainAxisAlignment.end,
                      crossAxisAlignment: CrossAxisAlignment.start,
                      children: <Widget>[
                        Container(
                          height: 40,
                        ),
                        Container(
                          height: 60,
                        ),
                        Expanded(child: Container()),
                        Text('TEST'),
                      ],
                    ),
                    decoration: BoxDecoration(
                        image: DecorationImage(
                            image: NetworkImage('https://picsum.photos/400/400'),
                            fit: BoxFit.cover)),
                  ),
                )
    
        2
  •  1
  •   Mir Mahfuz    6 年前

    在从容器中减少大小后,代码也可以正常工作。

     SliverAppBar( // this is where I would like to set some minimum constraint
              expandedHeight: 300,
              floating: false,
              pinned: true,
              flexibleSpace: Container(
                padding: EdgeInsets.all(10),
                height: 340,
                width: double.infinity,
                child: Column(
                  mainAxisAlignment: MainAxisAlignment.end,
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: <Widget>[
                    Container(
                      height: 10,  //decreas the size
                    ),
                    Container(
                      height: 10, //decrease the size
                    ),
                    Expanded(child: Container()),
                    Text('TEST'),
                  ],
                ),
                decoration: BoxDecoration(
                    image: DecorationImage(
                        image: NetworkImage('https://picsum.photos/400/400'),
                        fit: BoxFit.cover)),
              ),
            )