Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
b16c91a
Merge pull request #679 from flow-mn/develop
sadespresso Mar 6, 2026
d6dcebc
Merge pull request #680 from flow-mn:develop
sadespresso Mar 7, 2026
56c899d
Merge pull request #682 from flow-mn/develop
sadespresso Mar 9, 2026
b5bac4d
Merge pull request #687 from flow-mn/develop
sadespresso Mar 15, 2026
f87ae1d
Merge pull request #688 from flow-mn:develop
sadespresso Mar 16, 2026
edffa94
Merge pull request #689 from flow-mn:develop
sadespresso Mar 16, 2026
2499f91
Merge pull request #692 from flow-mn:develop
sadespresso Mar 25, 2026
04abcf4
Merge pull request #696 from flow-mn:develop
sadespresso Apr 6, 2026
70cb713
Merge pull request #702 from flow-mn:develop
sadespresso Apr 19, 2026
d9c00cc
Merge pull request #703 from flow-mn:develop
sadespresso Apr 19, 2026
bf5dce8
Merge pull request #704 from flow-mn:develop
sadespresso Apr 19, 2026
4cb633e
Merge pull request #705 from flow-mn:develop
sadespresso Apr 19, 2026
877a399
Merge pull request #712 from flow-mn:develop
sadespresso Apr 21, 2026
f1c3040
Merge pull request #724 from flow-mn/develop
sadespresso May 18, 2026
1849f78
Merge pull request #732 from flow-mn/develop
sadespresso Jun 9, 2026
8ee064b
Disable Jetifier to fix release build OOM
sadespresso Jun 9, 2026
cf36741
Disable Jetifier to fix release build OOM
sadespresso Jun 9, 2026
5b6c638
aoaoaoao
sadespresso Jun 9, 2026
6c2a3a3
Merge pull request #733 from flow-mn/develop
sadespresso Jun 9, 2026
59f81c9
Update CHANGELOG.md
sadespresso Jun 9, 2026
955dd2b
update pubspec
sadespresso Jun 12, 2026
a9241e7
aoaoao
sadespresso Jun 12, 2026
a70382d
Merge pull request #734 from flow-mn/develop
sadespresso Jun 12, 2026
fe3ac2d
Raise Gradle daemon heap to 5g to fix R8 release OOM
sadespresso Jun 12, 2026
83efdaf
Merge branch 'beta' of github.com:flow-mn/flow into develop
sadespresso Jun 14, 2026
44f2a37
Update build-fat-apk-android-beta.yaml
sadespresso Jun 14, 2026
1900032
Update pubspec.lock
sadespresso Jun 14, 2026
2ad8dd0
pin home widget lower version
sadespresso Jun 14, 2026
e749803
hotfix
sadespresso Jun 15, 2026
bf7d66a
update lock
sadespresso Jun 15, 2026
8117460
highlight selected icon
sadespresso Jun 15, 2026
a3327d8
bump ver
sadespresso Jun 15, 2026
f0b31f4
realistic demo data :)
sadespresso Jun 15, 2026
963b6a5
rc 0.23.2
sadespresso Jun 21, 2026
0eaf80a
remove mentions of discord & github issues
sadespresso Jun 21, 2026
ed5c40c
budgets: renewal, v2 backup import/export, and l10n
sadespresso Jul 10, 2026
62adc9c
budgets: all-budgets overview, alerts, recommendations, redesigned ed…
sadespresso Jul 14, 2026
6f93205
l10n: translations
sadespresso Jul 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 15 additions & 3 deletions .github/workflows/build-fat-apk-android-beta.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@ on:
release:
types: [published]
workflow_dispatch:
inputs:
tag:
description: "Release tag to build from and attach the APK to (e.g. 0.23.0)"
required: true
type: string

jobs:
build:
Expand All @@ -11,6 +16,8 @@ jobs:
permissions: write-all
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.inputs.tag || github.ref }}
- name: Setup JDK 17
uses: actions/setup-java@v4.0.0
with:
Expand All @@ -21,7 +28,12 @@ jobs:
with:
channel: stable
- name: Set release tag name
run: echo "RELEASE_TAG=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV
run: |
if [ -n "${{ github.event.inputs.tag }}" ]; then
echo "RELEASE_TAG=${{ github.event.inputs.tag }}" >> $GITHUB_ENV
else
echo "RELEASE_TAG=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV
fi
- run: flutter pub get
- name: Run tests
run: |
Expand All @@ -37,5 +49,5 @@ jobs:
env:
GH_TOKEN: ${{ github.token }}
run: |
gh release upload ${{ env.RELEASE_TAG }} ./build/app/outputs/flutter-apk/app-release.apk
gh release upload ${{ env.RELEASE_TAG }} ./build/app/outputs/flutter-apk/app-release.apk.sha1
gh release upload ${{ env.RELEASE_TAG }} ./build/app/outputs/flutter-apk/app-release.apk --clobber
gh release upload ${{ env.RELEASE_TAG }} ./build/app/outputs/flutter-apk/app-release.apk.sha1 --clobber
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ app.*.map.json
# ObjectBox unit testing

