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 createState() => _MonthlyScreenState(); } class _MonthlyScreenState extends State { final DataGridController _dataGridController = DataGridController(); late BookingDataSource bookingDataSource; List _columns = []; Future> 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 movies = json.decode(response.body); // error = movies['error']; // errorMessage = movies['errmsg']; // var list = movies['data']; // List _movies = // await list.map((json) => Movie.fromJson(json)).toList(); // movieDataSource = MovieDataSource(_movies); // return _movies; List _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: 'U', information: '', )); } bookingDataSource = BookingDataSource(_booking); return _booking; } List getColumns() { return [ GridColumn( columnName: 'code', visible: false, label: Container( padding: const EdgeInsets.all(16.0), alignment: Alignment.centerRight, child: const Text('code'))), GridColumn( columnName: 'weekday', visible: false, label: Container( padding: const EdgeInsets.all(16.0), alignment: Alignment.centerRight, child: const Text('weekday'))), GridColumn( columnName: 'dayLeft', columnWidthMode: ColumnWidthMode.auto, label: Container( padding: const EdgeInsets.all(16.0), alignment: Alignment.centerRight, child: const Text('day'))), 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('come 1'))), GridColumn( columnName: 'leave1', columnWidthMode: ColumnWidthMode.auto, label: Container( padding: const EdgeInsets.all(8.0), alignment: Alignment.centerLeft, child: const Text('leave 1'))), GridColumn( columnName: 'come2', columnWidthMode: ColumnWidthMode.auto, label: Container( padding: const EdgeInsets.all(8.0), alignment: Alignment.centerLeft, child: const Text('come 2'))), GridColumn( columnName: 'leave2', columnWidthMode: ColumnWidthMode.auto, label: Container( padding: const EdgeInsets.all(8.0), alignment: Alignment.centerLeft, child: const Text('leave 2'))), GridColumn( columnName: 'come3', columnWidthMode: ColumnWidthMode.auto, label: Container( padding: const EdgeInsets.all(8.0), alignment: Alignment.centerLeft, child: const Text('come 3'))), GridColumn( columnName: 'leave3', columnWidthMode: ColumnWidthMode.auto, label: Container( padding: const EdgeInsets.all(8.0), alignment: Alignment.centerLeft, child: const Text('leave 3'))), GridColumn( columnName: 'come4', columnWidthMode: ColumnWidthMode.auto, label: Container( padding: const EdgeInsets.all(8.0), alignment: Alignment.centerLeft, child: const Text('come 4'))), GridColumn( columnName: 'leave4', columnWidthMode: ColumnWidthMode.auto, label: Container( padding: const EdgeInsets.all(8.0), alignment: Alignment.centerLeft, child: const Text('leave 4'))), GridColumn( columnName: 'come5', columnWidthMode: ColumnWidthMode.auto, label: Container( padding: const EdgeInsets.all(8.0), alignment: Alignment.centerLeft, child: const Text('come 5'))), GridColumn( columnName: 'leave5', columnWidthMode: ColumnWidthMode.auto, label: Container( padding: const EdgeInsets.all(8.0), alignment: Alignment.centerLeft, child: const Text('leave 5'))), 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('duration Is'))), GridColumn( columnName: 'durationShould', columnWidthMode: ColumnWidthMode.auto, label: Container( padding: const EdgeInsets.all(8.0), alignment: Alignment.centerLeft, child: const Text('duration Should'))), 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('current Diff'))), 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('day'))), ]; } @override void initState() { super.initState(); _columns = getColumns(); } @override Widget build(BuildContext context) { return Scaffold( body: FutureBuilder( 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, ), ); }, ), ); } }