initial commit

This commit is contained in:
2024-04-23 10:01:29 +02:00
parent e18472e116
commit 18bbdce261
9 changed files with 980 additions and 116 deletions
+268
View File
@@ -0,0 +1,268 @@
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:syncfusion_flutter_datagrid/datagrid.dart';
import 'package:syncfusion_flutter_core/theme.dart';
import 'package:jiffy/jiffy.dart';
import 'package:workinghours/data/publicHolidays.dart';
import 'package:workinghours/data/booking.dart';
class MonthlyScreen extends StatefulWidget {
const MonthlyScreen({
super.key,
});
@override
State<StatefulWidget> createState() => _MonthlyScreenState();
}
class _MonthlyScreenState extends State<MonthlyScreen> {
final DataGridController _dataGridController = DataGridController();
late BookingDataSource bookingDataSource;
List<GridColumn> _columns = [];
Future<List<Booking>> generateBookingList() async {
// SharedPreferences prefs = await SharedPreferences.getInstance();
// String? dbProtocol = prefs.getString('dbProtocol');
// String? dbHost = prefs.getString('dbHost');
// String? dbPath = prefs.getString('dbPath');
// Uri url = Uri(
// scheme: dbProtocol,
// host: dbHost,
// path: dbPath,
// queryParameters: {
// 'module': 'movie',
// 'function': 'getList',
// },
// );
// final response = await http.get(url);
// bool? error;
// String? errorMessage;
// Map<String, dynamic> movies = json.decode(response.body);
// error = movies['error'];
// errorMessage = movies['errmsg'];
// var list = movies['data'];
// List<Movie> _movies =
// await list.map<Movie>((json) => Movie.fromJson(json)).toList();
// movieDataSource = MovieDataSource(_movies);
// return _movies;
List<Booking> _booking = [];
for (int i = 1; i < 31; i++) {
_booking.add(Booking(
bookingDay: DateTime(2024, 1, i),
come1: DateTime(2024, 1, i, 8, 3, 0),
leave1: DateTime(2024, 1, i, 16, 27, 0),
come2: DateTime(1900, 1, 1),
leave2: DateTime(1900, 1, 1),
come3: DateTime(1900, 1, 1),
leave3: DateTime(1900, 1, 1),
come4: DateTime(1900, 1, 1),
leave4: DateTime(1900, 1, 1),
come5: DateTime(1900, 1, 1),
leave5: DateTime(1900, 1, 1),
code: '',
information: '',
));
}
bookingDataSource = BookingDataSource(_booking);
return _booking;
}
List<GridColumn> getColumns() {
return <GridColumn>[
GridColumn(
columnName: 'dayLeft',
columnWidthMode: ColumnWidthMode.auto,
label: Container(
padding: const EdgeInsets.all(16.0),
alignment: Alignment.centerLeft,
child: const Text('dayLeft'))),
GridColumn(
columnName: 'holiday',
columnWidthMode: ColumnWidthMode.auto,
label: Container(
padding: const EdgeInsets.all(16.0),
alignment: Alignment.centerLeft,
child: const Text('holiday'))),
GridColumn(
columnName: 'come1',
columnWidthMode: ColumnWidthMode.auto,
label: Container(
padding: const EdgeInsets.all(8.0),
alignment: Alignment.centerLeft,
child: const Text('come1'))),
GridColumn(
columnName: 'leave1',
columnWidthMode: ColumnWidthMode.auto,
label: Container(
padding: const EdgeInsets.all(8.0),
alignment: Alignment.centerLeft,
child: const Text('leave1'))),
GridColumn(
columnName: 'come2',
columnWidthMode: ColumnWidthMode.auto,
label: Container(
padding: const EdgeInsets.all(8.0),
alignment: Alignment.centerLeft,
child: const Text('come2'))),
GridColumn(
columnName: 'leave2',
columnWidthMode: ColumnWidthMode.auto,
label: Container(
padding: const EdgeInsets.all(8.0),
alignment: Alignment.centerLeft,
child: const Text('leave2'))),
GridColumn(
columnName: 'come3',
columnWidthMode: ColumnWidthMode.auto,
label: Container(
padding: const EdgeInsets.all(8.0),
alignment: Alignment.centerLeft,
child: const Text('come3'))),
GridColumn(
columnName: 'leave3',
columnWidthMode: ColumnWidthMode.auto,
label: Container(
padding: const EdgeInsets.all(8.0),
alignment: Alignment.centerLeft,
child: const Text('leave3'))),
GridColumn(
columnName: 'come4',
columnWidthMode: ColumnWidthMode.auto,
label: Container(
padding: const EdgeInsets.all(8.0),
alignment: Alignment.centerLeft,
child: const Text('come4'))),
GridColumn(
columnName: 'leave4',
columnWidthMode: ColumnWidthMode.auto,
label: Container(
padding: const EdgeInsets.all(8.0),
alignment: Alignment.centerLeft,
child: const Text('leave4'))),
GridColumn(
columnName: 'come5',
columnWidthMode: ColumnWidthMode.auto,
label: Container(
padding: const EdgeInsets.all(8.0),
alignment: Alignment.centerLeft,
child: const Text('come5'))),
GridColumn(
columnName: 'leave5',
columnWidthMode: ColumnWidthMode.auto,
label: Container(
padding: const EdgeInsets.all(8.0),
alignment: Alignment.centerLeft,
child: const Text('leave5'))),
GridColumn(
columnName: 'pause',
columnWidthMode: ColumnWidthMode.auto,
label: Container(
padding: const EdgeInsets.all(8.0),
alignment: Alignment.centerLeft,
child: const Text('pause'))),
GridColumn(
columnName: 'code',
columnWidthMode: ColumnWidthMode.auto,
label: Container(
padding: const EdgeInsets.all(8.0),
alignment: Alignment.centerLeft,
child: const Text('code'))),
GridColumn(
columnName: 'durationIs',
columnWidthMode: ColumnWidthMode.auto,
label: Container(
padding: const EdgeInsets.all(8.0),
alignment: Alignment.centerLeft,
child: const Text('durationIs'))),
GridColumn(
columnName: 'durationShould',
columnWidthMode: ColumnWidthMode.auto,
label: Container(
padding: const EdgeInsets.all(8.0),
alignment: Alignment.centerLeft,
child: const Text('durationShould'))),
GridColumn(
columnName: 'diff',
columnWidthMode: ColumnWidthMode.auto,
label: Container(
padding: const EdgeInsets.all(8.0),
alignment: Alignment.centerLeft,
child: const Text('diff'))),
GridColumn(
columnName: 'information',
columnWidthMode: ColumnWidthMode.auto,
label: Container(
padding: const EdgeInsets.all(8.0),
alignment: Alignment.centerLeft,
child: const Text('information'))),
GridColumn(
columnName: 'currentDiff',
columnWidthMode: ColumnWidthMode.auto,
label: Container(
padding: const EdgeInsets.all(8.0),
alignment: Alignment.centerLeft,
child: const Text('currentDiff'))),
GridColumn(
columnName: 'decimal',
columnWidthMode: ColumnWidthMode.auto,
label: Container(
padding: const EdgeInsets.all(8.0),
alignment: Alignment.centerLeft,
child: const Text('decimal'))),
GridColumn(
columnName: 'dayRight',
columnWidthMode: ColumnWidthMode.auto,
label: Container(
padding: const EdgeInsets.all(8.0),
alignment: Alignment.centerLeft,
child: const Text('dayRight'))),
];
}
@override
void initState() {
super.initState();
_columns = getColumns();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: FutureBuilder<Object>(
future: generateBookingList(),
builder: (context, data) {
return data.hasData
? SfDataGridTheme(
data: const SfDataGridThemeData(
headerColor: Color(0xff009889),
),
child: SfDataGrid(
source: bookingDataSource,
selectionMode: SelectionMode.single,
navigationMode: GridNavigationMode.row,
columns: _columns,
controller: _dataGridController,
columnWidthMode: ColumnWidthMode.auto,
),
)
: const Center(
child: CircularProgressIndicator(
strokeWidth: 2,
value: 0.8,
),
);
},
),
);
}
}
+64
View File
@@ -0,0 +1,64 @@
import 'package:flutter/material.dart';
import 'package:workinghours/widgets/monthly/monthlyScreen.dart';
import 'package:workinghours/widgets/yearly/yearlyScreen.dart';
class TabsScreen extends StatefulWidget {
const TabsScreen({super.key});
@override
State<TabsScreen> createState() {
return _TabsScreenState();
}
}
class _TabsScreenState extends State<TabsScreen> {
@override
void initState() {
super.initState();
}
int _selectedPageIndex = 0;
void _selectPage(int index) {
setState(() {
_selectedPageIndex = index;
});
}
@override
Widget build(BuildContext context) {
Widget activePage = const MonthlyScreen();
var activePageTitle = 'Monthly';
if (_selectedPageIndex == 1) {
activePage = const YearlyScreen();
activePageTitle = 'Yearly';
}
return Scaffold(
appBar: AppBar(
title: Text(activePageTitle),
),
body: activePage,
bottomNavigationBar: BottomNavigationBar(
onTap: _selectPage,
currentIndex: _selectedPageIndex,
items: const [
BottomNavigationBarItem(
icon: Icon(Icons.home),
// icon: Icon(Icons.tv_outlined),
label: 'Monthly',
),
BottomNavigationBarItem(
icon: Icon(Icons.business),
// icon: Icon(Icons.movie),
label: 'Yearly',
),
],
selectedIconTheme: const IconThemeData(opacity: 0.0, size: 0),
unselectedIconTheme: const IconThemeData(opacity: 0.0, size: 0),
),
);
}
}
+21
View File
@@ -0,0 +1,21 @@
import 'package:flutter/material.dart';
class YearlyScreen extends StatefulWidget {
const YearlyScreen({
super.key,
});
@override
State<StatefulWidget> createState() => _YearlyScreenState();
}
class _YearlyScreenState extends State<YearlyScreen> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Text('bla'),
),
);
}
}