mirror of https://github.com/flutter/samples.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
163 lines
4.3 KiB
163 lines
4.3 KiB
// Copyright 2024 The Flutter Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
import 'package:flutter/cupertino.dart';
|
|
|
|
import 'color_options.dart';
|
|
import 'event.dart';
|
|
import 'event_task.dart';
|
|
|
|
class EventData with ChangeNotifier {
|
|
static final _events = buildSampleData();
|
|
|
|
void add(Event event) {
|
|
_events.add(event);
|
|
notifyListeners();
|
|
}
|
|
|
|
void delete(Event event) {
|
|
_events.remove(event);
|
|
notifyListeners();
|
|
}
|
|
|
|
void update(Event original, Event updated) {
|
|
_events.firstWhere((e) => e.id == original.id).updateWith(updated);
|
|
notifyListeners();
|
|
}
|
|
|
|
void exists(Event event) => _events.contains(event);
|
|
|
|
List<Event> sorted(Period period) => _events
|
|
.where(
|
|
(e) => switch (period) {
|
|
Period.nextSevenDays => e.isWithinSevenDays,
|
|
Period.nextThirtyDays => e.isWithinSevenToThirtyDays,
|
|
Period.past => e.isPast,
|
|
Period.future => e.isDistant,
|
|
},
|
|
)
|
|
.toList()
|
|
..sort((e1, e2) => e1.date.compareTo(e2.date));
|
|
}
|
|
|
|
enum Period {
|
|
nextSevenDays(name: 'Next 7 Days'),
|
|
nextThirtyDays(name: 'Next 30 Days'),
|
|
future(name: 'Future'),
|
|
past(name: 'Past');
|
|
|
|
const Period({required this.name});
|
|
|
|
final String name;
|
|
}
|
|
|
|
List<Event> buildSampleData() {
|
|
return [
|
|
Event(
|
|
title: 'Maya\'s Birthday',
|
|
color: ColorOptions.red,
|
|
icon: CupertinoIcons.gift,
|
|
tasks: EventTask.buildList([
|
|
'Guava kombucha',
|
|
'Paper cups and plates',
|
|
'Cheese plate',
|
|
'Party poppers',
|
|
]),
|
|
date: FromNow.roundedHours(24 * 30),
|
|
),
|
|
Event(
|
|
title: 'Pagliacci',
|
|
color: ColorOptions.yellow,
|
|
// TODO(mit-mit): Use the icon "theatermasks.fill".
|
|
icon: CupertinoIcons.thermometer_snowflake,
|
|
tasks: EventTask.buildList([
|
|
'Buy new tux',
|
|
'Get tickets',
|
|
'Pick up Carmen at the airport and bring her to the show',
|
|
]),
|
|
date: FromNow.roundedHours(22),
|
|
),
|
|
Event(
|
|
title: 'Doctor\'s Appointment',
|
|
// TODO(mit-mit): Use the icon "facemask.fill".
|
|
icon: CupertinoIcons.lab_flask_solid,
|
|
color: ColorOptions.indigo,
|
|
tasks:
|
|
EventTask.buildList(['Bring medical ID', 'Record heart rate data']),
|
|
date: FromNow.roundedHours(24 * 4),
|
|
),
|
|
Event(
|
|
title: 'Camping Trip',
|
|
// TODO(mit-mit): Use the icon "leaf.fill".
|
|
icon: CupertinoIcons.leaf_arrow_circlepath,
|
|
color: ColorOptions.green,
|
|
tasks: EventTask.buildList([
|
|
'Find a sleeping bag',
|
|
'Bug spray',
|
|
'Paper towels',
|
|
'Food for 4 meals',
|
|
'Straw hat',
|
|
]),
|
|
date: FromNow.roundedHours(36),
|
|
),
|
|
Event(
|
|
title: 'Game Night',
|
|
icon: CupertinoIcons.gamecontroller_fill,
|
|
color: ColorOptions.cyan,
|
|
tasks: EventTask.buildList([
|
|
'Find a board game to bring',
|
|
'Bring a desert to share',
|
|
]),
|
|
date: FromNow.roundedHours(24 * 2),
|
|
),
|
|
Event(
|
|
title: 'First Day of School',
|
|
// TODO(mit-mit): Use the icon "graduationcap.fill".
|
|
icon: CupertinoIcons.hammer,
|
|
color: ColorOptions.primary,
|
|
tasks: EventTask.buildList([
|
|
'Notebooks',
|
|
'Pencils',
|
|
'Binder',
|
|
'First day of school outfit',
|
|
]),
|
|
date: FromNow.roundedHours(24 * 365),
|
|
),
|
|
Event(
|
|
title: 'Book Launch',
|
|
icon: CupertinoIcons.book_fill,
|
|
color: ColorOptions.purple,
|
|
tasks: EventTask.buildList([
|
|
'Finish first draft',
|
|
'Send draft to editor',
|
|
'Final read-through',
|
|
]),
|
|
date: FromNow.roundedHours(24 * 365 * 2),
|
|
),
|
|
Event(
|
|
title: 'WWDC',
|
|
// TODO(mit-mit): Use the icon "globe.americas.fill"
|
|
icon: CupertinoIcons.globe,
|
|
color: ColorOptions.gray,
|
|
tasks: EventTask.buildList([
|
|
'Watch Keynote',
|
|
'Watch What\'s new in SwiftUI',
|
|
'Go to DT developer labs',
|
|
'Learn about Create ML',
|
|
]),
|
|
date: DateTime(7, 6, 2021)),
|
|
Event(
|
|
title: 'Sayulita Trip',
|
|
icon: CupertinoIcons.briefcase_fill,
|
|
color: ColorOptions.orange,
|
|
tasks: EventTask.buildList([
|
|
'Buy plane tickets',
|
|
'Get a new bathing suit',
|
|
'Find a hotel room',
|
|
]),
|
|
date: FromNow.roundedHours(24 * 19),
|
|
),
|
|
];
|
|
}
|