A beautiful app to help you achieve your goals🎯

Overview

Goalkeeper

Goalkeeper 🎯

Stars Forks Build Issues License

A neat, nice looking Flutter app to keep track of your goals! It can be built for iOS and Android, and is available for free on the Play Store.

Not only was this my first major Flutter app, but also the first real, working mobile app that I developed and published. Nostalgia!

Play Store

Screenshots

Goalkeeper Goalkeeper Goalkeeper Goalkeeper

Building

To build and run the app on your device, do the following:

  • Install Flutter by following the instructions on their website.
  • Fork/clone this repo to your local machine using git clone https://github.com/urmilshroff/goalkeeper.git.
  • Connect your devices/emulators and run the app using flutter run --release in the root of the project directory.

Note: you can also run it faster in debug mode using flutter run, but the animations will be choppy and performance won't be as expected.

Contributing

Found any bugs? Have any suggestions or code improvements? Submit an issue or fork and send a pull request with your changes. All contributions are more than welcome, and will be merged into flutter (the default branch) if satisfactory.

Credits

Shoutout to Arabi Ishaque for updating the icon and banner! Please take a look at the list of contributors to see who all have helped with the project directly.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Comments
  • code organization and refactoring

    code organization and refactoring

    I went overboard and refactored/organized the project. some major points to look for:

    • new folder structure: Models, Pages, Services, Utils, and Widgets.
    • Models contains our only business model: Goal.
    • Its better that the name of the sub-files doesnt contain any redundant information, like Page folder with home_page file, since its Page folder, the files are automatically pages ! so i removed "_page" part from the files.
    • I Wrote 3 Services namely: NotificationCenter, GoalsRepository, Db, and NavigationService (not sure why..)
    • I moved all the Database Logic into Db class, which is used solely through the Repository.
    • Repository is the only source for the data in the application.
    • i noticed that you were using the database directly which for sure slow down your app, and it could be the cause of #3 since you wrote that it started after you added SqlLite. I also implemented a simple cache layer as a list just to speed things up a bit, hopefully everyting works well now. 😅
    • All the notification logic now resides in NotificationCenter service, and is working flawlessly. ( try change any goal reminder to current minute, should get notification in less couple of seconds 😀!)
    • the reason why notifications were getting overridden was because you was using a constant '0' as notification id when constructing notifications, which is not a unique value. I changed that to the goal id for now, until we find a solution to implement multiple notifications for the same goal.

    build it/ check it out on the dev branch before merging into main! any feedback is welcome ! 😆

    PS: i partially implemented some unit testing. The code should be good for testing now, but it will take some to write proper unit tests as its my first time writing test 😅. look forward for more pull requests !

    Edit: not sure why, the folder 'pages' didnt commit the change to 'Pages', do it manually..

    opened by ghaith96 3
  • Reminders are very broken

    Reminders are very broken

    TODO:

    • Need to display reminder time in GoalsPage.
    • Need to add option to edit reminders in EditPage.
    • Need to allow multiple reminder notifications (newer ones overwrite already existing ones in the notification shade).
    • Need to fix time when reminders are displayed.

    TL;DR: The entire reminders feature is pretty broken, and the code is kind of a mess. This is my first proper Flutter app and I don't really know what I'm doing.

    help wanted good first issue 
    opened by urmilshroff 3
  • code refactoring and unit testing

    code refactoring and unit testing

    Hello 😄 , Everything should be fixed in the code now, sorry about that. I added basic unit testing to the repository. I didn't do any integration tests yet. I might do that soon. I refactored the services to interfaces, and set up the composition root for our dependencies in app main. Now every dependency is manually injected to facilitate integration tests ! Oh btw, how do you imagine the card? i suck at UI/UX 😆.

    edit: feel free to comment any line or ask about anything in the code, i'll gladly explain anything 😊

    opened by ghaith96 2
  • fix no element exception when accessing last element

    fix no element exception when accessing last element

    When i was quickly tested the app on my physical device, i had old goals in the database so i never got this issue. However when i started writing some unit testing, i got this problem and fixed it, but didnt push it yet as I'm still waiting to finish the unit tests. The problem occurs in Repository.getNextId and Repository.find, when the list is empty, and try to access last element it throws this exception. these changes should fix the problem. Sorry about that 😔.

    opened by ghaith96 2
  • Add tween for hero animation

    Add tween for hero animation

    By default, Hero animation uses MaterialRectArcTween which causes this kind of slope animation for farther heros. Using RectTween, every hero now has similar animation regardless of the position, which is kinda linear/snappy animation between the two positions. If this what are looking for, this PR should close #3 .😄

    opened by ghaith96 1
  • potential fix for Issue #3

    potential fix for Issue #3

    Hi again 😄, I was looking into #3, and i saw this post which state that in order to change the hero animation duration, you need to change the PageRoute transition duration from one page to another. It seems fine on my android now, but can you check it out @urmilshroff ? maybe you need to play with the duration/curve to get it as it was before or better.

    opened by ghaith96 1
  • improved reminder feature

    improved reminder feature

    partial Fix for #4

    • I displayed reminder time in GoalsPage.
    • I also added option to edit reminders in EditPage. plus some refactoring here and there. i still need some more info about the last two points:
    • Need to allow multiple reminder notifications (newer ones overwrite already existing ones in the notification shade).
    • Need to fix time when reminders are displayed. Anyhow, I can see that the code has a room for improvement, logically and structurally.
    opened by ghaith96 1
  • [ImgBot] Optimize images

    [ImgBot] Optimize images

    Beep boop. Your images are optimized!

    Your image file size has been reduced by 16% 🎉

    Details

    | File | Before | After | Percent reduction | |:--|:--|:--|:--| | /branding/screener/pixel-xl/5.png | 384.22kb | 296.76kb | 22.76% | | /branding/screener/pixel-xl/4.png | 266.08kb | 223.11kb | 16.15% | | /branding/screener/pixel-xl/1.png | 116.55kb | 101.93kb | 12.55% | | /branding/screener/pixel-xl/2.png | 317.02kb | 278.89kb | 12.03% | | /branding/screener/pixel-xl/3.png | 252.81kb | 224.23kb | 11.31% | | | | | | | Total : | 1,336.69kb | 1,124.92kb | 15.84% |


    📝docs | :octocat: repo | 🙋issues | 🏅swag | 🏪marketplace

    opened by imgbot[bot] 0
  • [ImgBot] Optimize images

    [ImgBot] Optimize images

    Beep boop. Your images are optimized!

    Your image file size has been reduced by 13% 🎉

    Details

    | File | Before | After | Percent reduction | |:--|:--|:--|:--| | /assets/icon/icon-ios.png | 172.96kb | 115.71kb | 33.10% | | /assets/icon/icon-adaptive.png | 130.23kb | 99.87kb | 23.31% | | /assets/icon/icon-legacy.png | 233.38kb | 197.30kb | 15.46% | | /ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected] | 23.16kb | 19.60kb | 15.37% | | /ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected] | 17.53kb | 14.92kb | 14.87% | | /ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected] | 20.12kb | 17.19kb | 14.59% | | /ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected] | 16.10kb | 13.79kb | 14.35% | | /ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected] | 12.12kb | 10.51kb | 13.25% | | /ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected] | 12.12kb | 10.51kb | 13.25% | | /ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected] | 11.23kb | 9.76kb | 13.07% | | /ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected] | 9.39kb | 8.21kb | 12.52% | | /ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected] | 7.65kb | 6.70kb | 12.39% | | /ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected] | 6.80kb | 6.01kb | 11.63% | | /ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected] | 6.37kb | 5.65kb | 11.36% | | /ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected] | 5.86kb | 5.21kb | 11.05% | | /ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected] | 4.54kb | 4.08kb | 10.21% | | /ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected] | 4.21kb | 3.81kb | 9.60% | | /ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected] | 4.30kb | 3.91kb | 9.04% | | /ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected] | 3.59kb | 3.27kb | 8.91% | | /ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected] | 2.61kb | 2.42kb | 7.34% | | /ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected] | 2.61kb | 2.42kb | 7.34% | | /ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected] | 340.40kb | 319.90kb | 6.02% | | /ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected] | 1.67kb | 1.59kb | 4.67% | | /android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png | 76.77kb | 73.88kb | 3.76% | | /android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png | 23.22kb | 22.65kb | 2.44% | | /android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png | 15.40kb | 15.09kb | 1.99% | | /android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png | 46.48kb | 45.61kb | 1.86% | | /android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png | 37.23kb | 36.58kb | 1.74% | | /android/app/src/main/res/mipmap-xhdpi/launcher_icon.png | 13.07kb | 12.86kb | 1.62% | | /android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png | 23.50kb | 23.17kb | 1.43% | | /android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png | 8.47kb | 8.39kb | 0.87% | | | | | | | Total : | 1,293.07kb | 1,120.58kb | 13.34% |


    📝docs | :octocat: repo | 🙋issues | 🏅swag | 🏪marketplace

    opened by imgbot[bot] 0
  • [ImgBot] Optimize images

    [ImgBot] Optimize images

    Beep boop. Your images are optimized!

    Your image file size has been reduced by 12% 🎉

    Details

    | File | Before | After | Percent reduction | |:--|:--|:--|:--| | /branding/art/banner.png | 73.41kb | 48.70kb | 33.66% | | /assets/urmil-vector.png | 90.98kb | 61.27kb | 32.66% | | /branding/screener/pixel-xl/screener_1560163366785.png | 218.36kb | 178.21kb | 18.39% | | /branding/screener/pixel-xl/screener_1560163212026.png | 248.78kb | 205.15kb | 17.54% | | /branding/screener/pixel-xl/screener_1560163107452.png | 243.85kb | 201.24kb | 17.48% | | /branding/other/google-play-badge.png | 13.63kb | 11.27kb | 17.32% | | /branding/art/icon.svg | 1.22kb | 1.05kb | 14.46% | | /branding/screener/pixel-xl/screener_1560163281167.png | 136.78kb | 118.36kb | 13.47% | | /branding/screener/pixel-xl/screener_1560163016434.png | 113.08kb | 98.63kb | 12.77% | | /ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected] | 244.09kb | 226.22kb | 7.32% | | /ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected] | 23.19kb | 21.77kb | 6.13% | | /assets/icon.png | 149.75kb | 140.86kb | 5.93% | | /assets/icon-android.png | 149.75kb | 140.86kb | 5.93% | | /branding/art/icon.png | 149.75kb | 140.86kb | 5.93% | | /ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected] | 20.60kb | 19.46kb | 5.54% | | /ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected] | 17.93kb | 17.01kb | 5.14% | | /ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected] | 12.91kb | 12.44kb | 3.62% | | /ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected] | 12.91kb | 12.44kb | 3.62% | | /android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png | 21.17kb | 20.43kb | 3.48% | | /android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png | 32.72kb | 31.64kb | 3.30% | | /android/app/src/main/res/mipmap-xhdpi/launcher_icon.png | 11.85kb | 11.46kb | 3.25% | | /assets/icon-ios.png | 213.44kb | 208.51kb | 2.31% | | /ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected] | 8.29kb | 8.14kb | 1.83% | | /android/app/src/main/res/mipmap-hdpi/launcher_icon.png | 7.87kb | 7.74kb | 1.64% | | /android/app/src/main/res/mipmap-mdpi/launcher_icon.png | 4.49kb | 4.42kb | 1.61% | | /ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected] | 7.34kb | 7.29kb | 0.81% | | | | | | | Total : | 2,228.15kb | 1,955.43kb | 12.24% |


    📝docs | :octocat: repo | 🙋issues | 🏅swag | 🏪marketplace

    opened by imgbot[bot] 0
  • Launching URLs doesn't work

    Launching URLs doesn't work

    Clicking buttons to launch web URLs in the about section doesn't work for some strange reason. Followed the answers in this question but no luck. Ran on a physical Android device (Pixel) and iOS simulator without any success.

    bug help wanted 
    opened by urmilshroff 0
  • The target Icon as svg

    The target Icon as svg

    It would be really nice if the target icon was vector (svg) instead of png. That would allow us to programmatically change some of its properties like its color and tint. then we can visually group different goals by their color, or maybe give each color some kind of priority. That would make the app colorfully awesome 😄!

    opened by ghaith96 1
  • Hero animation is a bit weird

    Hero animation is a bit weird

    Ever since I added the SQLite database, Hero animation of the dartIcon between the GoalsPage and EditGoal pages has become a little weird. It looks normal for goals at the top of the screen in the ListView, but very elastic and exaggerated for goals at the bottom of the screen.

    It isn't goal-specific, it is position specific: if you scroll, different goals will show strange animation behaviour.

    help wanted 
    opened by urmilshroff 0
