Invoice Ninja client built with Flutter

Overview

Invoice Ninja

Client app for the Invoice Ninja web app.

  • Google Play Store: v4 | v5
  • Apple App Store: v4 | v5

Dashboard View Invoice List Invoice New Invoice

Setting up the app

  • Initialize the config file

    cp lib/.env.dart.example lib/.env.dart

  • Support running the code unsigned on Android

    cp android/app/build.gradle.dev android/app/build.gradle

  • Run the app

    flutter run

Note: if you don't have an Invoice Ninja backend setup you can test the app with these credentials:

Steps to remove non-FOSS code

cp android/build.gradle.foss android/build.gradle
cp lib/utils/oauth.dart.foss lib/utils/oauth.dart
cp lib/ui/app/upgrade_dialog.dart.foss lib/ui/app/upgrade_dialog.dart
cp android/app/src/main/AndroidManifest.foss.xml android/app/src/main/AndroidManifest.xml
cp pubspec.foss.yaml pubspec.yaml 
rm pubspec.lock

Application Architecture

The application was created using the Flutter Redux Starter.

The architecture is based off these two projects:

Blog Posts

Code generation

  • Run flutter packages pub run build_runner build --delete-conflicting-outputs to regenerate the model files. It will also remove the old generated files so conflicts are avoided..

Tests

  • Run flutter drive --target=test_driver/all_it.dart to run the tests

Code Signing

  • Run cp android/app/build.gradle.prod android/app/build.gradle to support running the code signed
  • Run cp android/key.properties.example android/key.properties to create the keys file
  • Run keytool -genkey -v -keystore key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias invoiceninja to generate a key to be able to sign the android application.
  • Update android/key.properties according to the parameters you entered in previous command when you generated the key
  • Open a new Firebase project from your console. Firebase is used for authentication.
    • Inside the project go to Authentication and enable at least one method.
    • After go to add a new Android application. For the package name add com.invoiceninja.flutter
    • Press "Register App" button.
    • Download "google-services.json" and put it in android/app directory.

Credits

https://github.com/invoiceninja/invoiceninja#credits

Contributions

We gladly accept contributions! If you'd like to get involved with development please join our Slack group.

