Skip to content

Commit 7f72f87

Browse files
authored
Merge pull request #7 from VVK027/main-enhancement
impl. of flutter widgets with vvk_ui_kit package,
2 parents 01ee484 + 1d4dd8e commit 7f72f87

30 files changed

Lines changed: 480 additions & 1210 deletions

.github/workflows/main.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ jobs:
4040
uses: subosito/flutter-action@v2
4141
with:
4242
channel: stable
43-
flutter-version: 3.35.3
43+
flutter-version: 3.38.10
4444
cache: true
4545

4646
- name: Get dependencies

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ migrate_working_dir/
3333
.pub-cache/
3434
.pub/
3535
/build/
36+
assets/projects/_captures/
37+
assets/projects/_sources/
3638

3739
# Symbolication related
3840
app.*.symbols

README.md

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -25,17 +25,19 @@ https://github.com/user-attachments/assets/2ec44978-6c86-4c91-b57d-8a08a301af70
2525
- [Deploy to GitHub Pages](#deploy-to-github-pages)
2626
- [Configuration](#configuration)
2727
- [Assets](#assets)
28+
- [Support](#support)
2829
- [License](#license)
2930

3031
## Features
3132

3233
- **Responsive layout** — Adaptive toolbar, spacing, and section layout for mobile, tablet, and desktop breakpoints.
33-
- **Portfolio sections** — About, skills, experience, projects, reviews, awards, education, certifications, and contact, driven from `assets/data.json`.
34+
- **Portfolio sections** — About, skills, experience, projects, open source, reviews, awards, achievements, education, certifications, and contact, driven from `assets/data.json`.
3435
- **Section navigation** — Sticky nav with scroll-synced active section via `ScrollablePositionedList`.
3536
- **Deep links** — Shareable URLs for each section (`/section/:id`) with `go_router`.
36-
- **Light and dark theme** — Material 3 themes with a semantic color system; toggle in the app bar (defaults to dark).
37-
- **Projects gallery** — Tag filters, project cards with previews, and a detail bottom sheet.
38-
- **Section carousels** — Paged carousels with controls and optional auto-play for multi-card content.
37+
- **Light and dark theme** — Material 3 themes with a semantic color system; toggle in the app bar (defaults to light).
38+
- **Projects gallery** — Tag filters, project cards with previews, and a detail dialog / bottom sheet.
39+
- **Section carousels** — Paged carousels with controls and optional auto-play for multi-card content (from `vvk_ui_kit`).
40+
- **Loading state** — Shimmer placeholder while `data.json` is parsed on a background isolate.
3941
- **Contact and social** — Email, phone, location, and social links (GitHub, LinkedIn, WhatsApp, etc.) via `url_launcher`.
4042
- **JSON-driven content** — Edit copy, metrics, experience, and projects without changing UI code.
4143
- **CI pipeline** — Analyze, test, build web, and deploy on pushes to `main` (see [Deploy to GitHub Pages](#deploy-to-github-pages)).
@@ -45,6 +47,7 @@ https://github.com/user-attachments/assets/2ec44978-6c86-4c91-b57d-8a08a301af70
4547
- Flutter & Dart
4648
- Riverpod — state management
4749
- go_router — URL navigation and section deep links
50+
- vvk_ui_kit — shared UI kit (Material 3 theme builder, carousel, shimmer, image preview frame, SVG icons, theme toggle)
4851
- json_serializable — typed JSON models
4952
- ScrollablePositionedList — anchored section scrolling
5053
- Poppins — bundled custom font family
@@ -69,18 +72,17 @@ The app ships with **light** and **dark** Material 3 themes. Both share the same
6972

7073
| Piece | Role |
7174
| --- | --- |
72-
| `lib/core/theme/app_theme.dart` | Builds `lightTheme` and `darkTheme` (`ThemeData`, `ColorScheme`, component themes) |
73-
| `lib/core/theme/app_colors.dart` | Semantic palette as a `ThemeExtension<AppColors>` (`AppColors.light` / `AppColors.dark`) |
74-
| `lib/core/theme/app_fonts.dart` | Poppins family applied across the text theme |
75-
| `lib/core/provider/app_theme_provider.dart` | Riverpod `themeModeProvider` — defaults to `ThemeMode.dark` |
76-
| `lib/presentation/widgets/theme_toggle_button.dart` | Sun / moon control in the profile header |
75+
| `lib/core/theme/app_colors.dart` | Semantic palette as a `ThemeExtension<AppColors>` (`AppColors.light` / `AppColors.dark`), plus `lightTheme` / `darkTheme` built via `UIAppTheme.custom` from `vvk_ui_kit` |
76+
| `lib/core/theme/app_fonts.dart` | Poppins family (`AppFonts.family`) fed into the theme builder |
77+
| `lib/core/provider/app_theme_provider.dart` | Riverpod `themeModeProvider` — defaults to `ThemeMode.light` |
78+
| `UIThemeToggleButton` (`vvk_ui_kit`) | Sun / moon control wired up in the app bar (`portfolio_page.dart`) |
7779

78-
`PortfolioApp` wires themes into `MaterialApp.router`:
80+
`PortfolioApp` (`lib/core/app.dart`) wires themes into `MaterialApp.router`:
7981

8082
```dart
81-
theme: lightTheme,
82-
darkTheme: darkTheme,
83-
themeMode: themeMode, // from themeModeProvider
83+
theme: lightTheme, // from app_colors.dart
84+
darkTheme: darkTheme, // from app_colors.dart
85+
themeMode: themeMode, // from themeModeProvider
8486
```
8587

8688
The toggle switches between `ThemeMode.light` and `ThemeMode.dark` for the current session. Preference is **not** written to local storage yet.
@@ -101,7 +103,7 @@ final colors = context.appColors; // ThemeExtension helper
101103
### Customizing themes
102104

103105
1. **Palette** — Edit `AppColors.light` and `AppColors.dark` in `lib/core/theme/app_colors.dart`.
104-
2. **Typography** — Adjust sizes and weights in `_baseTextTheme` inside `lib/core/theme/app_theme.dart`.
106+
2. **Typography** — Adjust the theme built by `UIAppTheme.custom` in `_portfolioTheme` (`lib/core/theme/app_colors.dart`), or override the returned `ThemeData` there.
105107
3. **Default mode** — Change the initial value in `themeModeProvider` (`app_theme_provider.dart`).
106108
4. **Fonts** — Replace files under `assets/fonts/` and update `pubspec.yaml` + `AppFonts.family`.
107109

@@ -193,6 +195,16 @@ assets/
193195
└── projects/ # Project preview images (*_preview.jpg)
194196
```
195197
198+
## Support
199+
200+
If this project is helpful to you, consider supporting the work:
201+
202+
<a href="https://buymeacoffee.com/vvk27" target="_blank">
203+
<img src="https://img.shields.io/badge/Buy%20Me%20a%20Coffee-vvk27-FFDD00?style=for-the-badge&logo=buy-me-a-coffee&logoColor=black" alt="Buy Me a Coffee" />
204+
</a>
205+
206+
☕ [buymeacoffee.com/vvk27](https://buymeacoffee.com/vvk27)
207+
196208
## License
197209
198210
MIT — see [LICENSE](LICENSE).

assets/data.json

Lines changed: 120 additions & 117 deletions
Original file line numberDiff line numberDiff line change
@@ -142,47 +142,6 @@
142142
"https://apps.apple.com/us/app/mastermind-drive-2-0/id6673890540"
143143
]
144144
},
145-
{
146-
"name": "Metro City Pulse",
147-
"tags": [
148-
"Flutter",
149-
"Dart",
150-
"Riverpod",
151-
"GoRouter",
152-
"Clean Architecture",
153-
"Google Maps",
154-
"Web",
155-
"Android",
156-
"iOS",
157-
"Mobile",
158-
"Desktop",
159-
"Cross-platform",
160-
"Responsive"
161-
],
162-
"features": [
163-
"Interactive Map Dashboard",
164-
"Incident Marker Filtering",
165-
"Stats & KPI Overview",
166-
"CCTV Alert Playback",
167-
"Dark & Light Theme",
168-
"English & Spanish Localization",
169-
"Responsive Navigation Shell",
170-
"Offline Connectivity Handling",
171-
"Date Range Filtering",
172-
"Firebase Authentication"
173-
],
174-
"desc": "Built a cross-platform smart city monitoring app with Google Maps incident tracking, operational dashboards, CCTV-backed alerts, and adaptive layouts for mobile, tablet, and desktop.",
175-
"fullDescription": [
176-
"Implemented an interactive Google Maps dashboard with incident markers, severity legends, custom info windows, filter controls, zoom tools, and periodic data refresh for live operational views.",
177-
"Designed and developed a real-time smart city monitoring dashboard as a cross-platform Flutter app for web, Android, iOS, macOS, Linux, and Windows from a single codebase.",
178-
"Built stats and alerts workspaces with KPI summary cards, tabbed case status, confidence scoring, date-range selection, and CCTV video playback for incident review.",
179-
"Applied Clean Architecture with Riverpod state management, GoRouter navigation, repository-based data flow, reusable UI components, and responsive shell layouts that switch between side menu and bottom navigation."
180-
],
181-
"previewImage": "assets/projects/metro_city_pulse_preview.jpg",
182-
"playStoreUrl": [],
183-
"appStoreUrl": [],
184-
"githubUrl": "https://github.com/VVK027/metro_city_pulse"
185-
},
186145
{
187146
"name": "The Kidde App",
188147
"tags": [
@@ -236,82 +195,6 @@
236195
"https://apps.apple.com/us/app/kidde/id942334464"
237196
]
238197
},
239-
{
240-
"name": "Flutter Dev Portfolio",
241-
"tags": [
242-
"Flutter",
243-
"Dart",
244-
"Riverpod",
245-
"GoRouter",
246-
"Clean Architecture",
247-
"Web",
248-
"Android",
249-
"iOS",
250-
"Mobile",
251-
"Tablet",
252-
"Cross-platform",
253-
"Responsive"
254-
],
255-
"features": [
256-
"Responsive Layout",
257-
"Dark & Light Theme",
258-
"Section Navigation",
259-
"Project Carousel",
260-
"Skills & Experience",
261-
"Client Reviews",
262-
"Contact Section",
263-
"GitHub Integration"
264-
],
265-
"desc": "Built a responsive Flutter web and mobile portfolio with JSON-driven content, Riverpod state management, and adaptive section layouts.",
266-
"fullDescription": [
267-
"Designed and developed a personal developer portfolio as a cross-platform Flutter app deployable to web, Android, and iOS from a single codebase.",
268-
"Structured the UI with scroll-synced section navigation, responsive carousels, and theme-aware components that adapt across mobile, tablet, and desktop breakpoints.",
269-
"Loaded portfolio content from JSON assets so projects, experience, skills, and reviews can be updated without code changes.",
270-
"Applied Clean Architecture with Riverpod providers, domain use cases, and reusable presentation widgets for maintainable, testable code."
271-
],
272-
"previewImage": "assets/projects/flutter_portfolio_preview.jpg",
273-
"playStoreUrl": [],
274-
"appStoreUrl": [],
275-
"githubUrl": "https://github.com/VVK027/flutter_portfolio"
276-
},
277-
{
278-
"name": "Flutter Band Fit (Plugin)",
279-
"tags": [
280-
"Flutter",
281-
"Dart",
282-
"Plugin",
283-
"Java",
284-
"Swift",
285-
"BLE",
286-
"Android",
287-
"iOS",
288-
"Mobile",
289-
"Tablet",
290-
"Cross-platform"
291-
],
292-
"features": [
293-
"Smart Band Integration",
294-
"Device Management",
295-
"BLE Communication",
296-
"Health Vitals Sync",
297-
"Activity Monitoring",
298-
"Alarms & Reminders",
299-
"Firmware Updates",
300-
"Watch Faces",
301-
"Custom Watch Faces"
302-
],
303-
"desc": "Created a cross-platform Flutter plugin with GloryFit/UTE SDK for health vitals sync, reminders, watch faces, and device management.",
304-
"fullDescription": [
305-
"Created a cross-platform Flutter plugin integrating GloryFit and UTE SDK for health-monitoring smart bands via BLE communication.",
306-
"Supported real-time syncing of health vitals including SpO₂, blood pressure, heart rate, temperature, sleep tracking, and activity monitoring.",
307-
"Implemented watch face customization, alarm and reminder management, sedentary alerts, and device firmware updates."
308-
],
309-
"previewImage": "assets/projects/flutter_band_fit_preview.jpg",
310-
"playStoreUrl": [],
311-
"appStoreUrl": [],
312-
"githubUrl": "https://github.com/VVK027/flutter_band_fit",
313-
"pubUrl": "https://pub.dev/packages/flutter_band_fit"
314-
},
315198
{
316199
"name": "Docty Digital Health for All",
317200
"tags": [
@@ -594,6 +477,126 @@
594477
"previewImage": "assets/projects/yng_logo.png",
595478
"playStoreUrl": [],
596479
"appStoreUrl": []
480+
},
481+
{
482+
"name": "Flutter Band Fit (Plugin)",
483+
"tags": [
484+
"Flutter",
485+
"Dart",
486+
"Plugin",
487+
"Java",
488+
"Swift",
489+
"BLE",
490+
"Android",
491+
"iOS",
492+
"Mobile",
493+
"Tablet",
494+
"Cross-platform"
495+
],
496+
"features": [
497+
"Smart Band Integration",
498+
"Device Management",
499+
"BLE Communication",
500+
"Health Vitals Sync",
501+
"Activity Monitoring",
502+
"Alarms & Reminders",
503+
"Firmware Updates",
504+
"Watch Faces",
505+
"Custom Watch Faces"
506+
],
507+
"desc": "Created a cross-platform Flutter plugin with GloryFit/UTE SDK for health vitals sync, reminders, watch faces, and device management.",
508+
"fullDescription": [
509+
"Created a cross-platform Flutter plugin integrating GloryFit and UTE SDK for health-monitoring smart bands via BLE communication.",
510+
"Supported real-time syncing of health vitals including SpO₂, blood pressure, heart rate, temperature, sleep tracking, and activity monitoring.",
511+
"Implemented watch face customization, alarm and reminder management, sedentary alerts, and device firmware updates."
512+
],
513+
"previewImage": "assets/projects/flutter_band_fit_preview.jpg",
514+
"playStoreUrl": [],
515+
"appStoreUrl": [],
516+
"githubUrl": "https://github.com/VVK027/flutter_band_fit",
517+
"pubUrl": "https://pub.dev/packages/flutter_band_fit",
518+
"isOpenSource": true
519+
},
520+
{
521+
"name": "Metro City Pulse",
522+
"tags": [
523+
"Flutter",
524+
"Dart",
525+
"Riverpod",
526+
"GoRouter",
527+
"Clean Architecture",
528+
"Google Maps",
529+
"Web",
530+
"Android",
531+
"iOS",
532+
"Mobile",
533+
"Desktop",
534+
"Cross-platform",
535+
"Responsive"
536+
],
537+
"features": [
538+
"Interactive Map Dashboard",
539+
"Incident Marker Filtering",
540+
"Stats & KPI Overview",
541+
"CCTV Alert Playback",
542+
"Dark & Light Theme",
543+
"English & Spanish Localization",
544+
"Responsive Navigation Shell",
545+
"Offline Connectivity Handling",
546+
"Date Range Filtering",
547+
"Firebase Authentication"
548+
],
549+
"desc": "Built a cross-platform smart city monitoring app with Google Maps incident tracking, operational dashboards, CCTV-backed alerts, and adaptive layouts for mobile, tablet, and desktop.",
550+
"fullDescription": [
551+
"Implemented an interactive Google Maps dashboard with incident markers, severity legends, custom info windows, filter controls, zoom tools, and periodic data refresh for live operational views.",
552+
"Designed and developed a real-time smart city monitoring dashboard as a cross-platform Flutter app for web, Android, iOS, macOS, Linux, and Windows from a single codebase.",
553+
"Built stats and alerts workspaces with KPI summary cards, tabbed case status, confidence scoring, date-range selection, and CCTV video playback for incident review.",
554+
"Applied Clean Architecture with Riverpod state management, GoRouter navigation, repository-based data flow, reusable UI components, and responsive shell layouts that switch between side menu and bottom navigation."
555+
],
556+
"previewImage": "assets/projects/metro_city_pulse_preview.jpg",
557+
"playStoreUrl": [],
558+
"appStoreUrl": [],
559+
"githubUrl": "https://github.com/VVK027/metro_city_pulse",
560+
"isOpenSource": true
561+
},
562+
{
563+
"name": "Flutter Dev Portfolio",
564+
"tags": [
565+
"Flutter",
566+
"Dart",
567+
"Riverpod",
568+
"GoRouter",
569+
"Clean Architecture",
570+
"Web",
571+
"Android",
572+
"iOS",
573+
"Mobile",
574+
"Tablet",
575+
"Cross-platform",
576+
"Responsive"
577+
],
578+
"features": [
579+
"Responsive Layout",
580+
"Dark & Light Theme",
581+
"Section Navigation",
582+
"Project Carousel",
583+
"Skills & Experience",
584+
"Client Reviews",
585+
"Contact Section",
586+
"GitHub Integration"
587+
],
588+
"desc": "Built a responsive Flutter web and mobile portfolio with JSON-driven content, Riverpod state management, and adaptive section layouts.",
589+
"fullDescription": [
590+
"Designed and developed a personal developer portfolio as a cross-platform Flutter app deployable to web, Android, and iOS from a single codebase.",
591+
"Structured the UI with scroll-synced section navigation, responsive carousels, and theme-aware components that adapt across mobile, tablet, and desktop breakpoints.",
592+
"Loaded portfolio content from JSON assets so projects, experience, skills, and reviews can be updated without code changes.",
593+
"Applied Clean Architecture with Riverpod providers, domain use cases, and reusable presentation widgets for maintainable, testable code."
594+
],
595+
"previewImage": "assets/projects/flutter_portfolio_preview.jpg",
596+
"playStoreUrl": [],
597+
"appStoreUrl": [],
598+
"githubUrl": "https://github.com/VVK027/flutter_portfolio",
599+
"isOpenSource": true
597600
}
598601
],
599602
"reviews": [
Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
import 'package:flutter/material.dart';
22
import 'package:flutter_riverpod/flutter_riverpod.dart';
33

4-
final themeModeProvider = StateProvider<ThemeMode>((ref) => ThemeMode.light);
4+
/// Current [ThemeMode] for the app, toggled from the app bar.
5+
///
6+
/// Defaults to [ThemeMode.light]. The preference is session-only and is not
7+
/// persisted to local storage.
8+
final themeModeProvider = StateProvider<ThemeMode>((ref) => ThemeMode.light);

0 commit comments

Comments
 (0)