You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
269 lines
8.9 KiB
Dart
269 lines
8.9 KiB
Dart
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,
|
|
),
|
|
);
|
|
},
|
|
),
|
|
);
|
|
}
|
|
}
|