Skip to content

Commit

Permalink
Merge branch 'dev' into main
Browse files Browse the repository at this point in the history
  • Loading branch information
PLGuerraDesigns committed Oct 13, 2023
2 parents 6f0d84c + 142edcd commit 6260ca0
Show file tree
Hide file tree
Showing 27 changed files with 1,531 additions and 790 deletions.
114 changes: 114 additions & 0 deletions lib/common/sample_resume.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
import 'package:flutter/cupertino.dart';

import '../models/contact.dart';
import '../models/education.dart';
import '../models/experience.dart';
import '../models/generic.dart';
import '../models/resume.dart';

class SampleResume extends Resume {
SampleResume()
: super(
name: 'John Doe',
location: 'San Francisco, CA',
skills: <String>[
'Flutter',
'Dart',
'Python',
'Java',
'C++',
],
contactList: <Contact>[
Contact(
value: '[email protected]',
iconData: CupertinoIcons.mail,
),
Contact(
value: 'linkedin.com/in/jdoe',
iconData: CupertinoIcons.link,
),
Contact(
value: '123-456-7890',
iconData: CupertinoIcons.phone,
),
Contact(
value: 'example.com/portfolio/jdoe',
iconData: CupertinoIcons.globe,
),
],
experiences: <Experience>[
Experience(
company: 'Example Holdings Inc.',
position: 'Software Engineer',
startDate: '01/2020',
endDate: 'Present',
location: 'San Francisco, CA',
description:
'• Installed and configured software applications and tested solutions for effectiveness.\n• Worked with project managers, developers, quality assurance and customers to resolve\n technical issues.\n• Interfaced with cross-functional team of business analysts, developers and technical\n support professionals to determine comprehensive list of requirement specifications for\n new applications.',
),
Experience(
company: 'Example Technologies',
position: 'Software Development Associate',
startDate: '01/2019',
endDate: '12/2019',
location: 'San Francisco, CA',
description:
'• Administered government-supported community development programs and promoted\n department programs and services.\n• Worked closely with clients to establish problem specifications and system designs.\n• Developed next generation integration platform for internal applications.',
),
Experience(
position: 'Web Development Intern',
company: 'Example Appraisal Services',
startDate: '06/2018',
endDate: '08/2018',
location: 'San Francisco, CA',
description:
'• Participated with preparation of design documents for trackwork, including alignments,\n specifications, criteria details and estimates.\n• Collaborated with senior engineers on projects and offered insight.\n• Engaged in software development utilizing wide range of technological tools and\n industrial Ethernet-based protocols.',
)
],
educationHistory: <Education>[
Education(
institution: 'Example University',
degree: 'MS, Software Engineering',
startDate: '08/2018',
endDate: '12/2019',
location: 'San Francisco, CA',
),
Education(
institution: 'Example State University',
degree: 'BS, Computer Science',
startDate: '08/2014',
endDate: '05/2018',
location: 'San Francisco, CA',
),
],
customSections: <Map<String, GenericEntry>>[
<String, GenericEntry>{
'Summary': GenericEntry(
title: '',
description:
'Technology-driven Software Engineer with 4 years of experience in translating business requirements and functional specification into code modules and software solutions. Deep understanding of system integration testing (SIT) and user acceptance testing (UAT). Engages in the software development lifecycle to support the development, configuration, modification, and testing of integrated business and enterprise application solutions. Drives the adoption of new technologies by researching innovative technology trends and developments.',
),
},
<String, GenericEntry>{
'Projects': GenericEntry(
title: 'Inventory Management System',
description:
'• Developed a mobile application for a local business to manage their inventory and sales.\n• Utilized Flutter and Firebase to create a cross-platform application for Android and iOS.\n• Implemented a barcode scanner to scan products and update inventory in real-time.\n• Designed a user interface to display sales and inventory data in a visually appealing manner.'),
},
<String, GenericEntry>{
'Projects': GenericEntry(
title: 'Project Management System',
description:
'• Built a web application to manage and track the progress of projects.\n• Utilized Flutter and GitHub Pages to create a web application for desktop and mobile.\n')
}
],
hiddenSections: <String>['Skills'],
sectionOrder: <String>[
'Summary',
'Skills',
'Experience',
'Projects',
'Education'
],
);
}
46 changes: 31 additions & 15 deletions lib/constants/strings.dart → lib/common/strings.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ class Strings {
Strings._();

// URLs
static const String siteUrl =
'https://plguerradesigns.github.io/flutter_resume_builder/';
static const String flutterUrl = 'https://flutter.dev/';
static const String sponsorUrl = 'https://www.buymeacoffee.com/plguerra';
static const String sourceCodeUrl =
Expand All @@ -10,18 +12,20 @@ class Strings {
'https://plguerradesigns.github.io/portfolio/';

// Asset Paths
static const String iconPath = 'images/icon.png';
static const String iconPath = 'assets/images/icon.png';

// General
static const String resumeBuilder = 'Resume Builder';
static const String poweredByFlutter = 'Powered by Flutter';
static const String flutterResumeBuilder = 'Flutter Resume Builder';
static const String projectInfo =
'This project is still under development!\n\nThe Flutter Resume Builder is an open source project created by Pablo L. Guerra to provide users with a web-based resume builder that is free and easy to use while still providing professional resumes.';
static const String aboutThisProject = 'About this project';
static const String moreOptions = 'More options';
static const String contributeToThisProject = 'Contribute to this project';
static const String projectDonation = 'Project Donation';
'The Flutter Resume Builder, crafted by Pablo L. Guerra, is an '
'open-source initiative aimed at offering users\na user-friendly, '
'web-based resume builder that is both free and capable of producing polished resumes.';
static const String aboutThisProject = 'About this Project';
static const String moreOptions = 'More Options';
static const String contributeCode = 'Contribute Code';
static const String donate = 'Donate';
static const String licenses = 'Licenses';
static const String moreProjects = 'More Projects';
static String copyRight(String year) => '© $year Pablo L. Guerra';
Expand Down Expand Up @@ -51,26 +55,38 @@ class Strings {
'Failed to load network image.';
static const String addImageBeforeEnabling = 'Add an image before enabling.';
static const String removeSection = 'Remove Section';
static const String hideAllEntries = 'Hide All Entries';
static const String showAllEntries = 'Show All Entries';
static const String hideSection = 'Hide Section';
static const String showSection = 'Show Section';
static const String newEntry = 'New Entry';
static const String moveSectionUp = 'Move Section Up';
static const String moveSectionDown = 'Move Section Down';
static String deleteSection(String sectionName) =>
'Delete $sectionName Section?';
static const String addNewSection = 'Add New Section';
static const String addCustomSection = 'Add Custom Section';
static const String startDate = 'Start Date';
static const String endDate = 'End Date';
static const String title = 'Title';
static const String subtitle = 'Subtitle';
static const String description = 'Description';
static const String removeSectionWarning =
'Are you sure you want to remove this section?\nThis action cannot be undone.';

static const String deleteSectionWarning =
'Are you sure you want to delete this section?\nThis action cannot be undone.';

// Split view
static const String recompile = 'RECOMPILE';
static const String downloadPDF = 'DOWNLOAD PDF';
// Split Screen
static const String recompile = 'Recompile';
static const String downloadPdfAndJson = 'Download PDF and JSON File';
static const String noValidJsonFile = 'No valid JSON file selected.';
static const String importJson = 'Import JSON File';
static const String form = 'Form';
static const String preview = 'Preview';
static const String printPDF = 'Print PDF';
static const String clear = 'Clear';
static const String clearResume = 'Clear Resume';
static const String clearResumeWarning =
'Are you sure you want to clear the resume?\nThis action cannot be undone.';
static const String removeEntry = 'Remove Entry';
static const String removeEntryWarning =
'Are you sure you want to remove this entry?\nThis action cannot be undone.';
static const String remove = 'Remove';
static const String hideEntry = 'Hide Entry';
static const String showEntry = 'Show Entry';
}
6 changes: 3 additions & 3 deletions lib/main.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import 'package:flutter/material.dart';
import 'constants/strings.dart';
import 'pages/split_view.dart';
import 'common/strings.dart';
import 'screens/split_screen.dart';

void main() {
WidgetsFlutterBinding.ensureInitialized();
Expand All @@ -18,7 +18,7 @@ class FlutterResumeBuilder extends StatelessWidget {
brightness: Brightness.dark,
useMaterial3: true,
),
home: const SplitView(),
home: const SplitScreen(),
);
}
}
27 changes: 23 additions & 4 deletions lib/models/contact.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,34 @@ import 'package:flutter/cupertino.dart';
/// A contact entry.
class Contact {
Contact({
String value = '',
this.iconData = CupertinoIcons.phone,
String? value,
IconData? iconData,
}) {
textController.text = value;
textController.text = value ?? '';
this.iconData = iconData ?? CupertinoIcons.minus;
}

/// Return a contact from a map.
factory Contact.fromMap(Map<String, dynamic> map) {
return Contact(
value: map['value'] as String,
iconData: IconData(map['iconData'] as int,
fontFamily: CupertinoIcons.iconFont,
fontPackage: CupertinoIcons.iconFontPackage),
);
}

/// The controller for the text field.
TextEditingController textController = TextEditingController();

/// The icon to display for this contact.
IconData iconData = CupertinoIcons.phone;
late IconData iconData;

/// Return a map of the contact.
Map<String, dynamic> toMap() {
return <String, dynamic>{
'value': textController.text,
'iconData': iconData.codePoint,
};
}
}
55 changes: 44 additions & 11 deletions lib/models/education.dart
Original file line number Diff line number Diff line change
@@ -1,19 +1,30 @@
import 'package:flutter/cupertino.dart';

