Stick-It lets you capture where stickers and street art are found, and explore posts from others on an interactive map.
Key features:
- Groups and community: Share posts with groups and discover new content from friends and others.
- Interactive map: View stickers and groups on the map and explore local rankings.
- Fast posting: Take a photo, tag it to a location, and share in seconds.
- Overview feed: Quickly enable/disable groups to curate your feed.
The Stick-It app is built using the Flutter framework, which allows for cross-platform development on Android, iOS, and web platforms. Here's a high-level overview of how the app works:
The app is structured as follows:
- data: contains data models, repositories, and services. Repositories handles and provides database operations. Services provide business logic for the app, including holding global state values and making api calls.
- features: contains the app's features (mostly widgets where a route leads to), such as the main screen, group screen, and profile screen. Each directory is split into representation (UI) and data (screen specific logic and states).
- util: contains utility classes, such as the app's theme, routing, and error handling.
- widgets: contains reusable widgets that are used across the app. Each directory is split into representation (UI) and data (screen specific logic and states).
- Prerequisites
- Install Flutter: https://flutter.dev/docs/get-started/install
- Ensure a working Android/iOS development environment (Android Studio / Xcode on macOS for iOS).
- Clone and install
# Clone this repository
git clone https://github.com/lr101/stick-it.git
cd stick-it
# Install dependencies
flutter pub get
- Generate code (Freezed, Json Serializable, Riverpod)
# Generates all code and resolves any conflicts
dart run build_runner build --delete-conflicting-outputs
- Run the app
# Android
flutter run -d android
# iOS (requires macOS)
flutter run -d ios
If you are working on the API client, clone the API repository next to this project and regenerate API code.
# Clone API repo next to this project
git clone git@github.com:lr101/MonaServerApi.git ../MonaServerApi
# Generate OpenAPI client
flutter pub global activate openapi_generator_cli
openapi-generator generate -i ../MonaServerApi/openapi.yaml -g dart -o ./api
- change asset path in pubspec.yaml
- run:
flutter packages pub run flutter_launcher_icons:main
- run:
flutter build apk
The app release in Google Play Store and App Store is managed via Codemagic. The pipeline is triggered when a new commit is pushed to the main branch.
- Activate openapi-generator:
flutter pub global activate openapi_generator_cli - Run generator:
openapi-generator generate -i ../MonaServerApi/openapi.yaml -g dart -o ./api
-
iOS minimum version error (Firebase):
- Error: The plugin "firebase_core" requires iOS 15.0+.
- Fix: In
ios/Podfile, setplatform :ios, '15.0'and ensure thepost_installhook setsIPHONEOS_DEPLOYMENT_TARGETto15.0for all pods. Then run on macOS:flutter clean && flutter pub get && cd ios && pod repo update && pod install.
-
Code generation errors (Freezed/Riverpod):
- Run:
dart run build_runner build --delete-conflicting-outputs. - Ensure your files contain the correct
part 'file.freezed.dart';andpart 'file.g.dart';statements when required.
- Run:
-
Android build issues:
- Run:
flutter clean && flutter pub get. - Check your Java SDK and Android SDK versions in Android Studio.
- Run:
Contributions are welcome. Please open an issue for bugs or feature requests, or submit a pull request. For larger changes, open an issue first to discuss the approach.
This project is licensed under the terms of the LICENSE file included in the repository.