News App — Rafif Sava Adyvka Pratama
2024Real-Time Multi-Source News Reader & Reactive Bookmark Platform

News App.

A high-performance cross-platform digital journalism and news curation mobile application built with Flutter, GetX reactive state management, and REST API integration. Streams live breaking news across 8 categories from CNN Indonesia via Vercel endpoints, featuring zero-latency client-side substring search filtering, ISO-8601 calendar date querying with localized Indonesian formatting, reactive bookmark persistence, dynamic dark/light theme switching, and fluid Lottie vector onboarding animations.

Role
Mobile Application Engineer
Platform
Android & iOS
Timeline
2024
Architecture
Controller-Based GetX
News Engine
CNN Indonesia REST Stream
Animation & FX
Lottie Engine & Material 3
FlutterDartGetXREST APILottieHTTP

API Ingestion Latency

State Reaction Time

Search Filtering

Content Categories

Theme Adaptation

Splash Onboarding
The Operational Mandate

Context & High-Stakes Constraints

In the modern mobile landscape, users demand lightning-fast access to breaking news without sluggish web views, cluttered advertising, or clunky navigation. News App was designed and developed as a sleek, modern mobile application delivering real-time journalistic feeds from CNN Indonesia directly into a streamlined, native interface.

The primary architectural objectives were zero-latency navigation, instantaneous full-text search, multi-category channel organization, date-based archival filtering, offline bookmark curation, and dynamic visual theming tailored for both daytime reading and nighttime environments.

02MOBILE NEWS READER & EDITORIAL PLATFORM

The News App Experience in Action

Explore the high-velocity mobile reading experience — featuring live CNN Indonesia news streams, multi-category chips, full-text substring search, ISO-8601 calendar filtering, expandable sliver article reader, and reactive bookmark curation.

🔒app.news.mobile
Official News Reader Showcase & Device Suite
01 / 04Brand Presentation

Official News Reader Showcase & Device Suite

Comprehensive presentation showcase highlighting the News App mobile architecture, displaying real-time journalism feeds, immersive editorial article reading views, and personalized bookmark management across modern iOS and Android displays.

◆ Flutter 3.x Cross-Platform Client◆ GetX Reactive State Management◆ High-Throughput REST API Ingestion
03CAPABILITIES & WORKFLOW

Core Architectural Capabilities

A breakdown of the engineering building blocks powering News App's high-throughput news delivery, reactive UI updates, and offline bookmarking.

REST API Live Stream Ingestion

Direct asynchronous HTTP client consuming CNN Indonesia news data from https://berita-indo-api.vercel.app/v1/cnn-news/ with dynamic endpoint parameter routing, robust status code validation, and resilient JSON map parsing.

GetX Reactive Architecture & State Management

Clean separation of presentation and business logic utilizing NewsController extending GetxController, observable variables (.obs) for allNews, filteredNews, bookMarks, and isLoading, wrapped in surgical Obx widget rebuilders.

Multi-Faceted Search & Calendar Date Filtering

Real-time search listener tracking user input to perform case-insensitive headline substring matching combined with native showDatePicker calendar selection comparing ISO-8601 year, month, and day.

Immersive Editorial UI & Dynamic Theming

Material Design 3 visual language featuring CustomScrollView with flexible SliverAppBar hero headers, category pills, reading duration badges, dynamic dark/light theme switching, and Lottie vector splash screen.

6 Mission-Critical Modules

Each module is engineered with robust transactional boundaries, modular isolation, and comprehensive audit trails.

MODULE // 01 OF 06Networking & HTTP

Dynamic Category Routing & RESTful Ingestion

Direct asynchronous HTTP client querying remote CNN Indonesia endpoints with dynamic category path suffixes and JSON decoding.

  • HTTP Client Pipeline: Api.getApi() uses package:http/http.dart to query https://berita-indo-api.vercel.app/v1/cnn-news/ asynchronously.
  • 8 Dynamic Channels: Supports seamless path switching across nasional, internasional, ekonomi, olahraga, teknologi, hiburan, and gaya-hidup.
  • JSON Deserialization: Maps raw API response payloads into structured List<Map<String, dynamic>> records with title, link, snippet, and images.
  • Network Fault Tolerance: Traps non-200 HTTP codes and throws descriptive exceptions caught by the reactive controller layer.

