Use Case : Flutter + ORDS + Oracle APEX = iOS and Android Native Apps

CLIENT REQUIREMENTS

  • We have our existing system in Oracle Database and we are using Oracle APEX for our existing applications.
  • We want to build Native Mobile Application (iOS & Android) to build some part of the functionality of Oracle APEX web-application.
  • We want to integrate native Barcode Scanning functionality such that device camera utilize its best capabilities.
  • We want our existing users to access the application, although some features can also be able to accessible without user login.
  • We need some more features like searchable product inventory, offline access, multi-lingual etc.

APEXPERT APPORACH

  • Oracle APEX & ORDS
    • We suggested to use Oracle APEX and Oracle REST Data Services to expose the data via RESTful APIs.
  • OAUTH2
    • We suggested to implement OAuth2 for RESTful web service to securely exchange the data.
  • Flutter
    • We suggested to use Flutter Platform (Made by Google) for Mobile app development.
    • Flutter can generate iOS & Android build with single code base.
    • Flutter provides native compilation with beautiful UI and good performance.

DEVELOPMENT TIME

  1. POC (Proof of Concept) for Barcode Scanning


    STARTED: 22/10/2020
    Before we really jump into anything else, we first build a small application for Barcode Scanning feature. Barcode scanning was the main capabilities we want to make it work without any compromise. Customer tested the POC app and satisfied with the result
    COMPLETED: 24/10/2020

  2. Version 1


    STARTED: 27/10/2020
    Customer gave us green flag to begin with actual development after reviewing the POC app. We first analyzed the web application to identify design, font, icons, color combinations to draft a native mobile app design. Next, prepared project architecture, coding design pattern (MVVM), followed SOLID coding principles to build base structure for entire project. To allow a user to login using valid credentials, we designed & developed a login interface that uses REST API to securely pass the credentials to the server for authorization. Another screen that allows user to scan a barcode and view details of particular product. We developed a list of products screen that shows brief information of each product. We developed a detail screen of particular product to view the detailed information about the product.
    COMPLETED: 11/11/2020

  3. Version 2


    STARTED – 12/11/2020
    We finished Inventory management and also application supports multiple languages to view products, (e.g. English, Finnish, Norwegian, Swedish). User can manage inventory after login. User can add or update inventory amount.
    COMPLETED – 27/11/2020

  4. Version 3


    STARTED – 28/11/2020
    We have provided support to view or search any product when user is not connected to internet. User can perform all the operations during offline, even user can scan the barcode and can search for particular product.
    COMPLETED – 10/12/2020

  5. App Release and Deployment


    In order to make the application available on Apple App Store and Android Play Store, we start the process with beta testing. For Apple (iOS, iPadOS), we used Apple’s TestFlight practice to distribute beta application to testers. For Android, we used Google’s dedicated Internal App Sharing practice to share the application among group of testers. Once customer gives satisfactory response of application testing we started application release with review team. Within a week, we got applications approved and make it live.


APP DOWNLOAD LINKS

2 thoughts on “Use Case : Flutter + ORDS + Oracle APEX = iOS and Android Native Apps

  1. Vincent Reply

    Nice work, we may have a similar requirement, and may I know how did you implement the authentication between Flutter App and APEX user account?

    • jbosamiya Reply

      Thank you Vincent.

      For this specific project – we have used Custom authentication apporach (storing user credentials in DB table).

Leave a Reply

Your email address will not be published. Required fields are marked *