flutter - 向反向 CustomScrollView 或 ListView 添加条时将粘性标题固定在顶部
问题描述
我正在实现一个聊天小部件并使用https://github.com/letsar/flutter_sticky_header库按日期分隔消息,您可以在 Whatsapp 和 Telegram 上看到相同的行为。
我正在构建几个slivers
,每个都包含该日期的消息和一个标题,该标题基本上是显示相关日期的文本。我将slivers
属性设置CustomScrollView
为reverse
true。
return CustomScrollView(
slivers: _buildListItem(context, sectionIndex),
reverse: true,
controller: listScrollController,
);
List<Widget> _buildListItem(
BuildContext context,
List<ChatSection> chatSections,
) {
List<Widget> slivers = List();
chatSections.forEach((chatSection) {
slivers.add(_buildChatSliver(
context, chatSection.messages, chatSection.datetime));
});
return slivers;
}
SliverStickyHeaderBuilder _buildChatSliver(BuildContext context,
List<ChatMessage> chatMessages, DateTime dateTimeHeader) {
return SliverStickyHeaderBuilder(
overlapsContent: false,
builder: (context, state) {
DateTime now = DateTime.now();
String headerText = now.year != dateTimeHeader.year
? DateFormat("YYYY MMM dd").format(dateTimeHeader)
: DateFormat("MMM dd").format(dateTimeHeader);
return Container(
padding: EdgeInsets.fromLTRB(5, 0, 15, 5),
child: Center(
child: Container(
padding: EdgeInsets.fromLTRB(5, 5, 5, 5),
decoration: BoxDecoration(
color: Color.fromARGB(200, 150, 150, 150),
borderRadius: BorderRadius.all(Radius.circular(5))),
child: Text(
headerText,
style: TextStyle(
color: Colors.white70,
fontSize: 12.0,
fontStyle: FontStyle.italic),
),
),
),
);
},
sliver: SliverList(
delegate: SliverChildBuilderDelegate(
(context, i) => _buildItem(chatMessages[i]),
childCount: chatMessages.length)),
);
}
一切正常,除了标题被固定在屏幕底部(我需要它们粘在顶部)。我怎样才能解决这个问题?任何指针将不胜感激。
解决方案
看起来这个插件有问题,其他开发人员已经开始使用它
否则,我会使用现有的小部件重新实现 sliverlist,可能是 SliverList 和 SliverPersistentHeader 的组合
推荐阅读
- reactjs - Carousel React JS、JSON、JSX TypeError:无法读取未定义的属性“”
- flutter - 颤振'未处理的异常:类型'列表
' 不是类型 'List 的子类型 ' - ddev - DDEV 项目使用 http 而不是 https 启动站点
- reactjs - 如何在 React 组件中传递图像的路径?
- java - DateTimeFormat 的自定义模式不起作用
- reactive-programming - Mono.fromCallable 线程行为
- python - 无法使用转换规则“same_kind”将 ufunc 'add' 输出从 dtype('float64') 转换为 dtype('int64')
- java - 如何在外部实体上生成 query-dsl Q 类?
- wpf - VS2019 更新 18.2 缺少“WPF App .NET Core”项目模板
- node.js - 抛出新的_ValidationError.default(错误,架构,配置);并且需要 webpack@^4.0.0 的对等点,但没有安装