.objectbox_test
.objectbox_test_demo

# Objectbox library

Expand All @@ -56,4 +57,4 @@ lib/libobjectbox.dylib
lib/libobjectbox.so

# FVM Version Cache
.fvm/
.fvm/
20 changes: 19 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,28 @@
# Changelog

## next
## 0.23.2

### Fixes

* Fixed stats tab may be out of sync

### Changes

* Location picker now features a "current location" button
* Added "Tip the creator" in-app purchase for iOS

## 0.23.1

### Fixes

* Fixed selecting icons

## 0.23.0

### New features

* Added Traditional Chinese (Taiwan) localizations
* Revamped the stats tab, and added insights

## 0.22.0

Expand Down
3 changes: 1 addition & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@

[![Buy me a coffee](https://img.shields.io/badge/buy_me_a_coffee-sadespresso-f5ccff?logo=buy-me-a-coffee&logoColor=white&style=for-the-badge)](https://buymeacoffee.com/sadespresso)
[![Website](https://img.shields.io/badge/Website-flow.gege.mn-f5ccff?style=for-the-badge)](https://flow.gege.mn) 
[![Flow's GitHub repo](https://img.shields.io/badge/GitHub-flow--mn/flow-f5ccff?logo=github&logoColor=white&style=for-the-badge)](https://github.com/flow-mn/flow) 
[![Join Flow Discord server](https://img.shields.io/badge/Discord-Flow-f5ccff?logo=discord&logoColor=white&style=for-the-badge)](https://discord.gg/Ndh9VDeZa4)
[![Flow's GitHub repo](https://img.shields.io/badge/GitHub-flow--mn/flow-f5ccff?logo=github&logoColor=white&style=for-the-badge)](https://github.com/flow-mn/flow)

## Preface

Expand Down
25 changes: 25 additions & 0 deletions android/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,31 @@ subprojects {
val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name)
project.layout.buildDirectory.value(newSubprojectBuildDir)
project.evaluationDependsOn(":app")

plugins.withId("com.android.library") {
if (!project.plugins.hasPlugin("org.jetbrains.kotlin.android")) {
project.apply(plugin = "org.jetbrains.kotlin.android")

// Those same plugins also skip their `kotlinOptions` block under
// AGP 9, so the force-applied Kotlin compiler defaults to the
// JDK's target (e.g. 21) and clashes with their Java target
// ("Inconsistent JVM-target compatibility"). Align Kotlin's
// jvmTarget to whatever Java target the module declares.
project.afterEvaluate {
val javaTarget = project.tasks
.withType(org.gradle.api.tasks.compile.JavaCompile::class.java)
.map { it.targetCompatibility }
.firstOrNull() ?: "1.8"
project.tasks
.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile::class.java)
.configureEach {
compilerOptions.jvmTarget.set(
org.jetbrains.kotlin.gradle.dsl.JvmTarget.fromTarget(javaTarget)
)
}
}
}
}
}

tasks.register<Delete>("clean") {
Expand Down
5 changes: 3 additions & 2 deletions android/gradle.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
org.gradle.jvmargs=-Xmx2560M
# R8 release minification runs in the Gradle daemon; 2560M OOM'd in
# minifyReleaseWithR8 on CI. ubuntu-latest has 16 GB, so give the daemon room.
org.gradle.jvmargs=-Xmx5120M -XX:MaxMetaspaceSize=2g
android.useAndroidX=true
android.enableJetifier=true
android.defaults.buildfeatures.resvalues=true
android.sdk.defaultTargetSdkToCompileSdkIfUnset=false
android.enableAppCompileTimeRClass=false
Expand Down
57 changes: 53 additions & 4 deletions assets/l10n/ar.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,47 @@
"accounts": "الحسابات",
"appName": "Flow",
"appShortDesc": "متتبع التمويل الشخصي الخاص بك",
"budget.alert.action": "مراجعة",
"budget.alert.left": "{amount} متبقي",
"budget.alert.near": "{name}: {percent}% مستخدم",
"budget.alert.over": "{name}: تجاوز الميزانية",
"budget.alert.overBy": "تجاوز بمقدار {amount}",
"budget.amount": "مبلغ الميزانية",
"budget.amount.required": "يجب أن يكون مبلغ الميزانية أكبر من صفر",
"budget.categories": "الفئات",
"budget.categories.all": "تُحتسب جميع النفقات",
"budget.categories.allShort": "جميع النفقات",
"budget.categories.description": "تُحتسب في هذه الميزانية نفقات الفئات المحددة فقط. لا تحدد أي فئة لاحتساب جميع النفقات.",
"budget.delete": "حذف الميزانية",
"budget.delete.description": "لن تتأثر المعاملات. هذا الإجراء لا رجعة فيه!",
"budget.insight.nearingLimit": "{name} تم إنفاق {percent}%، تبقى {days} يومًا. خفف الإنفاق لتبقى ضمن الحد.",
"budget.insight.onTrack": "{name} على المسار الصحيح — {amount} متبقي.",
"budget.insight.over": "أنت متجاوز بمقدار {amount} في {name}. قلل الإنفاق أو ارفع الحد.",
"budget.insight.overpacing": "بهذه الوتيرة، سيتجاوز {name} الحد بمقدار {amount}.",
"budget.insight.underspending": "{name} لديه متسع — {amount} غير مُنفق.",
"budget.name": "اسم الميزانية",
"budget.overview.allHealthy": "كل شيء على المسار الصحيح. عمل رائع.",
"budget.overview.budgetsTracked": "{count} ميزانيات متبعة",
"budget.overview.budgetsTracked.one": "{count} ميزانية متبعة",
"budget.overview.create": "ميزانية جديدة",
"budget.overview.empty": "لا توجد ميزانيات بعد",
"budget.overview.empty.description": "أنشئ ميزانية لمعرفة كيف يتماشى إنفاقك مع حدودك.",
"budget.overview.missingRates": "تم تخطي بعض المبالغ (أسعار صرف مفقودة).",
"budget.overview.nearingLimit": "{count} ميزانيات تقترب من حدها",
"budget.overview.nearingLimit.one": "{count} ميزانية تقترب من حدها",
"budget.overview.nothingOver": "لا توجد تجاوزات للحد",
"budget.overview.overLimit": "{count} ميزانيات تجاوزت الحد",
"budget.overview.overLimit.one": "{count} ميزانية تجاوزت الحد",
"budget.overview.perBudget": "ميزانياتك",
"budget.overview.recommendations": "توصيات",
"budget.overview.summary": "الحالة",
"budget.overview.title": "نظرة عامة على الميزانية",
"budget.period": "الفترة",
"budget.renewAutomatically": "تجديد تلقائي",
"budget.renewAutomatically.description": "عند انتهاء الفترة، تنتقل الميزانية إلى الفترة الجديدة. على سبيل المثال، تصبح ميزانية يوليو ميزانية أغسطس.",
"budget.scope": "النطاق",
"budgets": "الميزانيات",
"budgets.new": "ميزانية جديدة",
"categories": "الفئات",
"categories.addFromPresets": "إضافة من الإعدادات المسبقة",
"categories.noCategories": "ليس لديك أي فئات",
Expand Down Expand Up @@ -113,6 +154,7 @@
"enum.ImportV2Progress@success": "نجاح",
"enum.ImportV2Progress@waitingConfirmation": "في انتظار التأكيد",
"enum.ImportV2Progress@writingAccounts": "يجري كتابة الحسابات",
"enum.ImportV2Progress@writingBudgets": "يجري كتابة الميزانيات",
"enum.ImportV2Progress@writingCategories": "يجري كتابة الفئات",
"enum.ImportV2Progress@writingFileAttachments": "جاري كتابة المرفقات",
"enum.ImportV2Progress@writingProfile": "يجري كتابة بيانات الملف الشخصي",
Expand Down Expand Up @@ -532,11 +574,10 @@
"support.leaveAReview": "اترك تقييمًا",
"support.leaveAReview.action": "قيم Flow",
"support.leaveAReview.description": "يمكنك تقييم Flow وترك مراجعة على {appStore}",
"support.requestFeatures": "اقترح أفكارًا",
"support.requestFeatures.action": "زيارة متعقب القضايا",
"support.requestFeatures.description": "يمكنك أيضًا دعمنا بتقديم الملاحظات وأفكار الاقتراحات لتحسين Flow.",
"support.starOnGitHub": "أضف نجمة على جيثب",
"support.starOnGitHub.description": "إضافة نجمة لـ Flow على جيثب تساعد الآخرين في اكتشافه",
"support.tip.error": "تعذر بدء عملية الشراء. الرجاء المحاولة مرة أخرى.",
"support.tip.thankYou": "شكرًا لدعمك لـ Flow! 💜",
"sync.export": "تصدير",
"sync.export.asCSV": "كملف CSV",
"sync.export.asCSV.description": "لا يمكن استخدامه للاستعادة/الاستيراد! مثالي للفتح في برامج مثل Google Sheets",
Expand Down Expand Up @@ -642,13 +683,21 @@
"tabs.profile.community": "المجتمع",
"tabs.profile.guide": "دليل الاستخدام",
"tabs.profile.import": "الاستيراد",
"tabs.profile.joinDiscord": "انضم إلى Discord الخاص بـ Flow",
"tabs.profile.other": "أخرى",
"tabs.profile.preferences": "التفضيلات",
"tabs.profile.recommend": "أوصي بـ Flow",
"tabs.profile.support": "دعم Flow",
"tabs.profile.withLoveFromTheCreator": "مع 🤍 من sadespresso",
"tabs.stats": "الإحصائيات",
"tabs.stats.analytics.budgets": "الميزانيات",
"tabs.stats.analytics.budgets.empty": "حدد ميزانية للإنفاق",
"tabs.stats.analytics.budgets.nearingCount": "{count} ميزانيات تقترب من الحد",
"tabs.stats.analytics.budgets.nearingCount.one": "{count} ميزانية تقترب من الحد",
"tabs.stats.analytics.budgets.onTrack": "الكل على المسار الصحيح",
"tabs.stats.analytics.budgets.overCount": "{count} ميزانيات تجاوزت الحد",
"tabs.stats.analytics.budgets.overCount.one": "{count} ميزانية تجاوزت الحد",
"tabs.stats.analytics.budgets.tracked": "{count} ميزانيات",
"tabs.stats.analytics.budgets.tracked.one": "{count} ميزانية",
"tabs.stats.analytics.calendar": "التقويم",
"tabs.stats.analytics.calendar.priciestDay": "أغلى يوم لديك هو {value}.",
"tabs.stats.analytics.calendar.spentIn": "المنفق في {}",
Expand Down
57 changes: 53 additions & 4 deletions assets/l10n/be_BY.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,47 @@
"accounts": "Рахункі",
"appName": "Flow",
"appShortDesc": "Ваш асабісты фінансавы трэкер",
"budget.alert.action": "Праверыць",
"budget.alert.left": "{amount} засталося",
"budget.alert.near": "{name}: выкарыстана {percent}%",
"budget.alert.over": "{name}: перавышаны бюджэт",
"budget.alert.overBy": "Перавышэнне на {amount}",
"budget.amount": "Сума бюджэту",
"budget.amount.required": "Сума бюджэту павінна быць больш за нуль",
"budget.categories": "Катэгорыі",
"budget.categories.all": "Улічваюцца ўсе выдаткі",
"budget.categories.allShort": "Усе выдаткі",
"budget.categories.description": "У гэты бюджэт уваходзяць толькі выдаткі выбраных катэгорый. Не выбірайце нічога, каб улічваць усе выдаткі.",
"budget.delete": "Выдаліць бюджэт",
"budget.delete.description": "Транзакцыі не будуць закрануты. Гэта дзеянне незваротнае!",
"budget.insight.nearingLimit": "{name} выкарыстана на {percent}% — застаецца {days}d. Памяньшыце выдаткі, каб застацца ў межах.",
"budget.insight.onTrack": "{name} у парадку — засталося {amount}.",
"budget.insight.over": "Вы перавысілі ліміт па {name} на {amount}. Зменшыце выдаткі або павялічце ліміт.",
"budget.insight.overpacing": "Пры такім тэмпе {name} перавысіць ліміт на {amount}.",
"budget.insight.underspending": "{name} мае запас — не выдаткавана {amount}.",
"budget.name": "Назва бюджэту",
"budget.overview.allHealthy": "Усё ідзе па плане. Выдатная праца.",
"budget.overview.budgetsTracked": "{count} бюджэтаў адсочваецца",
"budget.overview.budgetsTracked.one": "{count} бюджэт адсочваецца",
"budget.overview.create": "Новы бюджэт",
"budget.overview.empty": "Пакуль няма бюджэтаў",
"budget.overview.empty.description": "Стварыце бюджэт, каб бачыць, як вашы выдаткі адпавядаюць лімітам.",
"budget.overview.missingRates": "Некаторыя сумы прапушчаныя (адсутнічаюць курсы абмену).",
"budget.overview.nearingLimit": "{count} набліжаюцца да свайго ліміту",
"budget.overview.nearingLimit.one": "{count} набліжаецца да свайго ліміту",
"budget.overview.nothingOver": "Няма перавышэння ліміту",
"budget.overview.overLimit": "{count} перавысілі ліміт",
"budget.overview.overLimit.one": "{count} перавысіў ліміт",
"budget.overview.perBudget": "Вашы бюджэты",
"budget.overview.recommendations": "Рэкамендацыі",
"budget.overview.summary": "Статус",
"budget.overview.title": "Агляд бюджэтаў",
"budget.period": "Перыяд",
"budget.renewAutomatically": "Аднаўляць аўтаматычна",
"budget.renewAutomatically.description": "Калі перыяд заканчваецца, бюджэт пераходзіць на новы перыяд. Напрыклад, бюджэт ліпеня становіцца бюджэтам жніўня.",
"budget.scope": "Ахоп",
"budgets": "Бюджэты",
"budgets.new": "Новы бюджэт",
"categories": "Катэгорыі",
"categories.addFromPresets": "Дадаць з шаблонаў",
"categories.noCategories": "У вас няма катэгорый",
Expand Down Expand Up @@ -113,6 +154,7 @@
"enum.ImportV2Progress@success": "Паспяхова",
"enum.ImportV2Progress@waitingConfirmation": "Чаканне пацверджання",
"enum.ImportV2Progress@writingAccounts": "Запіс рахункаў",
"enum.ImportV2Progress@writingBudgets": "Запіс бюджэтаў",
"enum.ImportV2Progress@writingCategories": "Запіс катэгорый",
"enum.ImportV2Progress@writingFileAttachments": "Запіс прымацаваных файлаў",
"enum.ImportV2Progress@writingProfile": "Запіс даных профілю",
Expand Down Expand Up @@ -532,11 +574,10 @@
"support.leaveAReview": "Пакінуць водгук",
"support.leaveAReview.action": "Ацаніць Flow",
"support.leaveAReview.description": "Вы можаце ацаніць Flow і пакінуць водгук у {appStore}",
"support.requestFeatures": "Падзяліцца ідэямі",
"support.requestFeatures.action": "Наведаць трэкер задач",
"support.requestFeatures.description": "Вы таксама можаце падтрымаць нас, пакінуўшы водгук і прапанаваўшы ідэі па паляпшэнні Flow.",
"support.starOnGitHub": "Паставіць зорку на GitHub",
"support.starOnGitHub.description": "Зорка для Flow на GitHub дапамагае людзям знаходзіць Flow",
"support.tip.error": "Не ўдалося пачаць пакупку. Калі ласка, паспрабуйце яшчэ раз.",
"support.tip.thankYou": "Дзякуй за падтрымку Flow! 💜",
"sync.export": "Экспарт",
"sync.export.asCSV": "Як CSV",
"sync.export.asCSV.description": "Немагчыма выкарыстоўваць для аднаўлення/імпарту! Ідэальна для адкрыцця ў такіх праграмах, як Google Sheets",
Expand Down Expand Up @@ -640,13 +681,21 @@
"tabs.profile.community": "Супольнасць",
"tabs.profile.guide": "Кіраўніцтва карыстальніка",
"tabs.profile.import": "Імпарт",
"tabs.profile.joinDiscord": "Далучайцеся да Discord Flow",
"tabs.profile.other": "Іншае",
"tabs.profile.preferences": "Налады",
"tabs.profile.recommend": "Рэкамендаваць Flow",
"tabs.profile.support": "Падтрымаць Flow",
"tabs.profile.withLoveFromTheCreator": "з 🤍 ад sadespresso",
"tabs.stats": "Статыстыка",
"tabs.stats.analytics.budgets": "Бюджэты",
"tabs.stats.analytics.budgets.empty": "Усталюйце бюджэт выдаткаў",
"tabs.stats.analytics.budgets.nearingCount": "{count} набліжаюцца да ліміту",
"tabs.stats.analytics.budgets.nearingCount.one": "{count} набліжаецца да ліміту",
"tabs.stats.analytics.budgets.onTrack": "Усё па плане",
"tabs.stats.analytics.budgets.overCount": "{count} перавысілі ліміт",
"tabs.stats.analytics.budgets.overCount.one": "{count} перавысіў ліміт",
"tabs.stats.analytics.budgets.tracked": "{count} бюджэтаў",
"tabs.stats.analytics.budgets.tracked.one": "{count} бюджэт",
"tabs.stats.analytics.calendar": "Каляндар",
"tabs.stats.analytics.calendar.priciestDay": "Ваш самы дарагі дзень — {value}.",
"tabs.stats.analytics.calendar.spentIn": "Патрачана ў {}",
Expand Down
Loading
Loading