/// A education history entry.
class Education extends ChangeNotifier {
class Education {
Education({
String institution = '',
String degree = '',
String startDate = '',
String endDate = '',
String location = '',
String? institution,
String? degree,
String? startDate,
String? endDate,
String? location,
}) {
institutionController.text = institution;
degreeController.text = degree;
startDateController.text = startDate;
endDateController.text = endDate;
locationController.text = location;
institutionController.text = institution ?? '';
degreeController.text = degree ?? '';
startDateController.text = startDate ?? '';
endDateController.text = endDate ?? '';
locationController.text = location ?? '';
}

/// Return an education instance from a map.
factory Education.fromMap(Map<String, dynamic> map) {
return Education(
institution: map['institution'] as String,
degree: map['degree'] as String,
startDate: map['startDate'] as String,
endDate: map['endDate'] as String,
location: map['location'] as String,
);
}

/// The controller for the institution field.
Expand All @@ -30,4 +41,26 @@ class Education extends ChangeNotifier {

/// The controller for the location field.
TextEditingController locationController = TextEditingController();

/// Whether the entry is visible.
bool _visible = true;

/// Whether the entry is visible.
bool get visible => _visible;

/// Toggle the visibility of the entry.
void toggleVisibility() {
_visible = !_visible;
}

/// Return a map of the education history entry.
Map<String, dynamic> toMap() {
return <String, dynamic>{
'institution': institutionController.text,
'degree': degreeController.text,
'startDate': startDateController.text,
'endDate': endDateController.text,
'location': locationController.text,
};
}
}
61 changes: 48 additions & 13 deletions lib/models/experience.dart
Original file line number Diff line number Diff line change
@@ -1,21 +1,33 @@
import 'package:flutter/cupertino.dart';

/// A professional experience entry.
class Experience extends ChangeNotifier {
class Experience {
Experience({
String company = '',
String position = '',
String startDate = '',
String endDate = '',
String location = '',
String description = '',
String? company,
String? position,
String? startDate,
String? endDate,
String? location,
String? description,
}) {
companyController.text = company;
positionController.text = position;
startDateController.text = startDate;
endDateController.text = endDate;
locationController.text = location;
descriptionController.text = description;
companyController.text = company ?? '';
positionController.text = position ?? '';
startDateController.text = startDate ?? '';
endDateController.text = endDate ?? '';
locationController.text = location ?? '';
descriptionController.text = description ?? '';
}

/// Return an experience instance from a map.
factory Experience.fromMap(Map<String, dynamic> map) {
return Experience(
company: map['company'] as String,
position: map['position'] as String,
startDate: map['startDate'] as String,
endDate: map['endDate'] as String,
location: map['location'] as String,
description: map['description'] as String,
);
}

/// The controller for the company field.
Expand All @@ -35,4 +47,27 @@ class Experience extends ChangeNotifier {

/// The controller for the description field.
TextEditingController descriptionController = TextEditingController();

/// Whether the entry is visible.
bool _visible = true;

/// Whether the entry is visible.
bool get visible => _visible;

/// Toggle the visibility of the entry.
void toggleVisibility() {
_visible = !_visible;
}

/// Return a map of the experience.
Map<String, dynamic> toMap() {
return <String, dynamic>{
'company': companyController.text,
'position': positionController.text,
'startDate': startDateController.text,
'endDate': endDateController.text,
'location': locationController.text,
'description': descriptionController.text,
};
}
}
Loading

0 comments on commit 6260ca0

Please sign in to comment.