Sfoglia il codice sorgente

calendario ya esta en routes

Oniel Mendez 4 anni fa
parent
commit
c253579844

+ 2
- 0
fast_med_flutter/lib/main.dart Vedi File

@@ -1,5 +1,6 @@
1 1
 import 'package:fast_med_flutter/routes/home.dart';
2 2
 import 'package:fast_med_flutter/routes/ver_oficinas.dart';
3
+import 'package:fast_med_flutter/routes/calendario.dart';
3 4
 import 'package:flutter/material.dart';
4 5
 
5 6
 void main() => runApp(MaterialApp(
@@ -7,5 +8,6 @@ void main() => runApp(MaterialApp(
7 8
     routes: {
8 9
       '/home': (context) => Home(),
9 10
       '/verOficinas': (context) => VerOficinas(),
11
+      '/calendario': (context) => Calendario(),
10 12
     }
11 13
 ));

+ 347
- 0
fast_med_flutter/lib/routes/calendario.dart Vedi File

@@ -0,0 +1,347 @@
1
+import 'package:flutter/material.dart';
2
+import 'package:intl/date_symbol_data_local.dart';
3
+import 'package:table_calendar/table_calendar.dart';
4
+
5
+// Dias sin Citas Disponibles
6
+final Map<DateTime, List> _holidays = {
7
+  DateTime(2020, 11, 6): ['No Hay Citas'],
8
+  DateTime(2020, 11, 3): ['Dia Elecciones'],
9
+
10
+};
11
+
12
+void main() {
13
+  initializeDateFormatting().then((_) => runApp(Calendario()));
14
+}
15
+
16
+
17
+
18
+class Calendario extends StatelessWidget {
19
+  @override
20
+  Widget build(BuildContext context) {
21
+    return MaterialApp(
22
+      title: 'Citas Disponibles',
23
+      theme: ThemeData(
24
+        primarySwatch: Colors.blue,
25
+      ),
26
+      home: MyHomePage(title: 'Citas Disponibles'),
27
+    );
28
+  }
29
+}
30
+
31
+class MyHomePage extends StatefulWidget {
32
+  MyHomePage({Key key, this.title}) : super(key: key);
33
+
34
+  final String title;
35
+
36
+  @override
37
+  _MyHomePageState createState() => _MyHomePageState();
38
+}
39
+
40
+class _MyHomePageState extends State<MyHomePage> with TickerProviderStateMixin {
41
+  Map<DateTime, List> _events;
42
+  List _selectedEvents;
43
+  AnimationController _animationController;
44
+  CalendarController _calendarController;
45
+
46
+  @override
47
+  void initState() {
48
+    super.initState();
49
+    final _selectedDay = DateTime.now();
50
+
51
+    _events = {
52
+
53
+      _selectedDay.add(Duration(days: 3)): Set.from([ 'Cita Cardiologo', 'Cita Dentista']).toList(),
54
+      _selectedDay.add(Duration(days: 22)): ['Cita Cardiologo', 'Cita Dentista'],
55
+
56
+    };
57
+
58
+    _selectedEvents = _events[_selectedDay] ?? [];
59
+    _calendarController = CalendarController();
60
+
61
+    _animationController = AnimationController(
62
+      vsync: this,
63
+      duration: const Duration(milliseconds: 400),
64
+    );
65
+
66
+    _animationController.forward();
67
+  }
68
+
69
+  @override
70
+  void dispose() {
71
+    _animationController.dispose();
72
+    _calendarController.dispose();
73
+    super.dispose();
74
+  }
75
+
76
+  void _onDaySelected(DateTime day, List events, List holidays) {
77
+    print('CALLBACK: _onDaySelected');
78
+    setState(() {
79
+      _selectedEvents = events;
80
+    });
81
+  }
82
+
83
+  void _onVisibleDaysChanged(DateTime first, DateTime last, CalendarFormat format) {
84
+    print('CALLBACK: _onVisibleDaysChanged');
85
+  }
86
+
87
+  void _onCalendarCreated(DateTime first, DateTime last, CalendarFormat format) {
88
+    print('CALLBACK: _onCalendarCreated');
89
+  }
90
+
91
+  @override
92
+  Widget build(BuildContext context) {
93
+    return Scaffold(
94
+      appBar: AppBar(
95
+        title: Text(widget.title),
96
+      ),
97
+      body: Column(
98
+        mainAxisSize: MainAxisSize.max,
99
+        children: <Widget>[
100
+          // Switch out 2 lines below to play with TableCalendar's settings
101
+          //-----------------------
102
+          _buildTableCalendar(),
103
+          // _buildTableCalendarWithBuilders(),
104
+          const SizedBox(height: 8.0),
105
+          _buildButtons(),
106
+          const SizedBox(height: 8.0),
107
+          Expanded(child: _buildEventList()),
108
+        ],
109
+      ),
110
+    );
111
+  }
112
+  //Back button
113
+  Widget BackButton(BuildContext context){
114
+    return InkWell(
115
+      onTap: (){
116
+        Navigator.pop(context);
117
+      },
118
+      child: Row(
119
+          children: <Widget>[
120
+            Container(
121
+              padding: EdgeInsets.only(left: 0, top:10, bottom: 10),
122
+              child: Icon(Icons.arrow_back_ios, color: Colors.black),
123
+            ),
124
+            Text("Black",
125
+                style: TextStyle(fontSize: 12, fontWeight: FontWeight.w500))
126
+          ]
127
+      ),
128
+    );
129
+  }
130
+
131
+  // Simple TableCalendar configuration (using Styles)
132
+  Widget _buildTableCalendar() {
133
+    return TableCalendar(
134
+      calendarController: _calendarController,
135
+      events: _events,
136
+      holidays: _holidays,
137
+      startingDayOfWeek: StartingDayOfWeek.monday,
138
+      calendarStyle: CalendarStyle(
139
+        selectedColor: Colors.lightBlueAccent,
140
+        todayColor: Colors.blueAccent,
141
+        markersColor: Colors.brown,
142
+        outsideDaysVisible: false,
143
+      ),
144
+      headerStyle: HeaderStyle(
145
+        formatButtonTextStyle: TextStyle().copyWith(color: Colors.white, fontSize: 15.0),
146
+        formatButtonDecoration: BoxDecoration(
147
+          color: Colors.lightBlue,
148
+          borderRadius: BorderRadius.circular(16.0),
149
+        ),
150
+      ),
151
+      onDaySelected: _onDaySelected,
152
+      onVisibleDaysChanged: _onVisibleDaysChanged,
153
+      onCalendarCreated: _onCalendarCreated,
154
+    );
155
+  }
156
+
157
+  // More advanced TableCalendar configuration (using Builders & Styles)
158
+  Widget _buildTableCalendarWithBuilders() {
159
+    return TableCalendar(
160
+      locale: 'pl_PL',
161
+      calendarController: _calendarController,
162
+      events: _events,
163
+      holidays: _holidays,
164
+      initialCalendarFormat: CalendarFormat.month,
165
+      formatAnimation: FormatAnimation.slide,
166
+      startingDayOfWeek: StartingDayOfWeek.sunday,
167
+      availableGestures: AvailableGestures.all,
168
+      availableCalendarFormats: const {
169
+        CalendarFormat.month: '',
170
+        CalendarFormat.week: '',
171
+      },
172
+      calendarStyle: CalendarStyle(
173
+        outsideDaysVisible: false,
174
+        weekendStyle: TextStyle().copyWith(color: Colors.blue),
175
+        holidayStyle: TextStyle().copyWith(color: Colors.blue),
176
+      ),
177
+      daysOfWeekStyle: DaysOfWeekStyle(
178
+        weekendStyle: TextStyle().copyWith(color: Colors.blue),
179
+      ),
180
+      headerStyle: HeaderStyle(
181
+        centerHeaderTitle: true,
182
+        formatButtonVisible: false,
183
+      ),
184
+      builders: CalendarBuilders(
185
+        selectedDayBuilder: (context, date, _) {
186
+          return FadeTransition(
187
+            opacity: Tween(begin: 0.0, end: 1.0).animate(_animationController),
188
+            child: Container(
189
+              margin: const EdgeInsets.all(4.0),
190
+              padding: const EdgeInsets.only(top: 5.0, left: 6.0),
191
+              color: Colors.green,
192
+              width: 100,
193
+              height: 100,
194
+              child: Text(
195
+                '${date.day}',
196
+                style: TextStyle().copyWith(fontSize: 16.0),
197
+              ),
198
+            ),
199
+          );
200
+        },
201
+        todayDayBuilder: (context, date, _) {
202
+          return Container(
203
+            margin: const EdgeInsets.all(4.0),
204
+            padding: const EdgeInsets.only(top: 5.0, left: 6.0),
205
+            color: Colors.amber,
206
+            width: 100,
207
+            height: 100,
208
+            child: Text(
209
+              '${date.day}',
210
+              style: TextStyle().copyWith(fontSize: 16.0),
211
+            ),
212
+          );
213
+        },
214
+        markersBuilder: (context, date, events, holidays) {
215
+          final children = <Widget>[];
216
+
217
+          if (events.isNotEmpty) {
218
+            children.add(
219
+              Positioned(
220
+                right: 1,
221
+                bottom: 1,
222
+                child: _buildEventsMarker(date, events),
223
+              ),
224
+            );
225
+          }
226
+
227
+          if (holidays.isNotEmpty) {
228
+            children.add(
229
+              Positioned(
230
+                right: -2,
231
+                top: -2,
232
+                child: _buildHolidaysMarker(),
233
+              ),
234
+            );
235
+          }
236
+
237
+          return children;
238
+        },
239
+      ),
240
+      onDaySelected: (date, events, holidays) {
241
+        _onDaySelected(date, events, holidays);
242
+        _animationController.forward(from: 0.0);
243
+      },
244
+      onVisibleDaysChanged: _onVisibleDaysChanged,
245
+      onCalendarCreated: _onCalendarCreated,
246
+    );
247
+  }
248
+
249
+  Widget _buildEventsMarker(DateTime date, List events) {
250
+    return AnimatedContainer(
251
+      duration: const Duration(milliseconds: 300),
252
+      decoration: BoxDecoration(
253
+        shape: BoxShape.rectangle,
254
+        color: _calendarController.isSelected(date)
255
+            ? Colors.brown[500]
256
+            : _calendarController.isToday(date) ? Colors.brown : Colors.blue,
257
+      ),
258
+      width: 16.0,
259
+      height: 16.0,
260
+      child: Center(
261
+        child: Text(
262
+          '${events.length}',
263
+          style: TextStyle().copyWith(
264
+            color: Colors.green,
265
+            fontSize: 12.0,
266
+          ),
267
+        ),
268
+      ),
269
+    );
270
+  }
271
+
272
+  Widget _buildHolidaysMarker() {
273
+    return Icon(
274
+      Icons.add_box,
275
+      size: 20.0,
276
+      color: Colors.blueGrey,
277
+    );
278
+  }
279
+
280
+  Widget _buildButtons() {
281
+    final dateTime = _events.keys.elementAt(_events.length - 2);
282
+
283
+    return Column(
284
+      children: <Widget>[
285
+        Row(
286
+          mainAxisSize: MainAxisSize.max,
287
+          mainAxisAlignment: MainAxisAlignment.spaceEvenly,
288
+          children: <Widget>[
289
+            RaisedButton(
290
+              child: Text('Mes'),
291
+              onPressed: () {
292
+                setState(() {
293
+                  _calendarController.setCalendarFormat(CalendarFormat.month);
294
+                });
295
+              },
296
+            ),
297
+            RaisedButton(
298
+              child: Text('2 Semanas'),
299
+              onPressed: () {
300
+                setState(() {
301
+                  _calendarController.setCalendarFormat(CalendarFormat.twoWeeks);
302
+                });
303
+              },
304
+            ),
305
+            RaisedButton(
306
+              child: Text('Semana'),
307
+              onPressed: () {
308
+                setState(() {
309
+                  _calendarController.setCalendarFormat(CalendarFormat.week);
310
+                });
311
+              },
312
+            ),
313
+          ],
314
+        ),
315
+        const SizedBox(height: 8.0),
316
+        RaisedButton(
317
+          child: Text('Recuerde Cita ${dateTime.day}-${dateTime.month}-${dateTime.year}'),
318
+          onPressed: () {
319
+            _calendarController.setSelectedDay(
320
+              DateTime(dateTime.year, dateTime.month, dateTime.day),
321
+              runCallback: true,
322
+            );
323
+          },
324
+        ),
325
+      ],
326
+    );
327
+  }
328
+
329
+
330
+  Widget _buildEventList() {
331
+    return ListView(
332
+      children: _selectedEvents
333
+          .map((event) => Container(
334
+        decoration: BoxDecoration(
335
+          border: Border.all(width: 0.8),
336
+          borderRadius: BorderRadius.circular(12.0),
337
+        ),
338
+        margin: const EdgeInsets.symmetric(horizontal: 8.0, vertical: 4.0),
339
+        child: ListTile(
340
+          title: Text(event.toString()),
341
+          onTap: () => print('$event tapped!'),
342
+        ),
343
+      ))
344
+          .toList(),
345
+    );
346
+  }
347
+}

+ 12
- 0
fast_med_flutter/lib/routes/home.dart Vedi File

@@ -41,6 +41,18 @@ class _HomeState extends State<Home>{
41 41
               color: Colors.purple,
42 42
 
43 43
             ),
44
+            new FlatButton(
45
+              minWidth: 300.0,
46
+              height: 100.0,
47
+              onPressed: (){
48
+                Navigator.pushNamed(context, '/calendario');
49
+              },
50
+              child: Text('Calendario',
51
+                style: TextStyle(fontSize: 36),
52
+              ),
53
+              color: Colors.purple,
54
+
55
+            ),
44 56
             ],
45 57
         ),