Comments
  • Slow typing in v5

    Slow typing in v5

    INFO

    What version of Invoice Ninja are you running? ie v4.5.25 / v5.0.30 5.1.31

    What environment are you running? Docker

    Have you checked log files (storage/logs/) Please provide redacted output not applicable

    Have you searched existing issues? yes

    Have you reported this to Slack/forum before posting? no

    Describe the bug see below

    Steps To Reproduce use any text editor

    Expected behavior normal typing

    DESCRIPTION

    I've tried v5 with these setups (extensions disabled):

    • windows + edge
    • windows + firefox
    • linux + firefox
    • linux + chrome

    In all cases typing is very slow - there's a short (roughly 1 second) delay before a character is shown in the ui. I can type a whole line of text, then wait a few moments while the string is printed in the UI. It's not instantaneous.

    It's as if the javascript running on the page is VERY aggressive and filtering every keypress.

    Has anyone else experienced this?

    bug 
    opened by grokky1 44
  • App does not refresh data until re-login

    App does not refresh data until re-login

    What version of Invoice Ninja are you running? ie v4.5.25 / v5.0.30

    What environment are you running? ZIP

    Have you checked log files (F12 console) Please provide redacted output

    unreachable code after return statement
    main.foss.dart.js:3:42
    Error while trying to load font family "packages/material_design_icons_flutter/Material Design Icons":
    SyntaxError: An invalid or illegal string was specified main.foss.dart.js:63781:47
    unreachable code after return statement
    main.foss.dart.js:3:47
    unreachable code after return statement
    main.foss.dart.js:3:47
    ## Refresh data - include static: false js_primitives.dart:47
    POST: https://>REDACTED>/api/v1/refresh?current_company=true&updated_at=1620233449&first_load=true js_primitives.dart:47
    unreachable code after return statement
    main.foss.dart.js:3:46
    unreachable code after return statement
    main.foss.dart.js:3:43
    unreachable code after return statement
    main.foss.dart.js:3:46
    unreachable code after return statement
    main.foss.dart.js:3:43
    unreachable code after return statement
    main.foss.dart.js:3:52
    unreachable code after return statement
    main.foss.dart.js:3:52
    unreachable code after return statement
    main.foss.dart.js:3:42
    unreachable code after return statement
    main.foss.dart.js:3:42
    unreachable code after return statement
    main.foss.dart.js:3:47
    unreachable code after return statement
    main.foss.dart.js:3:46
    unreachable code after return statement
    main.foss.dart.js:3:46
    
    ## Refresh data - include static: false js_primitives.dart:47
    POST: https://<REDACTED>/api/v1/refresh?current_company=true&updated_at=1620233449&first_load=true js_primitives.dart:47
    

    Have you searched existing issues? https://github.com/invoiceninja/invoiceninja/issues/5490#issuecomment-830164527

    Describe the bug All those fancy refresh button in the app appear to do nothing. Invoices that would actually be SENT are still shown as DRAFT and so on… Once you logout and in, everything is back in sync.

    Steps To Reproduce

    1. Login on machine A with user U
    2. Draft invoice
    3. Login in machine B with user V
    4. Send invoice from machine B
    5. Click refresh on machine A
    6. Invoice is still a DRAFT
    7. Logout user U from machine A
    8. Login on machine A with user U

    Expected behavior Data is up-to-date and synced everywhere

    (v5) Can you replicate the issue on our demo site? Impossible due to lack of credentials for user creation

    question 
    opened by itkfm 29
  • not adding products when clicking on the product

    not adding products when clicking on the product

    **What version of Invoice Ninja are you running? v5.2.6-C51

    What environment are you running? Dedicated Hosting

    Have you checked log files (storage/logs/) Please provide redacted output no output in logs

    Have you searched existing issues? yes

    Have you reported this to Slack/forum before posting? no

    Describe the bug When typing for a product, the product list appears but can't add the product info by clicking on the product, All options are enabled in product settings, when typing in prodict id field for adding a product to the invoice, you see the options but not able to add them, fullin option is enabled, tested in chrome and edge

    Steps To Reproduce Please list the steps to reproduce the issue default installation,

    Expected behavior the product info is added to the invoice

    Screenshots

    image

    Additional context i have installed 3 in the past, and upgraded them to newest version, old and new version are 5.XXX i have installed a new one from scratch as discribe on the install page and this issue popped up, reinstalled the application, no luck, i installed a 2th new install for a new client and the same issue is there, checked all the fields and settings as my own working version, all are the same

    Note: Before posting don't forget to check our "Troubleshooting" category in the docs (https://invoiceninja.github.io/docs/self-host-troubleshooting/).

    (v5) Can you replicate the issue on our demo site? https://demo.invoiceninja.com

    No, this issue is not active when you do an upgrade from a older version, this is the case for new installations

    opened by ReaperOfTheSoul 24
  • Editing Time Tracking details behaves unpredictable

    Editing Time Tracking details behaves unpredictable

    What version of Invoice Ninja are you running? ie v4.5.25 / v5.0.30 v5.1.65-C48

    What environment are you running? Docker

    Have you checked log files (storage/logs/) Please provide redacted output No

    Have you searched existing issues? Yes

    Have you reported this to Slack/forum before posting? No

    Describe the bug When editing or adding Time Tracking Entries, sometimes it is overwriting and or deleting previous Entries, which is critical if we use Invoice Ninja as primary Time Tracking System for Billing.

    When I am affected the whole Time Tracking Screen is behaving weird.

    As i am unable to write steps to reproduce or to describe the Issue, I will take a short Video and Post it in the Comments as soon as I can reproduce the Issue again.

    Steps To Reproduce Unable to provide "Steps To Reproduce", see Video in Comments.

    Expected behavior Time Tracking should only delete/edit the Entries I directly interact with.

    Screenshots Unable to provide "Screenshots", see Video in Comments.

    (v5) Can you replicate the issue on our demo site? https://demo.invoiceninja.com Did invest some minutes and tried to reproduce on my instance and on the demo, but i am unable for now on both.

    bug 
    opened by Akjo4712 24
  • F-Droid build failed

    F-Droid build failed

    /home/vagrant/.pub-cache/hosted/pub.dartlang.org/flutter_styled_toast-2.1.3/lib/src/styled_toast.dart:497:63: Error: Property 'window' cannot be accessed on 'WidgetsBinding?' because it is potentially null.
     - 'WidgetsBinding' is from 'package:flutter/src/widgets/binding.dart' ('../srclib/flutter/packages/flutter/lib/src/widgets/binding.dart').
    Try accessing using ?. instead.
          data: MediaQueryData.fromWindow(WidgetsBinding.instance.window),
                                                                  ^^^^^^
    /home/vagrant/.pub-cache/hosted/pub.dartlang.org/flutter_styled_toast-2.1.3/lib/src/styled_toast.dart:681:29: Error: Method 'addObserver' cannot be called on 'WidgetsBinding?' because it is potentially null.
     - 'WidgetsBinding' is from 'package:flutter/src/widgets/binding.dart' ('../srclib/flutter/packages/flutter/lib/src/widgets/binding.dart').
    Try calling using ?. instead.
        WidgetsBinding.instance.addObserver(this);
                                ^^^^^^^^^^^
    /home/vagrant/.pub-cache/hosted/pub.dartlang.org/flutter_styled_toast-2.1.3/lib/src/styled_toast.dart:1559:29: Error: Method 'removeObserver' cannot be called on 'WidgetsBinding?' because it is potentially null.
     - 'WidgetsBinding' is from 'package:flutter/src/widgets/binding.dart' ('../srclib/flutter/packages/flutter/lib/src/widgets/binding.dart').
    Try calling using ?. instead.
        WidgetsBinding.instance.removeObserver(this);
                                ^^^^^^^^^^^^^^
    FAILURE: Build failed with an exception.
    * Where:
    Script '/builds/linsui/fdroiddata/build/srclib/flutter/packages/flutter_tools/gradle/flutter.gradle' line: 1102
    * What went wrong:
    Execution failed for task ':app:compileFlutterBuildRelease'.
    > Process 'command '/builds/linsui/fdroiddata/build/srclib/flutter/bin/flutter'' finished with non-zero exit value 1
    

    Could you please take a look? Thanks!

    opened by linsui 20
  • Multi-currency Transaction not visible properly in reports

    Multi-currency Transaction not visible properly in reports

    What version of Invoice Ninja are you running? ie v4.5.25 / v5.0.30 Self hosted - v5.3.33-C67 Online (invoicing.co) - v5.3.33-C67

    What environment are you running? Ubuntu 20.4 for self hosted

    Have you checked log files (storage/logs/) Please provide redacted output No

    Have you searched existing issues? Yes, Could not find anything similar.

    Have you reported this to Slack/forum before posting? i have reported it using contact us (today only after trying on invoicing.co)

    Describe the bug A clear and concise description of what the bug is.

    Steps To Reproduce Create Client in Foreign currency. (INR 2500) Receive Payment in foreign currency. Apply conversion to local currency in payment. (GBP 25) Check the reports for payments / profit or loss -- amount shows as £2500.

    Expected behavior Expect amount it to shows in appropriate currency. considering transaction is in INR, either we should show it in iNR everywhere or local currency.

    Screenshots If applicable, add screenshots to help explain your problem. Screenshot 2021-12-03 at 13 33 26 Screenshot 2021-12-03 at 13 34 45 Screenshot 2021-12-03 at 13 35 28

    Additional context Add any other context about the problem here.

    (v5) Can you replicate the issue on our demo site? https://demo.invoiceninja.com

    opened by HarshadkCon 14
  • Recurring invoices are sorted wrong

    Recurring invoices are sorted wrong

    What version of Invoice Ninja are you running? ie v4.5.25 / v5.0.30 v5.3.23

    What environment are you running? ZIP

    Have you checked log files (storage/logs/) Please provide redacted output NA

    Have you searched existing issues? Yes

    Have you reported this to Slack/forum before posting? No

    Describe the bug When you go to the page where all invoices are listed and sort by number, the recurring invoices are always at the end of the list. Example: You have 5 invoices, invoice number 4 is a recurring invoice. When you sort by number counting down, the output will be 5, 3, 2, 1, 4

    IMPORTANT: It only happens when you also have a recurring prefix!

    Steps To Reproduce

    • Set a recurring prefix
    • Have multiple existing invoices with 1 or more recurring invoice in the middle

    Expected behavior NA

    Screenshots 1 1

    Additional context Add any other context about the problem here.

    (v5) Can you replicate the issue on our demo site? https://demo.invoiceninja.com Absolutely

    opened by stefaandevylder 14
  • Partially incorrect translation for

    Partially incorrect translation for "cancel"

    Hi there, currently IncoiceNinja makes a bit of a mess with the translation of "cancel" - now it's translated to "Stornieren" only. But instead we need to differentiate: between Invoice cancelation and between progress cancelation. Therefore the default translation should be "Abbrechen" and in only the following places a separate translation is needed (presumably also in other languages than german):

    • Screenshot_20220304-143539.png("Stornieren")

    Thanks for your great software, Lars

    bug 
    opened by LarsK1 13
  • iOS APP: Always prompts for Add new company

    iOS APP: Always prompts for Add new company

    What version of Invoice Ninja are you running? ie v4.5.25 / v5.0.30

    v5.3.27-C62 / Latest available iOS app from the appstore (iOS 15)

    What environment are you running? Docker

    Problem: Everytime I open the app on iOS it prompts for new company details. When i fully close the app from the app switcher and open it again, it prompts me again.

    To be clear: there are already 3 companies set up ...

    image

    bug 
    opened by alexanderhofstaetter 13
  • building error, master branch

    building error, master branch

    hi,

    when run in android studio show this error.

    event sent after app closed: {id: 0, progressId: null, message: Running "flutter pub get" in flutter-client-master...} event sent after app closed: {id: 0, progressId: null, finished: true} Launching lib\main.dart on SM G9650 in debug mode... Running Gradle task 'assembleDebug'... Note: C:\development\flutter.pub-cache\hosted\pub.dartlang.org\in_app_purchase-0.3.4+4\android\src\main\java\io\flutter\plugins\inapppurchase\MethodCallHandlerImpl.java uses unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details. Note: C:\development\flutter.pub-cache\hosted\pub.dartlang.org\url_launcher-5.5.0\android\src\main\java\io\flutter\plugins\urllauncher\WebViewActivity.java uses or overrides a deprecated API. Note: Recompile with -Xlint:deprecation for details. Note: Some input files use or override a deprecated API. Note: Recompile with -Xlint:deprecation for details. Note: C:\development\flutter.pub-cache\hosted\pub.dartlang.org\webview_flutter-0.3.22+1\android\src\main\java\io\flutter\plugins\webviewflutter\FlutterWebView.java uses unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details.

    opened by jesulo 13
  • building error

    building error

    Hello good day, I have this error in master branch.

    Compiler message: lib/ui/app/app_bottom_bar.dart:244:25: Error: No named parameter with the name 'toggleable'. toggleable: true, ^^^^^^^^^^ /C:/development/flutter/packages/flutter/lib/src/material/radio_list_tile.dart:307:9: Context: Found this candidate, but the arguments don't match. const RadioListTile({ ^^^^^^^^^^^^^

    Compiler message: lib/ui/app/app_bottom_bar.dart:244:25: Error: No named parameter with the name 'toggleable'. toggleable: true, ^^^^^^^^^^ /C:/development/flutter/packages/flutter/lib/src/material/radio_list_tile.dart:307:9: Context: Found this candidate, but the arguments don't match. const RadioListTile({ ^^^^^^^^^^^^^ Target kernel_snapshot failed: Exception: Errors during snapshot creation: null build failed.

    FAILURE: Build failed with an exception.

    • Where: Script 'C:\development\flutter\packages\flutter_tools\gradle\flutter.gradle' line: 882

    • What went wrong: Execution failed for task ':app:compileFlutterBuildDebug'.

    Process 'command 'C:\development\flutter\bin\flutter.bat'' finished with non-zero exit value 1

    • Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

    • Get more help at https://help.gradle.org

    BUILD FAILED in 1m 49s Exception: Gradle task assembleDebug failed with exit code 1

    opened by jesulo 13
  • Link to Client Portal on Sign-In Page / custom error message / redirect to client portal

    Link to Client Portal on Sign-In Page / custom error message / redirect to client portal

    https://github.com/invoiceninja/invoiceninja/issues/8024

    According to this issue, i want to address this feature request within the admin-portal also:

    • A Button/Link on Admin Login Page to Client Portal
    • Custom error Message OR redirect, when user of client portal tries to sign in into admin-portal

    These changes may be possible to implement without any backend-changes.

    enhancement 
    opened by paulwer 0
  • Restoring Invoice fails despite success popup

    Restoring Invoice fails despite success popup

    I tried multiple times, every time it pops up with success but nothing changes. Reloading Data or logging back in changed nothing either: image

    Using latest 5.5

    Kind of the opposite of https://github.com/invoiceninja/admin-portal/issues/519

    triage 
    opened by xeruf 1
  • Batch-select checkboxes with shift

    Batch-select checkboxes with shift

    Currently in batch mode I have to select each checkbox one by one. When I hold shift, it should automatically select (or invert the selection of) every checkbox between the last clicked and current checkbox.

    enhancement 
    opened by xeruf 0
  • Dashboard add extra view tabs on quote

    Dashboard add extra view tabs on quote

    Hello everyone,

    I would like to see a few extra tabs on the dashboard for the quote section. Now there are 3 tabs: active, approved and unapproved. My suggestion would be to add invoiced and invoice paid to keep track on what quotes are converted to an invoice. The same layout as expense, for example.

    With kind regards, Jelle van Kraaij

    Current configuration qoutes: image Current configuration expenses (for reference) image

    enhancement 
    opened by JellevanKraaij 0
  • Better display files for a client

    Better display files for a client

    Hey everyone, I am using the feature to save files for my customers. The administration in the admin-portal, because of the display in blocks and not as a list is sometimes hard, to keep track of all files. Is there an oportunity to display it as a list or to move this section down, to have more space to view?

    enhancement 
    opened by paulwer 2
  • Contrast not sufficient for default color palette

    Contrast not sufficient for default color palette

    I selected this yellow from the default color palette as color for a task state while using the dark theme of the app, and it obvioulsy does not work well.

    image

    usability 
    opened by xeruf 0
