GoalPulse | Football Match Center and Live Streaming
A flagship Flutter application by iAC Studio. Engineered for real-time live scores, transfer news, and live football video streaming.
01. Introduction
GoalPulse is a premium sports application designed for high-performance match tracking. Decoupled from heavy backend layers, it leverages a dynamic proxy setup for real-time football databases. Wrapped in a stunning glassmorphic interface, it offers live match scores, detailed game analyses, global transfer news, and an integrated multi-channel HLS video streaming engine.
Embedded video streaming player with landscape support, adaptive aspect ratios, and quick social links sharing.
Complete statistical match details: Summary, commentary feed, lineups grid, standings context, stats comparisons, and H2H records.
Pre-configured Google Mobile Ads (Banner, Interstitial with smart jump-limiting guards, and App Open ads).
Push alerts combined with dynamic JSON feed notifications and client-side kickoff reminders.
02. Installation & Setup
1. Environment Prerequisites
Ensure you have Flutter installed on your machine:
- Flutter SDK: Version 3.20.0 or higher.
- Android: Android Studio with latest Android SDK and Gradle support.
- iOS: macOS with Xcode 15+ and CocoaPods installed.
flutter --version
2. Project Initialization
Open the project root directory in your terminal and run the following command to fetch all required packages:
flutter pub get
3. Automated Icon Generation
GoalPulse uses flutter_launcher_icons. Replace the logo file at
assets/images/logo.png and run the generator command:
dart run flutter_launcher_icons
03. API, Ads & Notifications Config
GoalPulse is designed to be highly flexible and self-contained. It includes a built-in mock mode and a complete self-hostable PHP backend source code. Simply configure the parameters inside the centralized configuration file:
lib/services/app_config.dart
🎮 Out-of-the-Box Local Mock Mode (Default)
To enable instant testing, GoalPulse runs in a fully functional Local Mock Data Mode by default on first launch. All matches, lineups, commentary, standing tables, news, and video channels are simulated using local static assets. You can compile, run, and preview the app immediately without configuring any database, web server, or paying subscription fees!
1. Centralized Configuration File
Open lib/services/app_config.dart and configure the following parameters:
class AppConfig {
AppConfig._();
// ───────── SERVER & CENTRAL API CONFIGURATIONS ─────────
// Points to your self-hosted backend directory
static const String baseUrl = 'https://your-domain.com/football-api';
// Set your unique App License Key (or keep default if license checking is disabled in your PHP backend)
static const String appLicenseKey = 'YOUR_SUBSCRIBED_LICENSE_KEY';
static const String notificationFeedUrl = '$baseUrl/notifications_feed.json';
static const String remoteConfigUrl = '$baseUrl/app_config.json';
// ───────── ONESIGNAL CONFIGURATIONS ─────────
static String oneSignalAppId = "YOUR_ONESIGNAL_APP_ID";
// ───────── ADMOB AD UNITS (TEST/LIVE KEYS) ─────────
static const String adMobBannerId = 'ca-app-pub-xxx/xxx';
static const String adMobInterstitialId = 'ca-app-pub-xxx/xxx';
static const String adMobAppOpenId = 'ca-app-pub-xxx/xxx';
}
2. Data Feed & API Integration Options
When you are ready to connect the app to a live database and sports feeds, you have two options:
Option A: Self-Host the Included PHP Backend (Included in Package)
The main package contains a fully functional backend API and CMS (located in the PHP_Backend_Source_Code directory). This backend acts as a caching proxy and rotates API keys to serve real-time fixtures, streams, and commentary dynamically.
- Step 1: Create a folder named
football-apiin the root of your domain's public directory (e.g.public_html/football-api/) and upload all files from the backend folder. - Step 2: Ensure the directory has write permissions (chmod 0755 or 0777) so SQLite (
database.db) and caches can write updates. - Step 3: Open
https://yourdomain.com/football-api/admin/in a browser to log in using default credentials ([email protected]/admin123). Change these default values inadmin/config.php. - Step 4: Register your API subscription keys in the CMS rotation tab. Register active license keys in the Licenses tab (or keep
ENABLE_LICENSE_VALIDATIONset tofalseinproxy.phpto accept any key). - Step 5: Configure your cPanel Cron Job to run
cron_notifications.phpevery 10 minutes to auto-sync OneSignal notifications.
Option B: Turnkey Hosted API Service (Optional)
If you prefer not to manage a server, databases, or API rotation keys, you can subscribe to our managed hosted feed service. We will supply you with a hosted base URL and a licensed key to connect directly.
- Basic Plan: $14.99/mo (7,500 daily requests)
- Standard Plan: $29.99/mo (25,000 daily requests)
- Premium Plan: $59.99/mo (65,000 daily requests)
To purchase a hosted key or request a hosted demo, contact us:
- WhatsApp: +92 302 688 1965
- Email: [email protected]
3. Google Mobile Ads (AdMob) SDK Activation
⚠️ CRITICAL STEP: In addition to configuring unit IDs inside
app_config.dart, you must declare your AdMob Application ID in the platform files
to avoid startup crashes.
Android: Open android/app/src/main/AndroidManifest.xml and update
the application metadata block:
<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="ca-app-pub-your-admob-app-id~xxxxxxx"/>
iOS: Open ios/Runner/Info.plist and verify or add the
GADApplicationIdentifier key:
<key>GADApplicationIdentifier</key>
<string>ca-app-pub-your-admob-app-id~xxxxxxx</string>
4. Firebase Console Setup & Credentials
GoalPulse uses Firebase services for core app packages. You must configure your own Firebase project and place the credentials files in the platform folders:
Step 1: Create a Firebase Project
Go to the Firebase Console, click Add Project, and complete the setup wizard.
Step 2: Configure Android App
- Add an Android app to your project using your custom package name (default:
com.iacstudio.goalpulse). - Download the generated
google-services.jsoncredential file. - Move this file into the
android/app/directory of your project, replacing the placeholder file.
Step 3: Configure iOS App
- Add an iOS app to your Firebase project using your runner Bundle ID.
- Download the generated
GoogleService-Info.plistfile. - Open the project in Xcode, drag and drop the
GoogleService-Info.plistfile into theRunner/Runnerfolder (ensure "Copy items if needed" is selected).
5. OneSignal Push Notification & Licensing Setup
GoalPulse integrates the OneSignal SDK to trigger real-time alerts for live match events, transfer headlines, and custom announcements, as well as managing user-facing lockdown controls.
Step 1: Create a OneSignal App
Go to the OneSignal Dashboard, register an account, and click New App/Website. Name your app and select Android/iOS platforms.
Step 2: Retrieve App ID
Inside your OneSignal dashboard, navigate to Settings > Keys & IDs. Copy the OneSignal App ID string.
Step 3: Update App configuration
Open lib/services/app_config.dart in your Flutter project and replace the
placeholder value:
static const String oneSignalAppId = "YOUR-ONESIGNAL-APP-ID";
Step 4: Platform Notifications Configuration
- Android: Configure Firebase Cloud Messaging (FCM) credentials in OneSignal to enable push delivery on Google Play services.
- iOS: Set up Apple Push Notification Service (APNs) keys/certificates in the OneSignal platform settings and enable push notification capabilities inside Xcode.
04. Technical Architecture
Clean, modular, and built for scale following the iAC Standard.
lib/
├── bottomnav/ # Core Tab Navigation
│ ├── bottom_nav_routing.dart # Liquid menu & Force update checker
│ ├── home_screen.dart # Live Streaming Matches Grid
│ ├── matches_screen.dart # Fixtures List & Date Selector
│ ├── leagues_screen.dart # Leagues Search & Selection
│ └── news_screen.dart # News Feed & API filter
├── model/ # Data entities (Soccer, Streaming, Commentary)
├── providers/ # State Managers (Theme State)
├── services/ # Business Logic & Infrastructure
│ ├── api_client.dart # Request client & license validation
│ ├── api_calling.dart # High-level clean data fetching logic
│ ├── ad_manager.dart # AdMob Helper (App Open, Interstitial, Banner)
│ ├── cache_manager.dart # Persistent cache layer
│ ├── force_update_manager.dart # Kill-switch configurations
│ ├── local_notification_manager.dart # Zoned kickoff alarm scheduler
│ └── notification_manager.dart # OneSignal push registration
├── utils/ # Themes, Colors & Constants
├── widgets/ # Reusable UI Custom Widgets
├── main.dart # Global entry point & App lifecycle observer
├── splash_screen.dart # Branded entry animation & onboarding router
├── onboarding_screen.dart # Swipeable onboarding guide
├── notifications_screen.dart # Double Tab Alerts (Latest Alerts & My Alerts)
├── match_detail_screen.dart # Match statistics panel (6 Tabs)
├── league_detail_screen.dart # Standings & Schedules
├── live_matches_screen.dart # Active matches scroll list
├── live_stream_details_screen.dart # Multi-channel inline video center
└── live_stream_player_screen.dart # Fullscreen HLS video player
05. UI/UX Features
Glassmorphism & Liquid Navigation
GoalPulse uses BackdropFilter to create frosted glass aesthetics. The bottom
navigation bar uses a custom translucent Liquid effect containing 4 core tabs (Home, Matches,
News, and Leagues).
Native Tactile Feedback
Throughout the app, InkWell widgets are integrated inside Material
components to provide satisfying ripple touch feedback, adhering strictly to modern UI
paradigms.
Caching & Optimizations
- Zero-Jank Scrolling: Uses
AlwaysScrollableScrollPhysicsfor flawless pull-to-refresh. - Local Cache Engine: Uses
SharedPreferencescache to temporarily store match details, significantly reducing the amount of API requests necessary.
06. App Customization
Changing Brand Colors
All design tokens are centralized. To change the brand look, visit:
lib/utils/colors.dart: UpdatemainColor(the primary green theme) and other colors to match your brand palette.
Renaming the Package Name
To rename the package name (e.g., from com.iacstudio.goalpulse to
com.yourbrand.app), use the pre-installed package:
# Run the renaming command
dart run change_app_package_name:main com.yourbrand.app
07. Release Build Guide
Android Production Build
To generate an Android App Bundle (AAB) for the Google Play Store:
flutter build appbundle --release
To generate a standard APK:
flutter build apk --release
iOS Production Build
To build an iOS IPA for the App Store (requires macOS):
flutter build ipa --release
08. Credits & Libraries
GoalPulse utilizes the following open-source packages to deliver a premium experience:
- video_player & chewie - Video Streaming Engine
- google_mobile_ads - AdMob Monetization
- onesignal_flutter - Push Notifications Registration
- http - Networking & API Requests
- shared_preferences - Cache Persistence
- cached_network_image - Image Optimization & Caching
- liquid_bottom_nav_bar - Custom Animated TabBar
- provider - Application State Management
09. Changelog
Version 1.0.0 (Initial Release)
- Initial Production Release
- Integrated Zoned Local Kickoff Reminders (Offline notifications)
- Added Multi-channel Live Football Video Streaming Engine (HLS/MP4)
- Implemented Immersive Magazine-Style News Detail with parallax headers
- High-Glow Pulsing Live Match broadcast-style indicators
- Added 7-tap gesture-protected Management Portal for API stats
- Optimized SharedPreferences caching engine for league fixtures & transfer headlines
- Adaptive Light and Dark mode UI with Emerald Green theme
- Pre-configured Gradle compatibility and Java 8 desugaring support
- Complete user configuration and deployment documentation
10. About iAC Studio
iAC Studio
A Mobile App Development Company
Led by Ishtiaq Ali Chughtai, iAC Studio is a powerhouse with 8+ years of industry experience. We transform complex ideas into high-performance digital assets across Flutter, Unity, and AI sectors.
11. Support Hub
Get in Touch
Need help with customization or have a custom requirement? Our team is available for high-end Flutter integrations and consultations.
Email: [email protected]
WhatsApp: +92 302 688 1965
Location: Jagna, Gujranwala, Punjab, Pakistan