min*_*hen 4 datatable scrollbar dart flutter
我的 flutter 项目中有两个滚动条用于滚动数据表。这是代码。
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Container(
width: MediaQuery.of(context).size.width * (1 / 2),
height: MediaQuery.of(context).size.height * (1 / 2),
child: Scrollbar(
isAlwaysShown: true,
controller: _controllerOne,
child: SingleChildScrollView(
scrollDirection: Axis.vertical,
controller: _controllerOne,
child: Scrollbar(
controller: _controllerTwo,
isAlwaysShown: true,
child: SingleChildScrollView(
scrollDirection: Axis.horizontal,
controller: _controllerTwo,
child: DataTable(
...
),
),
))))));
}
Run Code Online (Sandbox Code Playgroud)
这两个滚动条工作正常。但我不能同时看到他们两个。我的意思是,如果我首先在垂直方向上编写带有scrollDirection的滚动条,就像;
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Container(
width: MediaQuery.of(context).size.width * (1 / 2),
height: MediaQuery.of(context).size.height * (1 / 2),
child: Scrollbar(
isAlwaysShown: true,
controller: _controllerOne,
child: SingleChildScrollView(
**scrollDirection: Axis.vertical,**
controller: _controllerOne,
child: Scrollbar(
controller: _controllerTwo,
isAlwaysShown: true,
child: SingleChildScrollView(
**scrollDirection: Axis.horizontal,**
controller: _controllerTwo,
child: DataTable(
...
),
),
))))));
}
Run Code Online (Sandbox Code Playgroud)
如果我首先在水平方向上写带有scrollDirection的滚动条,就像;
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Container(
width: MediaQuery.of(context).size.width * (1 / 2),
height: MediaQuery.of(context).size.height * (1 / 2),
child: Scrollbar(
isAlwaysShown: true,
controller: _controllerOne,
child: SingleChildScrollView(
**scrollDirection: Axis.horizontal,**
controller: _controllerOne,
child: Scrollbar(
controller: _controllerTwo,
isAlwaysShown: true,
child: SingleChildScrollView(
**scrollDirection: Axis.vertical,**
controller: _controllerTwo,
child: DataTable(
...
),
),
))))));
}
Run Code Online (Sandbox Code Playgroud)
当我滚动到最后时,我可以看到两个方向的另一个滚动条。但是当显示表格时,我需要同时看到它们。
有什么解决办法吗?
har*_*anx 14
我建议您使用InteractiveViewer,因为它在表格上呈现大数据时更容易导航,但是为了解决您的问题,您实际上可以在不依赖任何包的情况下完成它。
您需要做的就是嵌套垂直和水平的 SingleChildScrollView 并用两个 ScrollBar 包裹它,然后分别附加一个 ScrollController 并使用内部 ScrollBar 上的notificationPredicate属性。
class MyWidget extends StatelessWidget {
final List<int> shades = [100, 200, 300, 400, 500, 600, 700, 800, 900];
final ScrollController _horizontal = ScrollController(),
_vertical = ScrollController();
@override
Widget build(BuildContext context) {
return SizedBox(
height: 500,
width: 400,
child: Scrollbar(
controller: _vertical,
thumbVisibility: true,
trackVisibility: true,
child: Scrollbar(
controller: _horizontal,
thumbVisibility: true,
trackVisibility: true,
notificationPredicate: (notif) => notif.depth == 1,
child: SingleChildScrollView(
controller: _vertical,
child: SingleChildScrollView(
controller: _horizontal,
scrollDirection: Axis.horizontal,
child: DataTable(
columns: const <DataColumn>[
DataColumn(label: Text('Preview')),
DataColumn(label: Text('Color')),
DataColumn(label: Text('Shade')),
],
rows: [
for (var color in Colors.primaries)
for (var shade in shades)
DataRow(
cells: [
DataCell(Container(
height: 20, width: 50, color: color[shade])),
DataCell(Text(color.toString())),
DataCell(Text('$shade')),
],
),
],
),
),
),
),
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18680 次 |
| 最近记录: |