import 'package:datetime_picker_formfield/datetime_picker_formfield.dart'; import 'package:flutter/material.dart'; import 'package:intl/intl.dart' as intl; import 'package:go_router/go_router.dart'; import 'package:oc_front/core/services/specialized_services/workflow_execution_service.dart'; import 'package:oc_front/main.dart'; import 'package:oc_front/pages/abstract_page.dart'; import 'package:oc_front/widgets/sheduler_items/schedule.dart'; class SchedulerFactory implements AbstractFactory { @override GlobalKey getKey() { return key; } static GlobalKey key = GlobalKey(); @override bool searchFill() { return false; } @override Widget factory(GoRouterState state, List args) { return SchedulerPageWidget(); } @override void search(BuildContext context, bool special) { } } class SchedulerPageWidget extends StatefulWidget { bool isList = true; DateTime start = DateTime.now(); DateTime end = DateTime.now().add(const Duration(days: 180)); final WorkflowExecutionService _service = WorkflowExecutionService(); SchedulerPageWidget(): super(key: SchedulerFactory.key); @override SchedulerPageWidgetState createState() => SchedulerPageWidgetState(); static void search(BuildContext context) { } static Widget factory() { return SchedulerPageWidget(); } } class SchedulerPageWidgetState extends State { @override Widget build(BuildContext context) { GlobalKey k = GlobalKey(); return Column( children: [ Container( color: lightColor, height: 50, width: getMainWidth(context), child: Padding(padding: const EdgeInsets.symmetric(horizontal: 50), child: Row( children: [ Padding(padding: const EdgeInsets.only(right: 30), child: Tooltip( message: widget.isList ? "calendar view" : "list view", child: InkWell( child: Icon( widget.isList ? Icons.calendar_month : Icons.list, color: Colors.white , size: 25 ), onTap: () { widget.isList = !widget.isList; k.currentState?.setState(() { k.currentState?.widget.isList = widget.isList; }); }) ), ), Container(padding: const EdgeInsets.only(left: 20), width: getMainWidth(context) / 5, height: 30, child: DateTimeField( validator: (value) { return null; }, resetIcon: null, onShowPicker: (context, currentValue) async { var date = await showDatePicker( builder: (BuildContext context, Widget? child) { Widget w = Theme( data: ThemeData( cardTheme: CardTheme(elevation: 0, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(0))), dialogTheme: DialogTheme(elevation: 0, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(0))), colorScheme: ColorScheme.light( background: midColor, tertiary: Colors.grey, secondary: Colors.grey, primary: Colors.black), ), child: child ?? Container(), ); return w; }, context: context, firstDate: DateTime(1900), initialDate: widget.start, lastDate: DateTime(2100) ); return date; }, format: intl.DateFormat('y-M-dd hh:mm:ss'), initialValue: widget.start, onChanged: (value) { if (value == null) { return; } setState(() { widget.start = value; }); }, style: const TextStyle(fontSize: 12), decoration: const InputDecoration( fillColor: Colors.white, floatingLabelBehavior: FloatingLabelBehavior.always, filled: true, alignLabelWithHint: false, hintText: "enter start date...", labelText: "", errorStyle: TextStyle(fontSize: 0), hintStyle: TextStyle(fontSize: 10), labelStyle: TextStyle(fontSize: 15, color: Colors.black, fontWeight: FontWeight.w500), enabledBorder: OutlineInputBorder(borderSide: BorderSide(color: Colors.transparent)), border: OutlineInputBorder(borderSide: BorderSide(color: Colors.transparent)), contentPadding: EdgeInsets.symmetric(horizontal: 10, vertical: 5), ), ) ), Container(padding: const EdgeInsets.only(left: 20), child: const Text("TO", style: TextStyle(color: Colors.white, fontSize: 15, fontWeight: FontWeight.w500))), Container( padding: const EdgeInsets.only(left: 20, right: 20), width: getMainWidth(context) / 5, height: 30, child: DateTimeField( validator: (value) { return null; }, resetIcon: null, onShowPicker: (context, currentValue) async { var date = await showDatePicker( builder: (BuildContext context, Widget? child) { Widget w = Theme( data: ThemeData( cardTheme: CardTheme(elevation: 0, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(0))), dialogTheme: DialogTheme(elevation: 0, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(0))), colorScheme: ColorScheme.light( background: midColor, tertiary: Colors.grey, secondary: Colors.grey, primary: Colors.black), ), child: child ?? Container(), ); return w; }, context: context, firstDate: DateTime(1900), initialDate: widget.end, lastDate: DateTime(2100) ); return date; }, format: intl.DateFormat('y-M-dd hh:mm:ss'), initialValue: widget.end, onChanged: (value) { if (value == null) { return; } setState(() { widget.start = value; }); }, style: const TextStyle(fontSize: 12), decoration: const InputDecoration( fillColor: Colors.white, floatingLabelBehavior: FloatingLabelBehavior.always, filled: true, alignLabelWithHint: false, hintText: "enter end date...", labelText: "", errorStyle: TextStyle(fontSize: 0), hintStyle: TextStyle(fontSize: 10), labelStyle: TextStyle(fontSize: 15, color: Colors.black, fontWeight: FontWeight.w500), enabledBorder: OutlineInputBorder(borderSide: BorderSide(color: Colors.transparent)), border: OutlineInputBorder(borderSide: BorderSide(color: Colors.transparent)), contentPadding: EdgeInsets.symmetric(horizontal: 10, vertical: 5), ), ) ), Tooltip( message: "refresh scheduler", child: InkWell( onTap: () => setState(() {}), child: const Icon(Icons.refresh, color: Colors.white,), ), ) ])) ), ScheduleWidget( service: widget._service, key: k, start: widget.start, end : widget.end, isList: widget.isList, ) ]); } }