Releases(v5.0.104)
Owner
Invoice Ninja
An open-code invoicing app built with Laravel and Flutter
Invoice Ninja
This is a mobile app created using Flutter, corona.lmao.ninja (Real Time News about Covid 19).

Covid 19 News This is a mobile app created using Flutter, corona.lmao.ninja (Real Time News about Covid 19). There are some test files that needed to

Achintha Isuru 10 Jan 28, 2022
Lime client built using flutter

** This project ist OUT OF DATE and I am currently not able to maintain it ** What we are building Lime is a social media app, which allows you to pos

Sebastian Sellmair 376 Dec 24, 2022
An Android Client for ZeroNet Built With Flutter

ZeroNet Mobile ZeroNet Mobile is an Android Client for ZeroNet, a platform for decentralized websites using Bitcoin crypto and the BitTorrent network.

null 0 Nov 10, 2021
A Mastodon client built in Flutter

feathr A Mastodon client built in Flutter (in development). Contributing Pull requests are welcome. For major changes, please open an issue first to d

feathr.space 8 Nov 25, 2022
Simplistic mobile RSS client built with Flutter

Fluent Reader Lite A simplistic mobile RSS client Download iOS Download from App Store ($1.99. This will support development and help cover the $99 an

Haoyuan Liu 656 Dec 30, 2022
A simple, modern AppImageHub Client, powered by flutter.

AppImagePool Simple AppImageHub Client Main Features FLOSS and non profit app Simple categories Download from github directly, no extra-server involve

Prateek SU 490 Jan 1, 2023
Venni client app - A flutter ride-sharing end-user app supporting map location picking

Venni client app - A flutter ride-sharing end-user app supporting map location picking, driver location tracking, in-app credit card payments, trip rating system, and trip history.

Abrantes 1 Jan 3, 2022
Cross-platform GitHub client in Flutter and BLoC clean architecture

FlutterHub Cross-platform GitHub client in Flutter and BLoC clean architecture. SwiftHub - Swift version is available Try Web version Get Started To g

Khoren Markosyan 36 Nov 12, 2022
Flutter Satellite.im Minimal Secure Chat Client

Uplink Flutter Satellite.im Minimal Secure Chat Client Getting Started ?? To run this project either use the launch configuration in VSCode or use the

Satellite 27 Dec 21, 2022
A Flutter Twitch client for iOS and Android with BTTV, FFZ, and 7TV support

Frosty for Twitch A Twitch client for iOS and Android with BTTV, FFZ, and 7TV support. Built with Flutter. Features Browse followed streams, top strea

Tommy Chow 276 Jan 5, 2023
A fully cross-platform wrap of the Matomo tracking client for Flutter, using the Matomo API.

A fully cross-platform wrap of the Matomo tracking client for Flutter, using the Matomo Tracking API.

Floating Dartists 12 Jan 8, 2023
A simple and easy to use Redis client for Dart

redis_dart A simple and minimalist Redis client for Dart See it in pub: https://pub.dev/packages/redis_dart and GitHub: https://github.com/gabrielpach

Gabriel Pacheco 7 Dec 25, 2022
ThingsBoard PE API client library for Dart developers.

ThingsBoard PE API client library for Dart developers. It's compatible with TB PE 3.3.0. Usage A simple usage example: import 'package:thingsboard_pe_

ThingsBoard - Open-source IoT Platform 45 Sep 28, 2022
An architecture for dynamic UI without client deployment

Server Driven UI Demo Server Driven UI(SDUI)는 서버에서 클라이언트의 UI 컴포넌트를 관리하는 방식. 클라이언트 배포없이 API 응답을 변경하는 것만으로 UI 변경이 가능한 동시에 하위 호환성을 확보할 수 있다. Rust, GraphQ

Simon Park 15 Oct 17, 2022
Wallet Connect client in Dart.

Wallet Connect Wallet Connect client in dart highly inspired from wallet-connect-kotlin by Trust Wallet. Usage import 'package:wallet_connect/wall

null 101 Dec 29, 2022
Dalal Street Client 2022

Flutter Client for Dalal Street Prerequisites Flutter >2.12 Download Link Protocol Buffer Compiler Download Link Check Prerequisites Run if you have i

Delta Force 15 Dec 22, 2022
Notion API client for dart

Notion API client for dart. See the ROADMAP file to see what is coming next. API implemented Usage NotionClient class Individual classes A few example

Jonathan Gómez 22 Oct 9, 2022
Figma API client written in pure Dart

figma A library for interacting with Figma APIs. Created from templates made available by Stagehand under a BSD-style license. Usage A simple usage ex

Arne Molland 14 Oct 19, 2022