Skip to content

Commit

Permalink
Merge branch 'dev'
Browse files Browse the repository at this point in the history
  • Loading branch information
PLGuerraDesigns committed Mar 15, 2024
2 parents 74924ba + fd448bd commit dc1043a
Show file tree
Hide file tree
Showing 20 changed files with 422 additions and 454 deletions.
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
## 2.0.13

- NEW: Added Pinch to Zoom functionality to images in the media player.
- FIX: Fixed issue with media player not loading and switching between different media types correctly.
- REVISED: Added a radius to the media player and media browser thumbnails.
- REVISED: Reduced text sizes for the media player captions and the body text on the details page.
- REVISED: Replaced 'Professional' option thumbnail with a new image.
- REVISED: Updated content for Project (AMG GT3 Wheel)
- REVISED: Updated content for Professional Experience (Atlantic Insurance Company Ltd.)
- REVISED: Removed light mode profile photo. Dark mode profile photo is now used for both light and dark mode.
Binary file modified assets/images/home/professional.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed assets/images/home/profile_light.jpg
Binary file not shown.
Binary file added assets/images/personal/amg_gt3_wheel/image_7.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/images/personal/amg_gt3_wheel/image_7.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/images/personal/amg_gt3_wheel/video_1.mp4
Binary file not shown.
Binary file modified assets/images/professional/atlantic_insurance/image_1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/images/professional/atlantic_insurance/thumbnail.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
25 changes: 15 additions & 10 deletions assets/json/professional_experience.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,28 +8,33 @@
"endDate": null,
"description": "As a contract software engineer, I led the strategic planning, development, and successful launch of the AIC Mobile App and Management Portal for Atlantic Insurance Company Limited.\n\nThis innovative app, available for Android and iOS, was meticulously designed with a customer-centric approach to enrich interactions with the company.\n\nIts features includes access to insured item details, a digital certificate of insurance, timely renewal notifications, claims filing, quote requests, office location guidance, and more.\n\nThis endeavor reflects AIC's commitment to delivering unsurpassed customer service, upholding integrity, demonstrating professionalism, and fostering teamwork in line with Atlantic Insurance Company Limited's values.",
"videoCount": 0,
"imageCount": 2,
"imageCount": 3,
"youtubeVideoIds": [
"TcdKbZmju5I",
"W37tmY7OPWw"
"Mz4JteT4jLw",
"TcdKbZmju5I"
],
"externalLinks": [
{
"title": "Atlantic Insurance Company Ltd.",
"url": "https://aicbelize.azurewebsites.net/"
},
{
"title": "Apple App Store",
"title": "Download on the App Store",
"url": "https://apps.apple.com/us/app/aic-mobile-app/id1534979546"
},
{
"title": "Google Play Store",
"title": "Get it on Google Play",
"url": "https://play.google.com/store/apps/details?id=com.aicbelize.AIMobile"
},
{
"title": "AIC Mobile App Support",
"url": "https://aic-support.web.app"
},
{
"title": "Atlantic Insurance Company Ltd.",
"url": "https://aicbelize.azurewebsites.net/"
}
],
"mediaCaptions": [
"",
"Installation Flyer"
"Store Screenshots",
"UI Design"
],
"webImages": []
},
Expand Down
6 changes: 4 additions & 2 deletions assets/json/projects.json
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@
"Wheel Layout and Button Mapping.",
"8-PIN DIN and Paddle Shifter Wiring.",
"Material Strength and Feel Testing.",
"Application of Vinyl and Decals.",
"Application of Vinyl Wrap and Decals.",
"Wheel Fully Assembled.",
"Improved Handle Grip.",
"Finished wheel mounted on a custom display stand.",
Expand All @@ -197,6 +197,7 @@
"Community Member Build",
"Community Member Build",
"Community Member Build",
"Community Member Build",
"Community Member Build"
],
"externalLinks": [
Expand Down Expand Up @@ -237,7 +238,8 @@
"https://cdn.thingiverse.com/assets/a9/d5/6e/59/76/IMG_20191001_172428.jpg",
"https://cdn.thingiverse.com/renders/88/e5/e8/5b/a0/6ea030e2dbcc1b8c82ef0ef56de93fc9_display_large.jpg",
"https://cdn.thingiverse.com/renders/7e/be/d2/09/ac/86dc5ba0f800cf421ee795145cbdea15_display_large.JPG",
"https://cdn.thingiverse.com/renders/df/17/0f/d5/a6/2723476733c115f2167e5e15e1f090ad_display_large.jpg"
"https://cdn.thingiverse.com/renders/df/17/0f/d5/a6/2723476733c115f2167e5e15e1f090ad_display_large.jpg",
"https://cdn.thingiverse.com/assets/7f/8e/b0/a6/97/dc90e110-15da-4dca-8109-b9910a4b4e12.jpg"
]
},
{
Expand Down
7 changes: 7 additions & 0 deletions lib/common/enums.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
/// The different types of media that can be displayed in the media player and browser.
enum MediaType {
localImage,
networkImage,
localVideo,
youTubeVideo,
}
4 changes: 2 additions & 2 deletions lib/common/strings.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ class Strings {
Strings._();

static const String currentLocation = 'VA, USA';
static const String lastUpdated = 'Updated JAN 2024';
static const String lastUpdated = 'Updated MAR 2024';

// Routes
static const String loadingRoute = '/loading';
Expand Down Expand Up @@ -41,7 +41,7 @@ class Strings {
static const String resumeBuilderIconPath =
'$socialAssetsBasePath/resume_builder.png';
static String profilePhotoPath(Brightness brightness) =>
'assets/images/home/profile_${brightness == Brightness.dark ? 'dark' : 'light'}.jpg';
'assets/images/home/profile_dark.jpg';
static const String professionalExperiencePhotoPath =
'assets/images/home/professional.png';
static const String personalExperiencePhotoPath =
Expand Down
19 changes: 19 additions & 0 deletions lib/models/media_item.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import '../common/enums.dart';

/// A media item to be displayed in the gallery.
class MediaItem {
const MediaItem({
required this.type,
required this.path,
required this.caption,
});

/// The type of media.
final MediaType type;

/// The path to the media.
final String path;

/// The caption to be displayed with the media.
final String caption;
}
60 changes: 45 additions & 15 deletions lib/screens/details.dart
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../common/color_schemes.dart';
import '../common/enums.dart';
import '../common/strings.dart';
import '../models/app_state.dart';
import '../models/media_item.dart';
import '../services/redirect_handler.dart';
import '../widgets/custom_app_bars.dart';
import '../widgets/frosted_container.dart';
import '../widgets/hover_scale_handler.dart';
import '../widgets/media_browser.dart';
import '../widgets/multi_media_player.dart';
import '../widgets/media_player.dart';

/// A screen that displays details about a project/experience.
class DetailsScreen extends StatefulWidget {
Expand Down Expand Up @@ -88,6 +90,42 @@ class DetailsScreenState extends State<DetailsScreen> {
/// The controller for the scroll view.
final ScrollController _scrollController = ScrollController();

/// The list of media items to display.
List<MediaItem> get mediaItems {
final List<MediaItem> mediaItems = <MediaItem>[];
for (int i = 0; i < widget.youtubeVideoIds.length; i++) {
mediaItems.add(MediaItem(
type: MediaType.youTubeVideo,
path: widget.youtubeVideoIds[i],
caption: '',
));
}
for (int i = 0; i < widget.videoPaths.length; i++) {
mediaItems.add(MediaItem(
type: MediaType.localVideo,
path: widget.videoPaths[i],
caption: widget.mediaCaptions[i],
));
}

for (int i = 0; i < widget.imagePaths.length; i++) {
mediaItems.add(MediaItem(
type: MediaType.localImage,
path: widget.imagePaths[i],
caption: widget.mediaCaptions[i + widget.videoPaths.length],
));
}
for (int i = 0; i < widget.webImagePaths.length; i++) {
mediaItems.add(MediaItem(
type: MediaType.networkImage,
path: widget.webImagePaths[i],
caption: widget.mediaCaptions[
i + widget.videoPaths.length + widget.imagePaths.length],
));
}
return mediaItems;
}

/// The index of the current media item.
int _currentMediaIndex = 0;

Expand Down Expand Up @@ -256,13 +294,9 @@ class DetailsScreenState extends State<DetailsScreen> {
children: <Widget>[
AspectRatio(
aspectRatio: 16 / 11,
child: MultiMediaPlayer(
child: MediaPlayer(
currentIndex: _currentMediaIndex,
youtubeVideoIds: widget.youtubeVideoIds,
videoPaths: widget.videoPaths,
imagePaths: widget.imagePaths,
webImagePaths: widget.webImagePaths,
mediaCaptions: widget.mediaCaptions,
mediaList: mediaItems,
onMediaBrowser: appState.toggleMediaBrowserVisibility,
),
),
Expand All @@ -279,7 +313,7 @@ class DetailsScreenState extends State<DetailsScreen> {
),
Text(
widget.description,
style: Theme.of(context).textTheme.bodyLarge,
style: Theme.of(context).textTheme.bodyMedium,
),
if (widget.externalLinks.isNotEmpty) _moreInfo(context),
const Divider(height: 32),
Expand Down Expand Up @@ -311,13 +345,9 @@ class DetailsScreenState extends State<DetailsScreen> {
SizedBox(
height: MediaQuery.of(context).size.height * 0.8,
width: MediaQuery.of(context).size.width,
child: MultiMediaPlayer(
child: MediaPlayer(
currentIndex: _currentMediaIndex,
youtubeVideoIds: widget.youtubeVideoIds,
videoPaths: widget.videoPaths,
imagePaths: widget.imagePaths,
webImagePaths: widget.webImagePaths,
mediaCaptions: widget.mediaCaptions,
mediaList: mediaItems,
onMediaBrowser: appState.toggleMediaBrowserVisibility,
),
),
Expand All @@ -331,7 +361,7 @@ class DetailsScreenState extends State<DetailsScreen> {
const Divider(height: 32),
Text(
widget.description,
style: Theme.of(context).textTheme.bodyLarge,
style: Theme.of(context).textTheme.bodyMedium,
),
if (widget.externalLinks.isNotEmpty) _moreInfo(context),
const Divider(height: 32),
Expand Down
6 changes: 3 additions & 3 deletions lib/widgets/media_browser.dart
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ class MediaBrowser extends StatelessWidget {
alignment: Alignment.center,
children: <Widget>[
ClipRRect(
borderRadius: BorderRadius.circular(4.0),
borderRadius: BorderRadius.circular(8.0),
child: Image.network(
'https://i3.ytimg.com/vi/${youtubeVideoIds[index]}/sddefault.jpg',
fit: BoxFit.cover,
Expand Down Expand Up @@ -125,7 +125,7 @@ class MediaBrowser extends StatelessWidget {
onTapped!(index + youtubeVideoIds.length);
},
child: ClipRRect(
borderRadius: BorderRadius.circular(4.0),
borderRadius: BorderRadius.circular(8.0),
child: ColoredBox(
color: Colors.black12,
child: Stack(
Expand Down Expand Up @@ -194,7 +194,7 @@ class MediaBrowser extends StatelessWidget {
onTapped!(index + youtubeVideoIds.length + videoPaths.length);
},
child: ClipRRect(
borderRadius: BorderRadius.circular(4.0),
borderRadius: BorderRadius.circular(8.0),
child: ColoredBox(
color: Colors.black12,
child: index < imagePaths.length
Expand Down
Loading

0 comments on commit dc1043a

Please sign in to comment.