Cashew is a full-fledged, feature-rich application designed to empower users in managing their finances effectively. Built using Flutter – with Drift’s SQL package, and Firebase – this app offers a seamless and intuitive user experience across various devices. Development started in September 2021.
- To build an app-bundle Android release, run
flutter build appbundle --release.
Note: required Android SDK.
- To build an IPA iOS release, run
flutter build ipa.
Note: requires MacOS.
- To deploy to firebase, run
Note: required Firebase.
- Create a tag for the current version specified in
git tag <version>
- Push the tag
git push origin <version>
- Create the release and upload binaries
- Deploy to Firebase and build the apk and appbundle
- Opens the location of the built apk and appbundle
- Downloads the latest version of Cashew translations. Runs
Develop Wirelessly on Android
adb tcpip 5555
adb connect <IP>
- Get the phone’s IP by going to
- Make any database changes to the schema and tables
- Bump the schema version
int schemaVersionGlobal = ...+1in
- Make sure you are in application root directory
- Generate database code
dart run build_runner build
- Export the new schema
- Generate schema dump for the newly created schema
[schemaVersion]in the command below with the value of
dart run drift_dev schema dump lib\database\tables.dart drift_schemas//drift_schema_v[schemaVersion].json
- Read more: https://drift.simonbinder.eu/docs/advanced-features/migrations/#exporting-the-schema
- Generate step-by-step migrations
dart run drift_dev schema steps drift_schemas/ lib\database\schema_versions.dart
- Implement migration strategy
await stepByStep(...)function in
tables.dartand add the migration strategy for the new version migration
Platformis not supported on web, we must create a wrapper and always use this to determine the current platform
- If we want to navigate to a new page, stick to
pushRoute(context, page)function from
- It handles the platform routing and
Wallets vs. Accounts
Walletshave been been renamed to
Accountson the front-end but internally, the name
Walletis still used.
Objectives vs. Goals
Objectiveshave been been renamed to
Goalson the front-end but internally, the name
Objectivesis still used.
Is it okay to use runBlocking?
In this video I’ll talk about when it’s fine to use the runBlocking function from Kotlin coroutines and when you...
Mobile App Development Best Practices – 07.12
KSP2 Preview, Mastering in SwiftUI, How to implement gamification and more!
Gemini is the new foundation for artificial intelligence in Android
Foundation models are trained on a variety of data sources to create artificial intelligence systems that can adapt to a...
Google has released AlphaCode 2 based on Gemini
Google today, along with its Gemini artificial intelligence model, unveiled AlphaCode 2, an improved version of the AlphaCode code generator...
ColorfulX – Metal for crafting multi-colored gradients
ColorfulX is an implementation using Metal for crafting multi-colored gradients. ColorfulX Platform UIKit and AppKit platforms are generally supported. Due to MTKView not...
Mobile App Development Best Practices – 06.12
Power of enums, A New Foundation for AI on Android, developer dogmas and more!