Releases(v1.4)
Challenge friends on fitness goals

Fitness Challenge Pursuing your fitness goals is fun together with friends. Challenge your friends for daily activities and see who's leading. You can

Gireesh Puthumana 25 Oct 8, 2022
A new flutter package project which contains lots of beautiful alert dialog that will help you lot to create beautiful awesome alert box very quickly and easily.

A new flutter package project which contains lots of beautiful alert dialog that will help you lot to create beautiful awesome alert box very quickly and easily.

Karan Soni 8 Jan 8, 2022
An app to save money and achieve your goal! Available on iOS & Android 🚀

BudgetMe An app that helps you save money and achieve your goal! Screenshots TestFlight & Google Play Beta License About This is an app to save money

Carlton Aikins 31 Nov 27, 2022
Dart Koans. Achieve enlightenment through failure.

Dart Koans This application is inspired by Ruby Koans. The idea is simple: You achieve enlightenment though a process of failures. As each failure is

Matthew Butler 41 Oct 3, 2022
RelativeScale is a simple custom sizing system for flutter widgets to achieve the same physical sizes across different devices.

RelativeScale is a simple custom sizing system for flutter widgets to achieve the same physical sizes across different devices. Usage It is VERY easy

xamantra 19 Nov 25, 2022
SmallTask - Take small steps to achieve big things

