A new Flutter application by Open Food Facts

Overview

Open Food Facts - Codename: "Smooth App"

A new Flutter application by Open Food Facts. You can install it on Android or iPhone/iPad. Note that a internal development build if you'd like to use the results of your PRs quicker.

Smoothie. We pioneered the collaborative scanning app in 2012. With this experimental app, we’re reinventing it from the ground up, and this time, it’s personal.

You get:

  • a scan that truly matches who you are (Green: the product matches your criteria, Red: there is a problem, Gray: Help us answer you by photographing the products)
  • a product page that's knowledgeable, building on the vast amount of food facts we collect collaboratively, and other sources of knowledge, to help you make better food decisions

You can:

  • scan and compare in 15 seconds the 3 brands of tomato sauces left on the shelf, on your terms.
  • get a tailored comparison of any food category
  • set your preferences without ruining your privacy

Criteria you can pick:

  • Environment: Eco-Score
  • Health: Additives & Ultra processed foods, Salt, Allergens, Nutri-Score

Presentation

This new mobile application aims to showcase Open Food Facts's power to a broad range of users through a smooth user experience and sleek user interface.

Smooth-app is developed in parallel to the openfoodfacts-dart plugin, which provides a high level interface with the Open Food Facts API. Every new interaction with the API should be implemented in the plugin in order to provide these new features to other developers.

Contributing - What can I work on ?

Are you a developer? A graphic designer? Full of innovative ideas to help users improve their mode of consumption? Then join us! We are always looking for new contributors, if you're willing to help please let us know, we'll be pleased to introduce you to the project.

Wiki & Doc

V1 Roadmap

  • Revamped and knowledgeable product page (Jasmeet)
  • Minimal editing/addition value proposition, including by deep linking to the classic Android/iOS apps. (up for grabs)
  • Automation of marketing texts (mostly done)

V2 - Later Roadmap

Screenshot automation (High priority)

Navigation

Debt removal

Personalized results

Gamification

  • User management + Small point system for contributions

Product page

Scanning

Building

In order to build the application, make sure you are in the packages/smooth_app directory and run these commands :

  • flutter pub get
  • flutter run

Android & iOS

  • Nothing to report

Internationalization

Crowdin Action

Thank you

Smooth_app is made possible thanks to a grant by the Mozilla Foundation, after pitching them the idea at FOSDEM. a HUGE thank you :-)