Content Ingestion & Reader Lifecycle

From CNN Indonesia REST API stream through GetX reactive transformation to reader bookmarking — every article flows through a resilient, responsive pipeline.

Stage 01Remote Stream Ingestion

API Query & Endpoint Handshake

Api.getApi() queries remote CNN endpoints with category path suffixes, validating HTTP 200 status codes.

HTTP Ingestion & Status Validation
Stage 02JSON Deserialization

Payload Parsing & Normalization

Decodes raw JSON body into structured Map<String, dynamic> records containing title, link, snippet, and multi-res images.

Model Deserialization & Typing
Stage 03Reactive Controller Binding

Observable State Synchronization

NewsController populates allNews.obs and filteredNews.obs, triggering immediate Obx DOM repaints.

GetX .obs State Synchronization
Stage 04Client-Side Intercept

Substring Search & ISO Date Filtering

_applyFilters() evaluates active keystrokes and calendar date selections against in-memory article collections.

Dual-Predicate Stream Filtering
Stage 05Editorial Presentation

Sliver Reader & Content Delivery

DetailScreen renders rich typography, hero imagery, category badges, and localized Indonesian timestamps.

Parallax Reader Rendering
Stage 06Bookmark Curation

De-Duplicated Favorite Persistence

Users tap the bookmark action to atomically add or remove articles with positive snackbar confirmations.

Reactive Bookmark Synchronization

Non-Volatile Bookmark De-Duplication & State Isolation

All bookmark operations perform title-based equality checks before mutating the observable RxList. This guarantees zero duplicate bookmarks, isolated state boundaries, and instant rollback on removal.

04SYSTEM ANATOMY & ARCHITECTURE

Application Architecture & Data Flow

Layered system design decoupling network transport, reactive state control, and responsive UI components.

Pattern: Controller-Based Reactive Client Architecture (GetX) + RESTful Microservices
Protocol: HTTPS REST (JSON) + Dart Observables (.obs) + GetX Route Manager

Presentation Layer (Flutter 3.x)

Dart ^3.8.1 + Material 3

Reactive screens (ApiScreen, DetailScreen, FavoriteScreen, SplashScreen) bound to GetX controllers via granular Obx builders.

Reactive State & Logic (lib/controller/)

GetxController + Observables

NewsController and SplashController managing observables (.obs), search listeners, date filters, themes, and bookmark rosters.

Service & Ingestion Layer (lib/api/)

HTTP 1.5.0 + dart:convert

Api class managing remote network communication with CNN Indonesia REST endpoints with robust status code validation.

Routing & Notification Engine

GetMaterialApp + Route Manager

Declarative navigation (Get.to, Get.off) and context-free UI notifications via Get.snackbar without requiring BuildContext.

Localization & Date Engine

intl 0.20.2 (id_ID)

Indonesian locale formatting using initializeDateFormatting('id_ID', null) for native date and timestamp representations.

Vector Animation Engine

Lottie 3.1.2 + After Effects JSON

Hardware-accelerated vector animation runtime executing Insider-loading.json at silky 60 FPS during startup.

Curated Technology Stack

A modern engineering stack combining high-throughput user interfaces, modular backend architecture, and resilient data layers.

Mobile Application & UI

Flutter 3.xCross-Platform Mobile Framework
Dart ^3.8.1Strongly Typed Client Programming Language
Material 3Modern Android & iOS Design System
Cupertino IconsiOS Style Iconography Library
CustomScrollViewExpanding Sliver Layout Framework

State Management & Architecture

GetX 4.7.2Reactive State & Dependency Injection
GetxControllerBusiness Logic Component Controller
Obx RebuilderSurgical Micro-Update Widget Rebuilder
Rx ObservablesReactive State Containers (.obs)
Get NavigationContext-Free Declarative Route Manager

Networking & Ingestion

HTTP 1.5.0Asynchronous HTTP REST Client
dart:convertHigh-Performance JSON Deserialization
berita-indo-apiCNN Indonesia Syndicated REST Stream
Vercel EdgeEdge-Cached API Microservice

Localization & Media Engine

