No Description

calendario.dart 5.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. import 'package:flutter/material.dart';
  2. import 'package:fast_med_flutter/ui/pages/add_event.dart';
  3. import 'package:fast_med_flutter/ui/pages/view_event.dart';
  4. import 'package:table_calendar/table_calendar.dart';
  5. import 'dart:convert';
  6. import 'package:shared_preferences/shared_preferences.dart';
  7. //import 'package:firebase_core/firebase_core.dart';
  8. import 'dart:async';
  9. import 'package:http/http.dart' as http;
  10. import 'model/event.dart';
  11. void main() async{
  12. var url = 'https://ada.uprrp.edu/~jorge.lopez19/FastMed/API/InsertEvent.php';
  13. WidgetsFlutterBinding.ensureInitialized();
  14. //==final data = await http.post(url, body: {
  15. //"name": name.text,
  16. //"reason": reason.text,
  17. //"date": date.text,
  18. //"time": time.text,
  19. // }
  20. //);
  21. runApp(Calendario());
  22. }
  23. class Calendario extends StatelessWidget {
  24. @override
  25. Widget build(BuildContext context) {
  26. return MaterialApp(
  27. title: 'Citas Disponibles',
  28. theme: ThemeData(
  29. primarySwatch: Colors.blue,
  30. ),
  31. home: MyHomePage(),
  32. routes: {
  33. "add_event": (_) => AddEventPage(),
  34. },
  35. );
  36. }
  37. }
  38. class MyHomePage extends StatefulWidget {
  39. @override
  40. _MyHomePageState createState() => _MyHomePageState();
  41. }
  42. class _MyHomePageState extends State<MyHomePage> {
  43. CalendarController _controller;
  44. Map<DateTime, List<dynamic>> _events;
  45. List<dynamic> _selectedEvents;
  46. @override
  47. void initState() {
  48. super.initState();
  49. _controller = CalendarController();
  50. _events = {};
  51. _selectedEvents = [];
  52. }
  53. Map<DateTime, List<dynamic>> _groupEvents(List<EventModel> events) {
  54. Map<DateTime,List<dynamic>> data = {};
  55. events.forEach((event) {
  56. DateTime date = DateTime(event.eventDate.year, event.eventDate.month,
  57. event.eventDate.day, 12);
  58. if(data[date] == null) data[date] = [];
  59. data[date].add(event);
  60. });
  61. return data;
  62. }
  63. @override
  64. Widget build(BuildContext context) {
  65. return Scaffold(
  66. appBar: AppBar(
  67. title: Text('Citas Disponibles'),
  68. ),
  69. body: StreamBuilder<List<EventModel>>(
  70. // stream: eventDBS.streamList(),
  71. builder: (context, snapshot) {
  72. if (snapshot.hasData) {
  73. List<EventModel> allEvents = snapshot.data;
  74. if (allEvents.isNotEmpty) {
  75. _events = _groupEvents(allEvents);
  76. }
  77. }
  78. return SingleChildScrollView(
  79. child: Column(
  80. crossAxisAlignment: CrossAxisAlignment.start,
  81. children: <Widget>[
  82. TableCalendar(
  83. events: _events,
  84. initialCalendarFormat: CalendarFormat.month,
  85. calendarStyle: CalendarStyle(
  86. canEventMarkersOverflow: true,
  87. todayColor: Colors.orange,
  88. selectedColor: Theme
  89. .of(context)
  90. .primaryColor,
  91. todayStyle: TextStyle(
  92. fontWeight: FontWeight.bold,
  93. fontSize: 18.0,
  94. color: Colors.white)),
  95. headerStyle: HeaderStyle(
  96. centerHeaderTitle: true,
  97. formatButtonDecoration: BoxDecoration(
  98. color: Colors.orange,
  99. borderRadius: BorderRadius.circular(20.0),
  100. ),
  101. formatButtonTextStyle: TextStyle(color: Colors.white),
  102. formatButtonShowsNext: false,
  103. ),
  104. startingDayOfWeek: StartingDayOfWeek.monday,
  105. builders: CalendarBuilders(
  106. selectedDayBuilder: (context, date, events) =>
  107. Container(
  108. margin: const EdgeInsets.all(4.0),
  109. alignment: Alignment.center,
  110. decoration: BoxDecoration(
  111. color: Theme
  112. .of(context)
  113. .primaryColor,
  114. borderRadius: BorderRadius.circular(10.0)),
  115. child: Text(
  116. date.day.toString(),
  117. style: TextStyle(color: Colors.white),
  118. )),
  119. todayDayBuilder: (context, date, events) =>
  120. Container(
  121. margin: const EdgeInsets.all(4.0),
  122. alignment: Alignment.center,
  123. decoration: BoxDecoration(
  124. color: Colors.orange,
  125. borderRadius: BorderRadius.circular(10.0)),
  126. child: Text(
  127. date.day.toString(),
  128. style: TextStyle(color: Colors.white),
  129. )),
  130. ),
  131. calendarController: _controller,
  132. ),
  133. ..._selectedEvents.map((event) =>
  134. ListTile(
  135. title: Text(event.title),
  136. onTap: () {
  137. Navigator.push(
  138. context,
  139. MaterialPageRoute(
  140. builder: (_) =>
  141. EventDetailsPage(
  142. event: event,
  143. )));
  144. },
  145. )),
  146. ],
  147. ),
  148. );
  149. }
  150. ),
  151. floatingActionButton: FloatingActionButton(
  152. child: Icon(Icons.add),
  153. onPressed: () => Navigator.pushNamed(context, 'add_event'),
  154. ),
  155. );
  156. }
  157. }