Flutter:如何设置SliverAppBar的高度?

时间:2019-05-01 16:18:36

标签: layout flutter appbar

我正在尝试使用SliverAppBar。在电话设备上的布局很好。但是,当我使用iPad测试布局时,AppBar的高度似乎没有变化,并且无法正确显示标题文本。

enter image description here

当我整理AppBar时:

我也尝试将bottom属性添加到SliverAppBar,但是它也不起作用。

bottom: PreferredSize(                       
   preferredSize: Size.fromHeight(60.0),      
   child: Text(''),                           
),  

结果看起来像这样:

enter image description here

标题文本仍被限制为不可见的高度。

我的代码:

new SliverAppBar(
        expandedHeight: Adapt.px(220.0),
        floating: false,
        elevation: 0.0,
        pinned: true,
        primary: true,
        centerTitle: true,
        title: Text("TITLE",
            style: TextStyle(
                color: Colors.white,
                fontSize: Adapt.px(45.0),
                fontFamily: "pinfon",
                fontWeight: FontWeight.w900,
                letterSpacing: 1.0)),
        backgroundColor: Colors.black45,
        brightness: Brightness.dark,
        bottom: PreferredSize(                       
            preferredSize: Size.fromHeight(60.0),      
            child: Text(''),                           
          ), 
        flexibleSpace: new FlexibleSpaceBar(
          background: Opacity(
            opacity: 0.5,
            child: new Stack(
              fit: StackFit.expand,
              children: <Widget>[
                new Image.asset(
                    "assets/images/back.jpg",
                    fit: BoxFit.fitWidth,
                  ),
              ],
            ),
          ),
        ),
      ),

1 个答案:

答案 0 :(得分:1)

我已经测试了您提供的示例代码,并且在使用 iPad Air - 第 4 代 - 14.0 模拟器时布局似乎工作正常。

不过,我看不到你的完整代码。我刚刚重用了您提供的最少代码并创建了一个完整的示例,以便能够查看输出。

这是我的示例代码:

import 'package:flutter/material.dart';

void main() => runApp(SilverAppBarExample());

class SilverAppBarExample extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: CustomScrollView(
          slivers: <Widget>[
            new SliverAppBar(
              expandedHeight: 220.0,
              floating: false,
              elevation: 0.0,
              pinned: true,
              primary: true,
              centerTitle: true,
              title: Text("TITLE",
                  style: TextStyle(
                      color: Colors.white,
                      fontSize: 45.0,
                      fontFamily: "pinfon",
                      fontWeight: FontWeight.w900,
                      letterSpacing: 1.0)),
              backgroundColor: Colors.black45,
              brightness: Brightness.dark,
              bottom: PreferredSize(
                preferredSize: Size.fromHeight(60.0),
                child: Text(''),
              ),
              flexibleSpace: new FlexibleSpaceBar(
                background: Opacity(
                  opacity: 0.5,
                  child: new Stack(
                    fit: StackFit.expand,
                    children: <Widget>[
                      new Image.asset(
                        "assets/background.jpg",
                        fit: BoxFit.fitWidth,
                      ),
                    ],
                  ),
                ),
              ),
            ),
            new SliverList(
                delegate: new SliverChildListDelegate(_buildList(50))),
          ],
        ),
      ),
    );
  }

  List _buildList(int count) {
    List<Widget> listItems = List();

    for (int i = 0; i < count; i++) {
      listItems.add(new Padding(
          padding: new EdgeInsets.all(20.0),
          child: new Text('Item ${i.toString()}',
              style: new TextStyle(fontSize: 25.0))));
    }

    return listItems;
  }
}

使用 iPad Air - 第 4 代 - 14.0 模拟器输出

扩展: enter image description here

缩小: enter image description here

看来 SliverAppBar 工作正常。

我还在 iPhone 模拟器中对其进行了测试以进行验证。

iPhone SE - 第 2 代 - 14.0

扩展: enter image description here

缩小: enter image description here

这是一个实时输出: enter image description here

也许如果您能提供您创建的完整代码,我们就可以在最后进行检查。