想通过ListView.builder
写一个表格组件,本来自带垂直滚动条,但是还需要水平滚动条,所以就想着添加一个自定义的水平滚动条CupertinoScrollbar
,但是写好发现垂直滚动条只有在水平滚动条滚动到最右侧才能显示,并且一个自带的和一个添加的CupertinoScrollbar
两者样式不太统一,就想着两个滚动条都自定义算了,但是目前只正确添加了水平滚动条,垂直滚动条不知道怎么添加,求助!
当前效果图:(水平、垂直都可以滚动,但是目前只能看到水平滚动条)
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class AppGrid extends StatefulWidget {
const AppGrid({super.key});
@override
State<AppGrid> createState() => _AppTableState();
}
List<String> rows = List.generate(20, (index) => "Item ${index + 1}");
Color tableBgColor = const Color.fromARGB(10, 235, 224, 223); // 表格背景色
Color borderColor = Colors.blue; // 边框颜色
double rowheight = 50; // 行高
double borderWidth = 1; // 边框宽度
double tableWrapperPadding = 8;
class _AppTableState extends State<AppGrid> {
final _horizontalScrollController = ScrollController();
final _verticalController = ScrollController();
@override
Widget build(BuildContext context) {
return CupertinoScrollbar(
controller: _horizontalScrollController,
thumbVisibility: true,
child: SingleChildScrollView(
controller: _horizontalScrollController,
scrollDirection: Axis.horizontal,
child: SizedBox(
width: 2000,
child: Container(
padding: EdgeInsets.only(bottom: tableWrapperPadding),
width: double.infinity,
decoration: BoxDecoration(
color: tableBgColor,
border: Border.all(color: borderColor, width: borderWidth),
),
child: ScrollConfiguration(
behavior: ScrollConfiguration.of(
context,
).copyWith(scrollbars: false),
child: ListView.builder(
controller: _verticalController,
itemCount: rows.length,
itemExtent: rowheight,
// cacheExtent: 20,
itemBuilder: (BuildContext ctxt, int index) {
return Container(
child: Row(children: [Text('data_${index + 1}')]),
);
},
),
),
), // 你的 ListView.builder
),
),
);
}
}
找到一个组件:https://pub-web.flutter-io.cn/packages/single_child_two_dimen...
ScrollController
CupertinoScrollbar
,外层控制垂直滚动,内层控制水平滚动scrollbarOrientation: CupertinoScrollbarOrientation.bottom
ScrollConfiguration
完整代码
IOS平台
Windows平台
使用InteractiveViewer