46 58
 

+ 22
- 0
fast_med_flutter/pubspec.lock Vedi File

@@ -81,6 +81,13 @@ packages:
81 81
       url: "https://pub.dartlang.org"
82 82
     source: hosted
83 83
     version: "3.1.4"
84
+  intl:
85
+    dependency: transitive
86
+    description:
87
+      name: intl
88
+      url: "https://pub.dartlang.org"
89
+    source: hosted
90
+    version: "0.16.1"
84 91
   matcher:
85 92
     dependency: transitive
86 93
     description:
@@ -109,6 +116,13 @@ packages:
109 116
       url: "https://pub.dartlang.org"
110 117
     source: hosted
111 118
     version: "1.9.2"
119
+  simple_gesture_detector:
120
+    dependency: transitive
121
+    description:
122
+      name: simple_gesture_detector
123
+      url: "https://pub.dartlang.org"
124
+    source: hosted
125
+    version: "0.1.4"
112 126
   sky_engine:
113 127
     dependency: transitive
114 128
     description: flutter
@@ -142,6 +156,13 @@ packages:
142 156
       url: "https://pub.dartlang.org"
143 157
     source: hosted
144 158
     version: "1.1.0-nullsafety.1"
159
+  table_calendar:
160
+    dependency: "direct main"
161
+    description:
162
+      name: table_calendar
163
+      url: "https://pub.dartlang.org"
164
+    source: hosted
165
+    version: "2.3.0"
145 166
   term_glyph:
146 167
     dependency: transitive
147 168
     description:
@@ -172,3 +193,4 @@ packages:
172 193
     version: "2.1.0-nullsafety.3"
173 194
 sdks:
174 195
   dart: ">=2.10.0-110 <2.11.0"
196
+  flutter: ">=1.17.0 <2.0.0"

+ 1
- 0
fast_med_flutter/pubspec.yaml Vedi File

@@ -28,6 +28,7 @@ dependencies:
28 28
   # The following adds the Cupertino Icons font to your application.
29 29
   # Use with the CupertinoIcons class for iOS style icons.
30 30
   cupertino_icons: ^1.0.0
31
+  table_calendar: ^2,0,1
31 32
 
32 33
   #
33 34
   http: ^0.12.2