initial commit
This commit is contained in:
@@ -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,
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -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),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -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'),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user