Intl 0.20.2Indonesian Locale (id_ID) Date Formatter
Lottie 3.1.2Vector JSON Animation Runtime
NetworkImageRemote Media Loader with Error Fallbacks
GitDistributed Version Control System

Codebase Structure & Data Models

Clear boundary separation between system components, paired with modular schemas and structured repositories.

📁 lib/ (Core Application Architecture)
├──main.dart — App bootstrap with id_ID date formatting and GetMaterialApp
├──api/api.dart — Asynchronous REST client querying CNN Indonesia endpoints
├──controller/news_controller.dart — GetX controller managing news, filters, themes, bookmarks
├──controller/splash_controller.dart — Splash lifecycle controller managing 4s delay and route handover
├──screens/api_screen.dart — Home discovery feed, carousel, search bar, and category chips
├──screens/detail_screen.dart — Editorial reader with SliverAppBar parallax cover and bookmark toggle
├──screens/favorite_screen.dart — Dedicated bookmark repository with one-tap reader navigation
├──screens/splash_screen.dart — Cold start splash screen executing Lottie vector animation

Database Entities & Schema Models

Data Model: NewsArticle Record

Structured Dart representation of news items: title (string), link (string), contentSnippet (string), isoDate (string), and image object with small/large URLs.

REST API Endpoint: /v1/cnn-news/{category}

GET endpoint returning syndication envelope with status, total count, and array of category-specific CNN articles.

Reactive Store: NewsController State

GetxController reactive store holding allNews.obs, filteredNews.obs, bookMarks.obs, isLoading.obs, isTheme.obs, and selectedDate.

05SECURITY, API & PRODUCTION IMPACT

API Reliability & Client-Side Resiliency

Enterprise architectural safeguards ensuring uninterrupted news reading and robust error handling.

API Endpoints & Routing Architecture

Remote CNN News Ingestion

GET/v1/cnn-news/Fetches latest breaking news stream across all journalistic categories
GET/v1/cnn-news/{category}Fetches category-specific articles (nasional, internasional, ekonomi, olahraga, teknologi, hiburan, gaya-hidup)

Client-Side Reactive Filtering

CLIENTNewsController.applySearch(query)Zero-latency case-insensitive headline substring filter executed over in-memory article collection
CLIENTNewsController.filterByDate(date)Parses ISO-8601 timestamps to filter articles matching selected year, month, and day

Enterprise Security & Governance Standards

Graceful Network Intercept & User Snackbars

Surrounds API HTTP calls with try-catch blocks; automatically resets loading indicators, displays non-blocking Get.snackbar error notifications, and provides fallback empty list states.

CDN Image Fallback & Placeholder Containment

All Image.network widgets implement custom errorBuilder fallbacks rendering neutral grey placeholder containers with Icons.image_not_supported to prevent layout crashes on dead image URLs.

Null-Safe Type Boundaries & ISO Timestamp Parsing

Enforces strict Dart 3.8 null-safety across all dynamic JSON maps, using safe navigation operators and try-parse handlers for ISO-8601 timestamps and nested image URL properties.

Non-Volatile Bookmark State De-Duplication

Employs any() predicate validation on article titles before appending to bookMarks.obs, preventing accidental duplicate saves and providing immediate visual feedback.

Engineering Challenges & Production Results

How critical technical bottlenecks were overcome and verified under real production conditions.

Challenge // 01

Coordinating multi-predicate filtering across search text and calendar dates simultaneously. Solved by architecting an atomic _applyFilters() method that sequentially evaluates both active calendar dates against parsed ISO-8601 strings and lowercase headline substring queries against the in-memory master collection.

Challenge // 02

Handling remote CDN image load failures and dead thumbnail links gracefully. Solved by implementing robust errorBuilder callbacks across all Image.network instances, gracefully substituting missing media with styled placeholder widgets and preventing layout shifts.

Challenge // 03

Delivering fluid UI transitions between bright daytime reading and dark night mode. Solved by building a dynamic Get.changeTheme() mechanism that toggles between ThemeData.dark() and a tailored light theme with zero-elevation app bars.

Sub-200msAPI Ingestion Latency
0msSearch Filter Latency
0%Duplicate Bookmark Rate
60 FPSSplash Animation Rate
What's next

Let's build something.

Recruiting, contracting, or just curious — the inbox is open.

Rafif Sava Adyvka Pratama