flutter_timetable/example/lib/main.dart

134 lines
3.7 KiB
Dart
Raw Normal View History

2022-11-01 09:46:23 +01:00
// SPDX-FileCopyrightText: 2022 Iconica
//
// SPDX-License-Identifier: BSD-3-Clause
2022-08-24 09:39:36 +02:00
import 'package:flutter/material.dart';
import 'package:timetable/timetable.dart';
void main() {
runApp(const MaterialApp(home: TimetableDemo()));
2022-08-24 09:39:36 +02:00
}
2022-08-24 12:03:32 +02:00
class TimetableDemo extends StatefulWidget {
2022-08-24 09:39:36 +02:00
const TimetableDemo({Key? key}) : super(key: key);
2022-08-24 12:03:32 +02:00
@override
State<TimetableDemo> createState() => _TimetableDemoState();
}
class _TimetableDemoState extends State<TimetableDemo> {
2022-08-24 16:02:07 +02:00
bool _grouped = false;
2022-08-24 12:03:32 +02:00
final ScrollController _scrollController = ScrollController();
final List<TimeBlock> blocks = [
2022-08-24 16:02:07 +02:00
TimeBlock(
start: const TimeOfDay(hour: 14, minute: 0),
end: const TimeOfDay(hour: 15, minute: 0),
2022-08-24 16:02:07 +02:00
id: 0,
),
TimeBlock(
start: const TimeOfDay(hour: 8, minute: 0),
end: const TimeOfDay(hour: 9, minute: 0),
2022-08-24 16:02:07 +02:00
id: 1,
),
TimeBlock(
start: const TimeOfDay(hour: 9, minute: 15),
end: const TimeOfDay(hour: 10, minute: 0),
2022-08-24 16:02:07 +02:00
id: 1,
),
TimeBlock(
start: const TimeOfDay(hour: 10, minute: 15),
end: const TimeOfDay(hour: 11, minute: 0),
2022-08-24 16:02:07 +02:00
child: Container(color: Colors.purple, height: 300, width: 50),
id: 2,
),
TimeBlock(
start: const TimeOfDay(hour: 6, minute: 15),
end: const TimeOfDay(hour: 7, minute: 0),
2022-08-24 16:02:07 +02:00
child: Container(color: Colors.blue, height: 300, width: 200),
id: 2,
),
TimeBlock(
start: const TimeOfDay(hour: 18, minute: 0),
end: const TimeOfDay(hour: 18, minute: 15),
child: const Text('High Tea'),
2022-08-24 16:02:07 +02:00
id: 10,
),
TimeBlock(
start: const TimeOfDay(hour: 18, minute: 0),
end: const TimeOfDay(hour: 18, minute: 15),
child: const Text('High Tea'),
2022-08-24 16:02:07 +02:00
id: 10,
),
TimeBlock(
start: const TimeOfDay(hour: 18, minute: 0),
end: const TimeOfDay(hour: 18, minute: 15),
child: const Text('High Tea'),
2022-08-24 16:02:07 +02:00
id: 10,
),
2022-08-24 17:14:50 +02:00
TimeBlock(
start: const TimeOfDay(hour: 18, minute: 0),
end: const TimeOfDay(hour: 18, minute: 15),
child: const Text('High Tea'),
2022-08-24 17:14:50 +02:00
id: 0,
),
2022-08-24 12:03:32 +02:00
];
@override
void dispose() {
_scrollController.dispose();
super.dispose();
}
2022-08-24 09:39:36 +02:00
@override
Widget build(BuildContext context) {
2022-08-24 12:03:32 +02:00
return Scaffold(
body: Padding(
padding: EdgeInsets.only(top: MediaQuery.of(context).padding.top),
2022-08-24 16:02:07 +02:00
child: SingleChildScrollView(
controller: _scrollController,
child: Column(
children: [
// toggle between grouped and ungrouped blocks
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
const Text('Grouped'),
2022-08-24 16:02:07 +02:00
Switch(
value: _grouped,
onChanged: (value) {
setState(() {
_grouped = value;
});
},
),
],
),
if (_grouped) ...[
Timetable(
startHour: 3,
endHour: 22,
2022-08-25 08:37:14 +02:00
timeBlocks: blocks,
2022-08-24 16:02:07 +02:00
scrollController: _scrollController,
combineBlocks: true,
2022-08-25 08:37:14 +02:00
mergeBlocks: false,
2022-09-01 12:05:37 +02:00
theme: const TableTheme(tablePaddingStart: 0),
2022-08-24 16:02:07 +02:00
)
] else ...[
Timetable(
startHour: 3,
endHour: 22,
timeBlocks: blocks,
scrollController: _scrollController,
combineBlocks: true,
2022-08-24 16:02:07 +02:00
mergeBlocks: true,
2022-09-01 12:05:37 +02:00
theme: const TableTheme(tablePaddingStart: 0),
2022-08-24 16:02:07 +02:00
),
],
],
),
2022-08-24 12:03:32 +02:00
),
),
);
2022-08-24 09:39:36 +02:00
}
}