hyzp_ybqx-Commit001:代码刚转换好,编译通过
This commit is contained in:
@@ -0,0 +1,134 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:linked_scroll_controller/linked_scroll_controller.dart';
|
||||
import 'table_cell.dart';
|
||||
|
||||
class TableBody extends StatefulWidget {
|
||||
// 所有点位 31 天的车流量日统计数据,每天有 3 个数据:车流量、早高峰、晚高峰
|
||||
Map mapTableData; // 有 31 个元素,每个元素又是一个 Map:包含车流量、早高峰、晚高峰
|
||||
final ScrollController scrollController;
|
||||
|
||||
TableBody({
|
||||
@required this.scrollController,
|
||||
@required this.mapTableData,
|
||||
});
|
||||
|
||||
@override
|
||||
_TableBodyState createState() => _TableBodyState();
|
||||
}
|
||||
|
||||
class _TableBodyState extends State<TableBody> {
|
||||
LinkedScrollControllerGroup _controllers;
|
||||
ScrollController _firstColumnController;
|
||||
ScrollController _restColumnsController;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_controllers = LinkedScrollControllerGroup();
|
||||
_firstColumnController = _controllers.addAndGet();
|
||||
_restColumnsController = _controllers.addAndGet();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_firstColumnController.dispose();
|
||||
_restColumnsController.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
List listWidth = [
|
||||
100.0,
|
||||
80.0,
|
||||
80.0,
|
||||
80.0,
|
||||
];
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ListView(
|
||||
controller: _restColumnsController,
|
||||
physics: const ClampingScrollPhysics(),
|
||||
children: List.generate(widget.mapTableData.length, (index1) {
|
||||
// 降序生成
|
||||
int rIndex1 = widget.mapTableData.length - 1 - index1;
|
||||
String key1 = widget.mapTableData.keys.elementAt(rIndex1);
|
||||
return Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: List.generate(4, (index2) {
|
||||
String key2 = '';
|
||||
if (index2 > 0) {
|
||||
key2 = widget.mapTableData[key1].keys.elementAt(index2 - 1);
|
||||
}
|
||||
|
||||
return MultiplicationTableCell(
|
||||
width: listWidth[index2],
|
||||
height: cellHeight,
|
||||
fontsize: 0 == index2 ? 14 : 16,
|
||||
edgeRight: ' ',
|
||||
text: 0 == index2
|
||||
? '${rIndex1 + 1}.${key1}'
|
||||
: widget.mapTableData[key1][key2].toString(),
|
||||
//text: _text,
|
||||
);
|
||||
}),
|
||||
);
|
||||
}),
|
||||
// children: List.generate(31, (y) {
|
||||
// return Row(
|
||||
// mainAxisAlignment: MainAxisAlignment.center,
|
||||
// children: List.generate(4, (x) {
|
||||
// return MultiplicationTableCell(
|
||||
// value: (x + 2) * (y + 2),
|
||||
// width: listWidth[x],
|
||||
// height: cellHeight,
|
||||
// text: 0 == x ? '${y + 1}.${(x + 2) * (y + 2)}' : '',
|
||||
// );
|
||||
// }),
|
||||
// );
|
||||
// }),
|
||||
);
|
||||
|
||||
//Row(
|
||||
//children:
|
||||
//[
|
||||
// SizedBox(
|
||||
// width: cellWidth,
|
||||
// child: ListView(
|
||||
// controller: _firstColumnController,
|
||||
// physics: ClampingScrollPhysics(),
|
||||
// children: List.generate(maxNumber - 1, (index) {
|
||||
// return MultiplicationTableCell(
|
||||
// //color: Colors.yellow.withOpacity(0.3),
|
||||
// value: index + 2,
|
||||
// );
|
||||
// }),
|
||||
// ),
|
||||
// ),
|
||||
|
||||
// Expanded(
|
||||
// child: SingleChildScrollView(
|
||||
// controller: widget.scrollController,
|
||||
// scrollDirection: Axis.horizontal,
|
||||
// physics: const ClampingScrollPhysics(),
|
||||
// child: SizedBox(
|
||||
// width: (maxNumber - 1) * cellWidth,
|
||||
// child: ListView(
|
||||
// controller: _restColumnsController,
|
||||
// physics: const ClampingScrollPhysics(),
|
||||
// children: List.generate(maxNumber - 1, (y) {
|
||||
// return Row(
|
||||
// children: List.generate(maxNumber - 1, (x) {
|
||||
// return MultiplicationTableCell(
|
||||
// value: (x + 2) * (y + 2),
|
||||
// );
|
||||
// }),
|
||||
// );
|
||||
// }),
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
//],
|
||||
//);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
const double cellWidth = 50;
|
||||
const double cellHeight = 25;
|
||||
const double headHeight = 30;
|
||||
|
||||
class MultiplicationTableCell extends StatelessWidget {
|
||||
final String text;
|
||||
final Color color;
|
||||
double width;
|
||||
double height;
|
||||
double fontsize;
|
||||
AlignmentGeometry alignment;
|
||||
String edgeRight;
|
||||
|
||||
MultiplicationTableCell({
|
||||
this.text = '',
|
||||
this.color,
|
||||
this.width = cellWidth,
|
||||
this.height = cellWidth,
|
||||
this.fontsize = 16,
|
||||
this.alignment = Alignment.centerRight,
|
||||
this.edgeRight = ' ',
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
width: width,
|
||||
height: height,
|
||||
decoration: BoxDecoration(
|
||||
color: color,
|
||||
border: Border.all(
|
||||
color: Colors.black12,
|
||||
width: 1.0,
|
||||
),
|
||||
),
|
||||
alignment: alignment,
|
||||
child: Text(text + edgeRight, style: TextStyle(fontSize: fontsize)),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'table_cell.dart';
|
||||
|
||||
class TableHead extends StatelessWidget {
|
||||
final ScrollController scrollController;
|
||||
|
||||
TableHead({
|
||||
@required this.scrollController,
|
||||
});
|
||||
|
||||
Widget getHeadText(String text, {double height = 30}) {
|
||||
return Container(
|
||||
alignment: Alignment.center,
|
||||
height: height,
|
||||
child: Text(text, style: TextStyle(fontWeight: FontWeight.bold)),
|
||||
);
|
||||
}
|
||||
|
||||
List listHead = [
|
||||
'统计时间',
|
||||
'车流量',
|
||||
'早高峰',
|
||||
'晚高峰',
|
||||
];
|
||||
|
||||
List listWidth = [
|
||||
100.0,
|
||||
80.0,
|
||||
80.0,
|
||||
80.0,
|
||||
];
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
alignment: Alignment(0, 0),
|
||||
height: headHeight,
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: List.generate(listHead.length, (index) {
|
||||
return MultiplicationTableCell(
|
||||
color: Colors.yellow.withOpacity(0.3),
|
||||
text: listHead[index],
|
||||
width: listWidth[index],
|
||||
);
|
||||
}),
|
||||
|
||||
// children: [
|
||||
// // getHeadText('统计时间'),
|
||||
// // getHeadText('车流量'),
|
||||
// // getHeadText('早高峰'),
|
||||
// // getHeadText('晚高峰'),
|
||||
// // MultiplicationTableCell(
|
||||
// // color: Colors.yellow.withOpacity(0.3),
|
||||
// // value: 1,
|
||||
// // ),
|
||||
// // Expanded(
|
||||
// // child: ListView(
|
||||
// // //controller: scrollController, //注释掉该行,便只能上下滚动
|
||||
// // physics: ClampingScrollPhysics(),
|
||||
// // scrollDirection: Axis.horizontal,
|
||||
// // children: List.generate(maxNumber - 1, (index) {
|
||||
// // return MultiplicationTableCell(
|
||||
// // color: Colors.yellow.withOpacity(0.3),
|
||||
// // value: index + 2,
|
||||
// // );
|
||||
// // }),
|
||||
// // ),
|
||||
// // ),
|
||||
// ],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:linked_scroll_controller/linked_scroll_controller.dart';
|
||||
|
||||
import 'table_head.dart';
|
||||
import 'table_body.dart';
|
||||
|
||||
class TableScrollable extends StatefulWidget {
|
||||
// 所有点位 31 天的车流量日统计数据,每天有 3 个数据:车流量、早高峰、晚高峰
|
||||
Map mapTableData; // 有 31 个元素,每个元素又是一个 Map:包含车流量、早高峰、晚高峰
|
||||
|
||||
TableScrollable({
|
||||
@required this.mapTableData,
|
||||
});
|
||||
|
||||
@override
|
||||
_TableScrollableState createState() => _TableScrollableState();
|
||||
}
|
||||
|
||||
class _TableScrollableState extends State<TableScrollable> {
|
||||
LinkedScrollControllerGroup _controllers;
|
||||
ScrollController _headController;
|
||||
ScrollController _bodyController;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_controllers = LinkedScrollControllerGroup();
|
||||
_headController = _controllers.addAndGet();
|
||||
_bodyController = _controllers.addAndGet();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_headController.dispose();
|
||||
_bodyController.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Expanded(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
TableHead(
|
||||
scrollController: _headController,
|
||||
),
|
||||
Expanded(
|
||||
child: TableBody(
|
||||
scrollController: _bodyController,
|
||||
mapTableData: widget.mapTableData,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user