【问题标题】:Wrap text inside expanded FlexibleSpaceBar在展开的 FlexibleSpaceBar 内换行
【发布时间】:2019-11-17 11:54:29
【问题描述】:

我有一些带有 FlexibleSpaceBar 的屏幕来显示大文本,向下滚动时会缩小。 FlexibleSpaceBar处于展开状态时如何换行?

问题视频: Le video

相关代码

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';

class SelectPage extends StatelessWidget {
  final String title;
  final Widget child;

  const SelectPage({Key key, @required this.title, this.child}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: CustomScrollView(
          shrinkWrap: true,
          scrollDirection: Axis.vertical,
          slivers: <Widget>[
            SliverAppBar(
              brightness: Brightness.light,
              iconTheme: Theme.of(context).iconTheme,
              flexibleSpace: FlexibleSpaceBar(
                title: Text(
                  title,
                  style: TextStyle(fontSize: 20, color: Theme.of(context).textTheme.title.color),
                  maxLines: 10,
                  softWrap: true,

                ),
                centerTitle: true,
              ),
              expandedHeight: 200,
              backgroundColor: Colors.white,
              floating: true,
            ),
            this.child
          ],
        ));
  }
}

【问题讨论】:

    标签: flutter dart frontend flutter-layout


    【解决方案1】:

    我认为您需要复制 FlexibleSpaceBar 并稍微修改其构建功能。 默认情况下,FlexibleSpaceBar 使用缩放变换来动画标题的大小:

            children.add(Container(
              padding: padding,
              // Here comes scale transform
              child: Transform(
                alignment: titleAlignment,
                transform: scaleTransform,
                child: Align(
                  alignment: titleAlignment,
                  child: DefaultTextStyle(
                    style: titleStyle,
                    child: title,
                  ),
                ),
              ),
    

    我建议删除整个 Transform 小部件。相反,取 scaleValue 变量并在 titleStyle 中使用它,如下所示:

            final double scaleValue = Tween<double>(begin: 1.5, end: 1.0).transform(t);
            TextStyle titleStyle = theme.primaryTextTheme.title;
            titleStyle = titleStyle.copyWith(
              color: titleStyle.color.withOpacity(opacity),
              fontSize: titleStyle.fontSize * scaleValue
            );
    

    并且不要在标题的 Text 小部件中设置 fontSize。将其设置在 ThemeData.primaryTextTheme.title 或直接在修改过的 FlexibleSpaceBar 中。

    【讨论】:

    • 感谢您的回复!我做了你描述的; pastebin.com/k2C6dpTv 但现在它根本无法扩展。滚动时文本的大小保持不变。我错过了什么吗?
    • @g3mini 您是否从 title 小部件中删除了 fontSize: 20?如果您还没有这样做,请这样做。
    • 我已经做到了 =) ``` title: Text(title, style: Theme.of(context).primaryTextTheme.title, ) ```
    • @g3mini 抱歉,我看不出问题出在哪里。看一下我的完整代码,或许你会看出区别:pastebin.com/a2TnUKwH
    • 我找到了,你是个传奇! style: TextStyle(color: Theme.of(context).textTheme.title.color) 是什么吸引了我。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    • 2021-05-20
    相关资源
    最近更新 更多