SmallTask - Take small steps to achieve big things. Have you ever felt that when you are working on a project you kinda get confused about what to do?

Yuji 2 Mar 7, 2022
Flutter remote control - The main use of LongPressDraggable and DragTarget to achieve the universal remote control interaction effect.

Flutter remote control - The main use of LongPressDraggable and DragTarget to achieve the universal remote control interaction effect.

唯鹿 165 Jan 2, 2023
Achieve ~60 FPS, no matter how heavy the tree is to build/layout

flutter_smooth Achieve ~60 FPS, no matter how heavy the tree is to build/layout. ?? 3-second video output_small.mp4 (left = without smooth, right = sm

fzyzcjy 1k Jan 9, 2023
A package help you to make api call and handle error faster, also you can check for internet before call api.

http_solver ##not for production use, only for learning purpose. A package help you to make api call and handle error faster, also you can check for i

Abdelrahman Saed 1 Jun 18, 2020
This project is a NGO which let you donate anything or even let you ask for help to people.

ngo_app This app is written in flutter using dart language. Getting Started This project is a NGO which let you donate anything or even let you ask fo

null 1 May 8, 2022
Chance Dart is a free Open Source project that lets you create random strings, integers, and other things to help with tiresome tasks, especially when building automated tests or wherever else you require anything random.

Chance Dart Random generator helper for Dart Homepage • Documentation Overview Chance Dart is a free Open Source project that lets you create random s

Ayotomide 55 Dec 27, 2022
A package can help you to change your flutter app's statusbar's color or navigationbar's color programmatically.

flutter_statusbarcolor A package can help you to change your flutter app's statusbar's color or navigationbar's color programmatically. Getting Starte

Zero 201 Nov 10, 2022
A Flutter library aims to help you create animated, simple, and stylish Material Dialogs in your app.

Flutter Material Dialogs Flutter Material Dialogs ?? A Flutter library aims to help you create ????animated, ?? simple, ?? stylish Material Dialogs in

Ezaldeen Sahb 69 Dec 25, 2022
Git+ is your ultimate GitLab mobile app that lets you interact with your projects like as if you were using desktop.

Git+ for GitLab Git+ is your ultimate GitLab mobile app that lets you interact with your projects like as if you were using desktop. Git+ lets you see

Marek Gvora 38 Jan 7, 2023
Provide powerfull tools to help you build your Flutter design system.

Provide powerfull tools to help you build your design system. About flutter_design contains packages to help you bootstrap your design system with a w

Min Zhao 23 Dec 3, 2022
This package will help you to manage the overlays in your projects. Show a dialog, notification, window, or a panel easily

This package will help you to manage the overlays in your projects. Show a dialog, notification, window, or a panel easily. or use one of the helping widgets like AutoComplete, Expander(Dropdown).

Schaban Bochi 25 Dec 4, 2022
It's a Pharmacy application that help you in curing basic symptoms and diseases with medicines available in your home.

Medkit It's a Pharmacy application that help you in curing basic symptoms and diseases with medicines available in your home. How to Run Code Clone or

null 2 Oct 13, 2022
Beautiful Weather App using API with support for dark mode. Created by Jakub Sobański ( API ) and Martin Gogołowicz (UI, API help)

Flutter Weather App using API with darkmode support Flutter 2.8.1 Null Safety Beautiful Weather App using https://github.com/MonsieurZbanowanYY/Weathe

Jakub Sobański 5 Nov 29, 2022
Help developers build the most beautiful search bar🍹.

fsearch Help developers build the most beautiful search bar ?? . [FSearch] provides developers with a one-stop search bar construction service. Suppor

Fliggy Mobile 70 Oct 28, 2022