【发布时间】:2017-12-21 13:57:03
【问题描述】:
如何在 Flutter 中实现双向滚动视图? ListView 有一个 scrollDirection 字段,但它只能采用 Axis.horizontal 或 Axis.vertical。可以两者兼得吗?
【问题讨论】:
标签: widget scrollview flutter
如何在 Flutter 中实现双向滚动视图? ListView 有一个 scrollDirection 字段,但它只能采用 Axis.horizontal 或 Axis.vertical。可以两者兼得吗?
【问题讨论】:
标签: widget scrollview flutter
这是使用外部SingleChildScrollView 的潜在解决方案。你也可以使用多个ListViews 中的一个PageView,如果你对屏幕外的ListViews 被拆除没意见。
import 'package:flutter/material.dart';
void main() {
runApp(new MaterialApp(
home: new MyHomePage(),
));
}
class MyHomePage extends StatelessWidget {
Widget build(BuildContext context) {
ThemeData themeData = Theme.of(context);
return new Scaffold(
body: new SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: new SizedBox(
width: 1000.0,
child: new ListView.builder(
itemBuilder: (BuildContext context, int i) {
return new Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: new List.generate(5, (int j) {
return new Text("$i,$j", style: themeData.textTheme.display2);
}),
);
},
),
),
),
);
}
}
【讨论】:
GestureDetector 在用户拖动时重新定位元素,而不是使其可滚动...... Scrollables 提供的主要内容当你到达终点时反弹物理和过度覆盖发光......你有多在乎?
查看我在this question 上发布并自行回答的答案。我不知道用单个 Scrollable 来做这件事的方法,尽管我可以想象它很有用。
你不能用无限长的
ListView.builder轻松解决这个问题 因为它只向一个方向发展。如果你想同时包装 方向,可以模拟双向环绕 两个Viewports 中的Stack走向相反的方向。
这个问题也有一个代码示例(如果你不想换行,你可能需要稍微修改一下答案)。
【讨论】: