Skip to content

Commit

Permalink
Merge pull request #22 from APDI-Team/eventModel
Browse files Browse the repository at this point in the history
  • Loading branch information
syncdoth committed Feb 8, 2023
2 parents 169c578 + 9ad435a commit a3a6e80
Show file tree
Hide file tree
Showing 15 changed files with 457 additions and 296 deletions.
1 change: 0 additions & 1 deletion .gitignore
Expand Up @@ -33,7 +33,6 @@ migrate_working_dir/
/build/

# Web related
lib/generated_plugin_registrant.dart

# Symbolication related
app.*.symbols
Expand Down
2 changes: 1 addition & 1 deletion ios/Podfile.lock
Expand Up @@ -798,7 +798,7 @@ SPEC CHECKSUMS:
FirebaseCore: 813838072b797b64f529f3c2ee35e696e5641dd1
FirebaseCoreInternal: 091bde13e47bb1c5e9fe397634f3593dc390430f
FirebaseFirestore: bda7a1ca8c19319a2acd2761cd4b962022c1d5ea
Flutter: 50d75fe2f02b26cc09d224853bb45737f8b3214a
Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854
flutter_keyboard_visibility: 0339d06371254c3eb25eeb90ba8d17dca8f9c069
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
GoogleUtilities: bad72cb363809015b1f7f19beb1f1cd23c589f95
Expand Down
4 changes: 3 additions & 1 deletion ios/Runner.xcodeproj/project.pbxproj
Expand Up @@ -3,7 +3,7 @@
archiveVersion = 1;
classes = {
};
objectVersion = 50;
objectVersion = 54;
objects = {

/* Begin PBXBuildFile section */
Expand Down Expand Up @@ -200,6 +200,7 @@
/* Begin PBXShellScriptBuildPhase section */
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
Expand Down Expand Up @@ -236,6 +237,7 @@
};
9740EEB61CF901F6004384FC /* Run Script */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
Expand Down
4 changes: 3 additions & 1 deletion ios/Runner/Info.plist
Expand Up @@ -13,7 +13,7 @@
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>aus</string>
<string>aus</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
Expand Down Expand Up @@ -45,5 +45,7 @@
<false/>
<key>CADisableMinimumFrameDurationOnPhone</key>
<true/>
<key>UIApplicationSupportsIndirectInputEvents</key>
<true/>
</dict>
</plist>
2 changes: 1 addition & 1 deletion lib/controllers/event_controller.dart
Expand Up @@ -3,7 +3,7 @@ import '../models/event_model.dart';
class EventController {
Event event = Event();

void changeSave() => event.save = !event.save;
// void changeSave() => event.save = !event.save;

EventController(this.event);
}
76 changes: 52 additions & 24 deletions lib/models/event_model.dart
@@ -1,4 +1,5 @@
import 'package:cloud_firestore/cloud_firestore.dart';
import 'user_model.dart';

const List EVENT_CATEGORY = [
"Event",
Expand All @@ -10,6 +11,7 @@ const List EVENT_CATEGORY = [
];

class Event {
User writer = User();
String title = "Tissue-engineering Integrated";
String category = "Event";
String tag = "#environment #education";
Expand All @@ -21,10 +23,12 @@ class Event {
late DateTime eventTime;
late DateTime uploadTime;
bool formal = false;
bool save = false;
String registerLink = "www.google.com";
// bool save = false;
DocumentReference<Map<String, dynamic>>? firebaseDocRef;

Event({
User? eventWriter,
String? eventTitle,
String? eventCategory,
String? eventTag,
Expand All @@ -34,9 +38,12 @@ class Event {
DateTime? eventHeldTime,
DateTime? eventUploadTime,
bool? eventFormality,
bool? savedEvent,
String? eventRegisterLink,
// bool? savedEvent,
DocumentReference<Map<String, dynamic>>? docRef,
}) {
writer = eventWriter ?? writer;

title = eventTitle ?? title;
category = eventCategory ?? category;
tag = eventTag ?? tag;
Expand All @@ -46,54 +53,75 @@ class Event {
uploadTime = eventUploadTime ?? DateTime.now();
eventTime = eventHeldTime ?? DateTime.now();
formal = eventFormality ?? formal;
save = savedEvent ?? save;
registerLink = eventRegisterLink ?? registerLink;
// save = savedEvent ?? save;
firebaseDocRef = docRef;
}

// factory for events
static Future<Event> fromDocRef(
DocumentReference<Map<String, dynamic>> firebaseDoc) async {
DocumentSnapshot<Map<String, dynamic>> eventData = await firebaseDoc.get();
{DocumentReference<Map<String, dynamic>>? firebaseDoc,
QueryDocumentSnapshot<Map<String, dynamic>>? firebaseSnap}) async {
DocumentSnapshot<Map<String, dynamic>> eventData;

if (firebaseSnap == null) {
assert(firebaseDoc != null);
eventData = await firebaseDoc!.get();
} else {
eventData = firebaseSnap;
firebaseDoc ??= eventData.reference;
}
User eventWriter;
try {
eventWriter = await User.fromUserRef(eventData.get('user'));
} catch (e) {
eventWriter = User(userName: "Anonymous");
}

return Event(
eventWriter: eventWriter,
eventTitle: eventData.get('title'),
eventCategory: eventData.get('category'),
eventTag: eventData.get('tag'),
eventDescription: eventData.get('body'),
eventDescription: eventData.get('event detail'),
eventLanguage: eventData.get('language'),
eventLocation: eventData.get('location'),
eventUploadTime: (eventData.get('timestamp') as Timestamp).toDate(),
eventHeldTime: (eventData.get('timestamp') as Timestamp).toDate(),
eventUploadTime: (eventData.get('uploadTime') as Timestamp).toDate(),
eventHeldTime: (eventData.get('eventTime') as Timestamp).toDate(),
eventFormality: (eventData.get('formal')),
savedEvent: (eventData.get('save')),
eventRegisterLink: eventData.get('registration link'),
// savedEvent: (eventData.get('save')),
docRef: firebaseDoc);
}

// factory for list of events, filter by formality
static Future<List<Event>> getEventsFromFirebase(
{bool formal = false}) async {
List<Event> events = [];
CollectionReference<Map<String, dynamic>> eventCollection =
FirebaseFirestore.instance.collection('events');

Query<Map<String, dynamic>> firebaseQuery;
if (formal) {
firebaseQuery = eventCollection
.where('formal', isEqualTo: true)
.orderBy('timestamp', descending: true)
.limit(20);
} else {
firebaseQuery =
eventCollection.orderBy('timestamp', descending: true).limit(20);
}
Query<Map<String, dynamic>> firebaseQuery = getEventsQuery(formal: formal);

QuerySnapshot<Map<String, dynamic>> firebaseEvents =
await firebaseQuery.get();
await firebaseQuery.get(const GetOptions(source: Source.cache));

for (QueryDocumentSnapshot<Map<String, dynamic>> fbEvent
in firebaseEvents.docs) {
events.add(await Event.fromDocRef(fbEvent.reference));
events.add(await Event.fromDocRef(firebaseDoc: fbEvent.reference));
}
return events;
}

static Query<Map<String, dynamic>> getEventsQuery({bool formal = false}) {
CollectionReference<Map<String, dynamic>> eventCollection =
FirebaseFirestore.instance.collection('event');

Query<Map<String, dynamic>> firebaseQuery =
eventCollection.orderBy('uploadTime', descending: true).limit(20);
if (formal) {
firebaseQuery = firebaseQuery.where('formal', isEqualTo: true);
} else {
firebaseQuery = firebaseQuery.where('formal', isEqualTo: false);
}

return firebaseQuery;
}
}
2 changes: 1 addition & 1 deletion lib/views/components/event_ui.dart
Expand Up @@ -126,7 +126,7 @@ Widget eventHashTag(BuildContext context, EventController controller) {
children: [
Expanded(
child: Text(
controller.event.tag,
"#${controller.event.tag}",
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: Theme.of(context).textTheme.bodyText2?.copyWith(
Expand Down
86 changes: 49 additions & 37 deletions lib/views/event_detail_page.dart
Expand Up @@ -7,6 +7,7 @@ import '../models/event_model.dart';
import 'package:aus/utils/color_utils.dart';
import 'components/event_ui.dart';
import 'package:intl/intl.dart';
import 'package:url_launcher/url_launcher.dart';

class EventDetailPage extends StatefulWidget {
const EventDetailPage({Key? key, required this.title}) : super(key: key);
Expand All @@ -23,6 +24,13 @@ class EventDetailPage extends StatefulWidget {
}

class EventDetailPageState extends State<EventDetailPage> {
Future<void> _launchURL(String url) async {
final Uri uri = Uri(scheme: "https", host: url);
if (!await launchUrl(uri, mode: LaunchMode.externalApplication)) {
throw "Can not launch $url";
}
}

@override
Widget build(BuildContext context) {
final arguments = (ModalRoute.of(context)?.settings.arguments ??
Expand Down Expand Up @@ -50,41 +58,46 @@ class EventDetailPageState extends State<EventDetailPage> {
children: [
categoryButton(context, controller),
eventTitle(context, controller),
categoryHashtagRow(context, controller),
categoryHashtag(context, controller),
quickView(context, controller),
eventDescription(context, controller),
detailedView(context, controller),
Padding(
padding: const EdgeInsets.only(top: 40),
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
ElevatedButton(
onPressed: () {},
style: ButtonStyle(
backgroundColor: MaterialStateProperty.all(
Theme.of(context).colorScheme.secondary),
padding: MaterialStateProperty.all(
const EdgeInsetsDirectional.fromSTEB(
120, 13, 120, 13)),
textStyle:
MaterialStateProperty.all(const TextStyle(
fontSize: 14,
fontFamily: 'Outfit',
fontWeight: FontWeight.w600,
))),
child: const Text('Register'),
Container(
width: MediaQuery.of(context).size.width * 0.81,
height: 28,
child: ElevatedButton(
onPressed: () async {
_launchURL(controller.event.registerLink);
},
style: ButtonStyle(
backgroundColor: MaterialStateProperty.all(
Theme.of(context).colorScheme.secondary),
textStyle:
MaterialStateProperty.all(const TextStyle(
fontSize: 14,
fontFamily: 'Outfit',
fontWeight: FontWeight.w600,
))),
child: const Text('Register'),
),
),
Padding(
padding: const EdgeInsets.only(left: 9),
child: IconButton(
onPressed: () => {
setState(() {
controller.changeSave();
// controller.changeSave();
})
},
icon: (controller.event.save == false)
? const Icon(Icons.bookmark_border)
: const Icon(Icons.bookmark),
icon: const Icon(Icons.bookmark_border),
// icon: (controller.event.save == false)
// ? const Icon(Icons.bookmark_border)
// : const Icon(Icons.bookmark),
color: hexStringToColor("#AAAAAA"),
iconSize: 37.0,
),
Expand Down Expand Up @@ -139,8 +152,7 @@ Widget eventDetailPhoto(BuildContext context, EventController controller) {
}

//category hashtag each element
Widget categoryHashtag(
BuildContext context, EventController controller, hashtag) {
Widget categoryHashtag(BuildContext context, EventController controller) {
return Padding(
padding: const EdgeInsets.only(top: 14, right: 10),
child: Container(
Expand All @@ -151,22 +163,23 @@ Widget categoryHashtag(
),
child: Container(
padding: const EdgeInsetsDirectional.fromSTEB(9, 5, 9, 0),
child: text(context, controller, hashtag, 12),
child: text(context, controller, "#${controller.event.tag}", 12),
),
),
);
}

//all of category hashtags in a row
Widget categoryHashtagRow(BuildContext context, EventController controller) {
final hashtagArr = (controller.event.tag).split(' ');
return Row(
children: [
categoryHashtag(context, controller, hashtagArr[0]),
categoryHashtag(context, controller, hashtagArr[1]),
],
);
}
// Widget categoryHashtagRow(BuildContext context, EventController controller) {
// final hashtagArr = (controller.event.tag).split(' ');
// // const hashtagArr = "#Environment, #Education";
// return Row(
// children: [
// categoryHashtag(context, controller, hashtagArr[0]),
// categoryHashtag(context, controller, hashtagArr[1]),
// ],
// );
// }

//Quick view
Widget quickView(BuildContext context, EventController controller) {
Expand Down Expand Up @@ -200,7 +213,7 @@ Widget quickView(BuildContext context, EventController controller) {
context,
controller,
DateFormat('dd MMM y')
.format(controller.event.uploadTime),
.format(controller.event.eventTime),
15,
bold: true),
],
Expand All @@ -219,7 +232,7 @@ Widget quickView(BuildContext context, EventController controller) {
context,
controller,
DateFormat('Hm')
.format(controller.event.uploadTime),
.format(controller.event.eventTime),
15,
bold: true),
],
Expand Down Expand Up @@ -277,8 +290,7 @@ Widget detailedView(BuildContext context, EventController controller) {
text(
context,
controller,
DateFormat('dd MMM y')
.format(controller.event.uploadTime),
DateFormat('dd MMM y').format(controller.event.eventTime),
15,
bold: true),
],
Expand All @@ -295,7 +307,7 @@ Widget detailedView(BuildContext context, EventController controller) {
textColor: '#AAAAAA'),
),
text(context, controller,
DateFormat('Hm').format(controller.event.uploadTime), 15,
DateFormat('Hm').format(controller.event.eventTime), 15,
bold: true),
],
),
Expand Down

0 comments on commit a3a6e80

Please sign in to comment.