Android version of application that is used to compare mobile app performance across native Android using Jetpack Compose and Flutter through defined test cases to determine the best development approach based on speed and responsiveness.
- Comprehensive documentation, performance research, test results, and related graphs can be found in the master thesis Comparison of Flutter and native Android applications
- Users can register and log in to the app if they are already registered.
- Users can also log out of the app.
- Users can browse a list of images, which is also accessible offline.
- Users can click on an item in the list to view its details.
- Users can open a map to track their current location.
The app is composed by three main layers.
The data layer includes repositories, mappers, models, datasources, and DAOs. In the photos feature, data is fetched from the JSONPlaceholder API. The data is then parsed (using Gson Converter) and saved to local database (using Room) utilizing the type-safe entity class Photo
.
The domain layer contains interfaces for repositories (e.g. PhotosRepository
) implemented in the data layer and defines entities (e.g. Photo
) central to the application's business logic. In some applications it also includes use cases that encapsulate business rules, making them reusable across the application for improved modularity and maintainability.
This layer contains all the widgets and screens that interact with data through ViewModels. An example includes observing state from PhotosViewModel
which maps the results from the data/domain layers to the appropriate UI state attributes, such as photos, isLoading, and error.
- Kotlin: Used for core app programming.
- Jetpack Compose: declarative UI Toolkit for creating screens and other UI elements.
- Google Maps Compose: For integrating interactive maps within the UI.
- Google Play Services: For location functionalities in the app.
- Navigation Components: Utilized for managing in-app navigation.
- AndroidX Components: Supports lifecycle management and UI layer composition.
- Room Database: Manages local database storage and operations.
- Hilt: Provides dependency injection to facilitate scalability and maintainability.
- Firebase: For analytics, authentication, and real-time database services.
- Retrofit, OkHttp: Handles network requests and data serialization.
- Glide: For efficient image loading and caching in the app, used in composable functions.
- GSON: Utilized for JSON serialization and deserialization.
- Firebase Performance Monitoring: Monitors and optimizes app performance in real-time. Also used to run test cases and compare performance between Android native and Flutter version of application.