flutter - 在扩展的FlexibleSpaceBar中包装文字

标签 flutter dart frontend flutter-layout

我有一些带有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
          ],
        ));
  }
}

最佳答案

我认为您需要复制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,
              ),
            ),
          ),

我建议删除整个“变换”小部件。相反,采用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
        );

并且不要在标题的“文本”小部件中设置fontSize。在ThemeData.primaryTextTheme.title中进行设置,或直接在经过修改的FlexibleSpaceBar中进行设置。

demo

关于flutter - 在扩展的FlexibleSpaceBar中包装文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58900158/

相关文章:

ios - Xcode 构建失败没有显示相关的错误消息

arrays - Flutter - 过滤数组中具有相同名称的元素

flutter - 如何在 Dart 中获取星期几的缩写名称

html - 如何阻止溢出干扰 z-index?

database - 当 MS Access 用作前端而 PostgreSQL 用作后端时,如何隐藏/锁定链接的 PostgreSQL 表?

javascript - 如何在选择标签中显示多行文本标题?

flutter - Flutter 中的水平条形图

flutter - 在一段时间内更改按钮颜色

html5-canvas - 如何在Dart上将调整大小的图像绘制到矩形

pointers - Dart编程中的链接列表,如何在Dart中处理指针或如何在堆上存储变量?