M. *_*ard 18
reverse: true在ListView小部件上设置并反转子列表。
ListView(
// Start scrolled to the bottom by default and stay there.
reverse: true,
children: widget.children.reversed.toList(growable: false),
),
Run Code Online (Sandbox Code Playgroud)
如果您有一个很长的列表并且反转很昂贵,您可以使用 ListView.builder 反转索引而不是整个列表
ListView.builder(
reverse: true,
itemCount: items.length,
itemBuilder: (context, index) {
final reversedIndex = items.length - 1 - index;
final item = items[reversedIndex];
return MyWidget(item);
}
)
Run Code Online (Sandbox Code Playgroud)
我从上面 Günter 的评论中得到了这个。谢谢!
小智 12
我发现WidgetsBinding.instance.addPostFrameCallback非常有用,尤其是在这种需要一些后期构建处理的情况下。在这种情况下,它解决了以下问题:
final ScrollController _sc = ScrollController();
Run Code Online (Sandbox Code Playgroud)
WidgetsBinding.instance.addPostFrameCallback((_) => {_sc.jumpTo(_sc.position.maxScrollExtent)});
Run Code Online (Sandbox Code Playgroud)
controller: _sc,
Run Code Online (Sandbox Code Playgroud)
我还在构建一个记录器查看器。奇迹般有效。
我可以通过使用来完成这项工作,Timer但可能应该有更好的方法来做到这一点。我的解决方法是:
ScrollController()并将其附加到 listView:ListView.builder(
controller: _scrollController,
itemCount: _logLines.values.length,
itemBuilder: (context, index) => _getLogLine(index),
)
Run Code Online (Sandbox Code Playgroud)
initState方法并在其中设置一个计时器,如下所示: @override
void initState() {
super.initState();
Timer.periodic(Duration(milliseconds: 100), (timer) {
if (mounted) {
_scrollToBottom();
} else {
timer.cancel();
}
});
}
Run Code Online (Sandbox Code Playgroud)
定义一个方法_scrollToBottom()来调用:
_scrollController.jumpTo(_scrollController.position.maxScrollExtent);
| 归档时间: |
|
| 查看次数: |
8230 次 |
| 最近记录: |