Comments
  • fix: #3018 - new management of

    fix: #3018 - new management of "local changes" vs. "background tasks"

    Impacted files:

    • abstract_background_task.dart: added common method showSnackBar; refactored
    • add_basic_details.dart: new way to add a task
    • add_new_product_page.dart: refactored
    • background_task_details.dart: added changes locally when adding the task; now the "execute" looks for all pending changes; refactored
    • background_task_image.dart: refactored
    • edit_ingredients_page.dart: new way to add a task; new way to have a product changed
    • edit_product_page.dart: new way to have a product changed
    • image_upload_card.dart: simplified
    • knowledge_panel_page.dart: new way to have a product changed
    • local_database.dart: added an UpToDateProductProvider field
    • main.dart: removed the call to deprecated provider
    • new_product_page.dart: new way to have a product changed
    • nutrition_page_loaded.dart: new way to add a task; new way to have a product changed
    • personalized_ranking_model.dart: new way to check if products evolved
    • personalized_ranking_page.dart: new way to check if products evolved
    • product_image_carousel.dart: simplified ImageUploadCard
    • product_image_gallery_view.dart: new way to have a product changed; refactored
    • product_list_item_simple.dart: new way to have a product changed
    • product_list_page.dart: removed the call to deprecated provider
    • product_model.dart: refactored the "set refresh" method
    • product_refresher.dart: method fetchAndRefresh now returns a Product?; added a standard snackbar display
    • question_page.dart: simplified ImageUploadCard
    • simple_input_page.dart: new way to add a task
    • summary_card.dart: new way to have a product changed
    • up_to_date_product_provider.dart: heavily refactored

    What

    • The management of "instant local changes" and "pending background tasks" has been rethought.
    • That would probably deserve some explanations.I'd be glad to write something, probably in the code, probably in UpToDatProductProvider- feel free to ask anything.
    • Possible issues:
      • I focused on "background task details", as I'm not very familiar with image upload: tests are definitely needed there.
      • For the moment I lazily stored the "instant local changes" in dart Maps - I'll switch to persistent storage like hive or sqflite after this PR is merged (let me time to breathe first!)
      • For the moment the task key system won't work when we have several tasks pending on the same subject (e.g. categories), and that needs to be fixed (or double-checked)
    • Cool (?) future features:
      • Now we're able to know on a product page if it has pending changes. I had the idea to display that state (in a clumsy way), as a feedback to the user ("not uploaded yet!"), for the moment on the "edit product page" (cf. screenshots)
      • If this idea is deemed "cool", we have to decide on which page to display that state, and how.

    Screenshot

    I've just left the shop page that I edited

    • I can see a (*) before the name of the product (= "not all changes are uploaded yet")
    • there's a snackbar

    Capture d’écran 2022-09-22 à 17 32 53

    The snackbar had time to disappear, and my changes are still not uploaded

    • I can still see a (*) before the name of the product (= "not all changes are uploaded yet")

    Capture d’écran 2022-09-22 à 17 41 01

    Now the upload (then a download/refresh) is over: no more (*): Capture d’écran 2022-09-22 à 17 36 24

    Fixes bug(s)

    • Fixes: #3018

    Part of

    • #2968
    • #2439
    PR: needs rebase 
    opened by monsieurtanuki 45
  • We have a BIG scan issue

    We have a BIG scan issue

    What

    We have a big scan issue. We discussed it at length with @g123k the other day. I'm pinning this until we solve it, and people are happy again.

    People are complaining on all channels (email, appstore, app survey)

    I believe we didn't ship some of the fixes in the last release, so native bug is still on-going, and people are still complaining: https://github.com/openfoodfacts/smooth-app/pull/2740/files#diff-5898cc81afbf2560f009273208f7247c03d829eabc864ab252c5ef475a713f5eR151

    Complaints are focused on Redmi, Oppo, Oneplus

    Here's raw user feedback if you'd like to peruse, Scan issues are classified as such: https://docs.google.com/spreadsheets/d/1KsJv8_RxfDDd5ngmeQ4k8ELsudl-YhleXEoDFoGoSAE/edit#gid=1439550856

    Linked issues

    • https://github.com/openfoodfacts/smooth-app/issues/2742 We pinpointed this with @g123k. It's probably not the whole story, but might be contributing to it

    • We might want to explore an isolate as well since people have been complaining about the app freezing

    • #2381 We might want to explore the new camerax plugin to benefit from whatever little compat gains they did. There's a new plugin in town that might be worth exploring

    • #2746 A product added, then removed, can not be scanned anymore.

    P0 scan 
    opened by teolemon 39
  • Question: when is the list of products in

    Question: when is the list of products in "Scan and compare products" reinitialized?

    I cannot find a way to clear the list of products in my "Scan and compare products" list, or to remove items from it. Is it possible somewhere?

    Maybe we could:

    1. add a way to start a new comparison (a "Clear list" button on the left of the "My personal ranking" button in the scanning page?)

    2. in the "My personal ranking" list, be able to swipe to remove entries?

    What do you think?

    UI / UX 
    opened by stephanegigandet 35
  • feat: image list gallery

    feat: image list gallery

    In V1 (at least for android) we had a "Image gallery" page which would display the list of every image related to the product.

    Here we have the carousel that gets activated whenever you click on the images (or click on edit images in the edit view) but it's not really a listing of every image related to the product.

    That's why, as suggested by @teolemon, with this PR I'm implementing a product image gallery view as a list of clickable items. When a tile is clicked the corresponding image is opened (if existing) to be viewed/edited, or taken.

    Below a video representing the flow:

    https://user-images.githubusercontent.com/12072630/182968832-e76a0185-8471-40a6-8aeb-621d09ed00f8.mp4

    Updated screenshot

    enhancement photo manager 
    opened by VaiTon 33
  • Background + offline incoherences on multiple offline edits

    Background + offline incoherences on multiple offline edits

    What

    Assuming that I use the app offline and that I change a product 5 times in a row (changes A, B, C, D and E), there are 5 background processes pending, all on the same product.

    When I go online, I may have problems.

    • Problem 1: if each process is executed atomically in a queue, after I run processes about A and B, I'll get the server product with changes A and B, but not yet C, D and E. The product is less complete than when I was offline with all my changes.
      • Solution 1: merge all changes about the same product into a single background process before executing it.
    • Problem 2: if I try to refresh the product before the background processes are executed, I'll get a fresh product from the server but without my local changes.
      • Solution 2: we should not be able to refresh a product when there are pending background processes. In addition to that, we could add an icon "local changes pending" and an error message "cannot refresh product while there are local changes pending".
    • Problem 3, related to problem 1 (spoiler alert: bad luck problem): if while the merged background processes are executed I change the product (change "F"), after the execution I get a fresh server product with all my initial changes (A-E), but change F will be ignored, until background process about F is executed.
      • Solution 3: each time we get product data from the server, we have to apply the pending changes before storing it locally.

    The more I think about it, the more I believe that solution 3 would solve everything (we wouldn't need solutions 1 and 2).

    @AshAman999 Do you share my views?

    bug offline refactoring offline contribution 
    opened by monsieurtanuki 30
  • Various issues with the iOS build

    Various issues with the iOS build

    Dear Developer,

    We identified one or more issues with a recent delivery for your app, "Open Food Facts +" 5.5.5 (16). Please correct the following issues, then upload again.

    ITMS-90683: Missing Purpose String in Info.plist - Your app's code references one or more APIs that access sensitive user data. The app's Info.plist file should contain a NSPhotoLibraryUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. Starting Spring 2019, all apps submitted to the App Store that access user data are required to include a purpose string. If you're using external libraries or SDKs, they may reference APIs that require a purpose string. While your app might not use these APIs, a purpose string is still required. You can contact the developer of the library or SDK and request they release a version of their code that doesn't contain the APIs. Learn more (https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy).

    ITMS-90683: Missing Purpose String in Info.plist - Your app's code references one or more APIs that access sensitive user data. The app's Info.plist file should contain a NSCameraUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. Starting Spring 2019, all apps submitted to the App Store that access user data are required to include a purpose string. If you're using external libraries or SDKs, they may reference APIs that require a purpose string. While your app might not use these APIs, a purpose string is still required. You can contact the developer of the library or SDK and request they release a version of their code that doesn't contain the APIs. Learn more (https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy).

    ITMS-90809: Deprecated API Usage - New apps that use UIWebView are no longer accepted. Instead, use WKWebView for improved security and reliability. Learn more (https://developer.apple.com/documentation/uikit/uiwebview).

    Though you are not required to fix the following issues, we wanted to make you aware of them:

    ITMS-90078: Missing Push Notification Entitlement - Your app appears to register with the Apple Push Notification service, but the app signature's entitlements do not include the 'aps-environment' entitlement. If your app uses the Apple Push Notification service, make sure your App ID is enabled for Push Notification in the Provisioning Portal, and resubmit after signing your app with a Distribution provisioning profile that includes the 'aps-environment' entitlement. Xcode does not automatically copy the aps-environment entitlement from provisioning profiles at build time. This behavior is intentional. To use this entitlement, either enable Push Notifications in the project editor's Capabilities pane, or manually add the entitlement to your entitlements file. For more information, see https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/HandlingRemoteNotifications.html#//apple_ref/doc/uid/TP40008194-CH6-SW1.

    Best regards,

    The App Store Team

    fastlane 
    opened by teolemon 30
  • Packaging and ingredient photo upload does not work on existing products

    Packaging and ingredient photo upload does not work on existing products

    What

    • Packaging and ingredient photo upload does not work on existing products

    Steps to reproduce the behavior

    1. Go to an existing product
    2. Click on Add packaging photo or Add Ingredient photo if missing
    3. Crop/Validate…
    4. See that no photo placeholder appears or is uploaded
    bug image upload P0 
    opened by teolemon 28
  • feat: 3129 Allow to swipe between product images on the full screen image view

    feat: 3129 Allow to swipe between product images on the full screen image view

    What

    • Would be nice to be able to swipe to next/previous product image, on full screen page.

    Screenshot/Mockup after :

    https://user-images.githubusercontent.com/71365710/201989164-8a1053fc-01da-4134-9a86-54c8813111c7.mp4

    Part of

    • #766
    product page photo manager 
    opened by omkarChend1kar 28
  • fix: Layout issue with product title card

    fix: Layout issue with product title card

    Fixed UI: Screenshot_1657174966

    My PR not only consists of fixing the layout issue mentioned in #2488, but also:

    • Splits the three items of the title Card into three different Widgets (a bad behavior that we should fix in the app)
    • Adds some missing attributes to the SelectableText Widget
    merge conflicts UI / UX layout before next release 
    opened by g123k 27
  • refactor: ProductImageData to contain all image links

    refactor: ProductImageData to contain all image links

    What

    Improve product image quality for some pages. For example, when full screen image viewer is open (please see issue description).

    My idea was to refactor ProductImageData to contain a Map of all product images for every image size, so you can get specific image quality you want, when you need it.

    I'm submitting this as draft for now, since I'm not completely sure if that is the best approach. Open to ideas. Maybe better backend support would be needed.

    Screenshot

    Uploading image.png…

    Fixes bug(s)

    • Fixes: #2960
    P0 
    opened by WildOrangutan 26
  • Simplify adding photos by removing 2 of the 4 steps

    Simplify adding photos by removing 2 of the 4 steps

    Current behaviour:

    1. Screen to take a photo
    2. OK / Retry dialog (not sure if that's the app or the camera, hopefully we can disable it in any case..)
    3. Crop interface
    4. Retry / Edit / Confirm dialog

    Suggestion:

    Merge 2. 3. and 4. into a single Crop interface (same as today's + a Retry button). I don't think we need an extra confirmation step, we can submit the image as soon as the user hits "ok" on the crop screen.

    image

    image

    image

    image

    enhancement image upload 
    opened by stephanegigandet 25
  • Authentication using google and apple.

    Authentication using google and apple.

    Problem

    Currently, the app only accepts email sign-in/signup. Having OAuth would be better for the user as they can sign in with ease.

    Proposed solution

    We can create a google and apple OAuth depending on the platform at the login-page.

    Additional context

    We can implement this feature using google_sign_in and apple_sign_in packages from pub dev along with the firebase. We can do this using flutter_appauth as well.

    But I need to understand the backend first to implement this feature because if the user is existing then we won't direct him to the signup page for asking for their username and other mandatory processes.

    enhancement 
    opened by yatendra2001 0
  • feat: 3449 Make

    feat: 3449 Make "Start Scanning!" a button

    Files Impacted:

    • product_list_page.dart

    What

    • Converts the simple text widget into a button, so that the ui becomes more intuitive

    Screenshot

    dark mode

    image

    Light mode

    image

    Fixes bug(s)

    • Fixes: #3449

    Part of

    • #525
    product page user lists 
    opened by Sudhanva-Nadiger 1
  • fix: 3533 - added a

    fix: 3533 - added a "stamp" to background tasks, to identify similar tasks

    Impacted files:

    • abstract_background_task.dart: added a stamp; minor refactoring
    • add_basic_details_page.dart: implemented the background stamp
    • add_other_details_page.dart: implemented the background stamp
    • background_task_details.dart: new enum BackgroundTaskDetailsStamp; added the background stamp
    • background_task_image.dart: added the background stamp
    • background_task_manager.dart: refactored the run queue; stops when there's not internet connection
    • background_task_refresh_later.dart: added the background stamp
    • edit_ingredients_page.dart: added the background stamp
    • edit_new_packagings.dart: implemented the background stamp
    • local_database.dart: unrelated removal of deprecated comment
    • main.dart: slightly related fix of #3522, because we used to run background tasks before the language was set
    • nutrition_page_loaded.dart: implemented the background stamp
    • ocr_helper.dart: added a background stamp
    • ocr_ingredients_helper.dart: implemented the background stamp
    • ocr_packaging_helper.dart: implemented the background stamp
    • simple_input_page.dart: added the background stamp; now we split the updates in as many minimum parts as possible
    • simple_input_page_helpers.dart: added and implemented background stamps; unrelated fix (when the widget is not displayed, the data should be considered as "not changed")

    What

    • Now using "stamps" to identify if tasks are "similar" or not.
    • We care about that because we care about the order of the changes
      • if we know 2 tasks are similar, we know we can get rid of the former, as it will be overwritten anyway by the latter.
      • It's not just a matter of being quicker by getting rid of "useless" tasks, it's a matter of not having to worry about if task A is run after task B.
      • it's also a matter of "ok this task failed, but the other tasks are not related, so we can run them anyway"

    Fixes bug(s)

    • Fixes: #3533
    product page database nutrition input 
    opened by monsieurtanuki 4
  • Add events for each section of the Edit mode in Matomo

    Add events for each section of the Edit mode in Matomo

    What

    • Add events for each section of the Edit mode in Matomo
    • Opening Individual Editing sections - and Clicking save as well, to see how many people give up

    Part of

    • #2855
    editing matomo 
    opened by teolemon 0
  • chore: Add fallback user agent

    chore: Add fallback user agent

    What

    For: #3534

    Honestly, I couldn't find a problem, here I added a fallback userAgent in cases where native calls to get device information may fail. + Added some logging for these cases

    opened by M123-dev 1
Releases(v4.2.1)
Owner
Open Food Facts
Open Food Facts is a collaborative, free and open database of food products from around the world.
Open Food Facts
Excess Food Locator helps food providers connect with food distributing NGOs.

Excess Food Locator Excess Food Locator helps people having excess food connect with other resources and distributors. This application is based on a

Pranav Kale 6 Nov 6, 2022
Flutter traditional food - Application Mobile Flutter - Traditional food

Mobile Application Flutter - Exhibition Introduction The Mobile Application has

null 0 Jan 5, 2022
Food-app-flutter - A simple food ordering application with an admin panel coded with flutter and uses firebase as a backend

shop_ui A new Flutter project. Getting Started This project is a starting point

Ryan Egbejule-jalla 3 Oct 5, 2022
Flutter-app-food-ordering - Flutter App Food Ordering

Food Ordering App Preview video: https://youtu.be/h1Cw7IoJByU My Twitter My Patr

SANGVALEAP VANNY 121 Dec 29, 2022
A Food App using Flutter & Firebase to post and view food blogs along with their recipes.

A Food App using Flutter ?? & Firebase ?? About the App ?? FoodLab is a App to post and view food blogs along with their recipes if you want ?? ! Logi

Shivani Singh 170 Dec 24, 2022
Food-Ordering-App - Food Ordering App UI Built With Flutter

Food Ordering App - Flutter UI Packages I'm using: flutter_svg: link smooth_star

Ashirbad Swain 5 Apr 26, 2022
This is a food app using flutter. This app includes the category, filter food, mark as favorite, etc.

Food App Flutter complete food app, where I will share with you how you can create a nice clean screens for your app that can run both Andriod and iOS

moayed harazeen 22 Dec 27, 2022
An open source food delivery product and service that will be developed on the FilledStacks YouTube channel

Box't Out An open source food delivery product and service that will be developed on the FilledStacks YouTube channel. The repo will contain all the s

Dane Mackier 379 Jan 7, 2023
This demo shows how you can open an expansion tile while closing an already open expansion tile.

Expansion Tile Open/Close Demo This demo shows you how to open an expansion tile while simultaneously closing an already open tile while maintaining a

Trey Thomas 3 Oct 21, 2022
Flutter Food Delivery Application Design

Flutter Food Delivery Application Design This application is not completed yet. Currently, I am working on it. A small attempt to make an Food deliver

Md Tarikul Islam 814 Jan 7, 2023
A Flutter application organizing access to information on University of Toronto Food Options.

UofT Foods Description A Flutter Mobile App designed to aid UofT Students and Staff easily find food options across all campuses. Features Campus Sele

Kyrel Jerome 2 Jan 8, 2021
Flutter Food Delivery Application design and Animation - day 3

Flutter Food Delivery Application Design - Day 3 class Day3 extends Flutter100DaysOfCode { video() { return { "title": "Flutter Food Deliv

Mohammad Rahmani 229 Dec 21, 2022
Created application for team to help each other with providing food they want

Food wishes app When you login or create your account, you can write what do you wish right now as a separate card, using "Edit" button. If you no lon

Pavlo Osadchuk 0 Nov 29, 2021
🔥 Simple application using ListView with YummiAPI for list Food 🍲

demo A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started if this is

Geovani Amaral 2 Jan 5, 2022
A mobile application to display the daily UMD diner food

A mobile application to display the daily UMD diner food. Also provides functionality to filter based on diet. Bitcamp 2022 Winner!

Vaibhav Sanjay 3 Apr 19, 2022
Flutter Food Delivery APP

Flutter 'Food Delivery APP' A Flutter app based on the design of the Food Delivery APP, created by Mehedi Hasan see more on Greating Start Clone the r

Nuzmul Hossain Nahid 6 Nov 6, 2022
Yumniastic is a online food delivery service app built with Flutter and Django

Welcome to Flutter Yumniastic ?? Yumniastic is a online food delivery service app built with Flutter and Django ?? See Screenshots See ScreenShots Dow

null 21 Dec 26, 2022