flutter - 在展开的 FlexibleSpaceBar 内换行
问题描述
我有一些带有 FlexibleSpaceBar 的屏幕来显示大文本,向下滚动时会缩小。FlexibleSpaceBar 处于展开状态时如何换行?
问题视频: 乐视频
相关代码
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,
),
),
),
我建议删除整个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 中设置。
推荐阅读
- javascript - 添加动态
- javascript - node.js + mysql:“已将握手入队后无法将握手入队。”
- apache-spark - 在 Apache Spark 中收集 Hive 列统计信息
- java - 多线程银行账户java
- extjs - 运行时无法运行 Sencha 应用程序错误
- python - 将一列中的值替换为另一列中的值
- mysql - SQL GROUP_CONCAT 不适用于 2 个表连接
- java - 为什么 forEach, andThen 需要强制转换为 Consumer?
- java - 获取用户输入的 For 循环允许您为第一个问题输入两个值,但只计算一个值
- excel - 对象的 WorksheetFunction.Month 错误不支持属性或方法