Mobile, desktop and website Apps with the same code

Last update: Jun 24, 2022

Mobile, desktop and website Apps with the same code

Build Status Dependency Status devDependency Status

This project shows how the source code can be architectured to run on multiple devices. As of now, it is able to run as:

  • iOS & Android Apps (based on react-native)
  • a Desktop App based on NW or based on Electron
  • a Website App in any browser (based on react)

A demo for the Website App is available here.

Screenshots

Mobile Apps (iOS & Android)

Mobile Apps

Desktop Apps (NW & Electron)

Desktop App

Website App

Website App

Libraries/tools

This project uses libraries and tools like:

  • es6 syntax and babel
  • react for the Website App and Desktop App,
  • react-native for the iOS & Android Apps
  • NW to package the Desktop App
  • Electron to package the Desktop App
  • flux to organize the data flow management
  • css-loader to integrate the styles in the builds
  • grunt to create the builds
  • webpack to help during the development phase with hot reloading

Basic philosophy

All the code is contained in the src directory, especially the 3 main entry files that are used for the builds:

  • index.ios.js & index.android.js are the ones used to build the iOS & Android Apps
  • index.js is the one used to build the Website App and Desktop App as the code is strictly the same.

Flux architecture actions/stores

All the flux architecture is share to 100% to all the different builds. This means that all the logic and data management code is done only once and reuse everywhere. This allows us to have an easy tests suite as well and to ensure that our code is working properly on all the devices.

Components

The real interest of the project is in how the components have been structured to shared most of their logic and only redefined what is specific to every device.

Basically, every component has a main Class which inherits a base Class containing all the logic. Then, the main component import a different Render function which has been selected during the build. The file extension .ios.js, .android.js or .js is used by the build tool to import only the right file.

The .native.js files contain code that is shared between both mobile platforms (iOS & Android). Currently, the .ios.js and .android.js files compose this .native.js file since all code is shared right now. However, if a component needed to be different for platform specific reasons, that code would be included in the corresponding platform specific files.

At the end, every component is defined by 6 files. If we look at the screen component, here is its structure.

Screen.js
├── ScreenBase.js
├── ScreenRender.ios.js (specific to iOS build
├── ScreenRender.android.js (specific to Android build)
├── ScreenRender.native.js (shared mobile app code - iOS & Android)
└── ScreenRender.js (used during Website and Desktop build)

And here is the main Class file which composes the files.

'use strict';

import Base from './ScreenBase';
import Render from './ScreenRender';

export default class Screen extends Base {
  constructor (props) {
    super(props);
  }

  render () {
    return Render.call(this, this.props, this.state);
  }
}

What's next

Here are some thoughts about what can come next:

  • Make the Website App Isomorphic/Universal

Thank you Robert for your awesome design

I want to thank Robert O'Dowd who kindly authorized me the reuse his very beautiful design. The original design made by Robert was part of his project called "Simplifycation" visible here.

How to build/run the projects

General requirements before running any specific project

  • npm install to install all the dependencies, React and React Native among others.

With some versions of npm (>=v3.3.10 <=v3.6.0)

Some builds from npm included bugs while npm install. So if you are using a npm version within the range form 3.3.10 to 3.6.0 included, you must run npm install twice. Those versions including npm v3.3.12 are the ones bundled by default with node from version v5.1.0 to v5.5.0.

  • npm install npm
  • npm install npm run it twice, because of the packages won't be installed after the first run #10985

The Mobile Apps (iOS & Android)

Requirements for React Native

iOS

  • OS X
  • Xcode 6.3 or higher is recommended (Xcode only runs on Mac).
  • Homebrew is the recommended way to install node, watchman, and flow.
  • brew install node
  • brew install watchman. We recommend installing watchman, otherwise you might hit a node file watching bug.
  • brew install flow. If you want to use flow.

Android

Running the Mobile Apps

iOS

  • Open iosApp.xcodeproj and hit run in Xcode.
  • Hit cmd+R in your iOS simulator to reload the app and see your change!

Android

Congratulations! You've just successfully run the project as an iOS or Android App.

The Website App

Requirements for React

There isn't any additional requirements since you already installed the deps with npm install.

Quick start

Congratulations! You've just successfully run the project as a Website App.

The Desktop App

You can either run the project with NW or electron.

Requirements for NW

To run the project, you are supposed to run something like:

/path/to/nw .

On OSX, the executable binary is in a hidden directory within the .app file. The easier solution to install it is to download the app on http://nwjs.io/ then copying it to your application folder. You will now be able to run:

/Applications/nwjs.app/Contents/MacOS/nwjs .

You can also setup an alias to call the binary.

alias nw="/Applications/nwjs.app/Contents/MacOS/nwjs"

Quick start with NW

  • npm run build to build the project (at least the first time)
  • npm run serve-nw to launch the desktop app and enable livereload

Congratulations! You've just successfully run the project as a Desktop App.

Quick start with Electron

  • npm run build to build the project (at least the first time)
  • npm run serve-electron to launch the desktop app and enable livereload

Congratulations! You've just successfully run the project as a Desktop App.

Run the tests

To run the tests, simply run:

npm test

Tests

GitHub

https://github.com/benoitvallon/react-native-nw-react-calculator
Comments
  • 1. Android App

    I only need to add 2 small Android specific things, the keyAction button border radius wouldn't show on the TouchableHighlight and the text inside of the "Screen" wasn't lining up properly. That's really good as everything else was left untouched and just worked out of the box! :+1:

    In order to share the same code without needing to just straight copy/paste everything in the *.ios.js files, I created *.native.js files and import them via the individual *.ios/android.js files.

    This feels a little messy since it adds so many extra files.

    Another way we can do it is to let the plain AppRender.js files be the "native" ones (both for iOS & Android) and rename the Web & NW.js files to something like AppRender.web.js. Doing it this way, we'd have less files but we'd probably have to change the Webpack config & gruntfile to account for the change.

    Any thoughts?

    If you like this and we come to an agreement on the file structure, then I can fill in the blanks on the README as well. :smiley:

    android-app

    Reviewed by dsibiski at 2015-11-05 20:07
  • 2. Trying the demo

    Hi, I managed to successfully run the demo using electron but not with react-native on Android. Here's what I get when trying with react-native run-android

    ╭─[email protected] ~/Documents/Testcode/react-native-nw-react-calculator  ‹master› 
    ╰─➤  react-native run-android                                            
    Starting JS server...
    Building and installing the app on the device (cd android && ./gradlew installDebug)...
    :app:preBuild UP-TO-DATE
    :app:preDebugBuild UP-TO-DATE
    :app:checkDebugManifest
    :app:preReleaseBuild UP-TO-DATE
    :app:prepareComAndroidSupportAppcompatV72301Library UP-TO-DATE
    :app:prepareComAndroidSupportRecyclerviewV72301Library UP-TO-DATE
    :app:prepareComAndroidSupportSupportV42301Library UP-TO-DATE
    :app:prepareComFacebookFrescoDrawee081Library UP-TO-DATE
    :app:prepareComFacebookFrescoFbcore081Library UP-TO-DATE
    :app:prepareComFacebookFrescoFresco081Library UP-TO-DATE
    :app:prepareComFacebookFrescoImagepipeline081Library UP-TO-DATE
    :app:prepareComFacebookFrescoImagepipelineOkhttp081Library UP-TO-DATE
    :app:prepareComFacebookReactReactNative0210Library UP-TO-DATE
    :app:prepareOrgWebkitAndroidJscR174650Library UP-TO-DATE
    :app:prepareDebugDependencies
    :app:compileDebugAidl UP-TO-DATE
    :app:compileDebugRenderscript UP-TO-DATE
    :app:generateDebugBuildConfig UP-TO-DATE
    :app:generateDebugAssets UP-TO-DATE
    :app:mergeDebugAssets UP-TO-DATE
    :app:generateDebugResValues UP-TO-DATE
    :app:generateDebugResources UP-TO-DATE
    :app:mergeDebugResources UP-TO-DATE
    :app:bundleDebugJsAndAssets SKIPPED
    :app:processDebugManifest UP-TO-DATE
    :app:processDebugResources UP-TO-DATE
    :app:generateDebugSources UP-TO-DATE
    :app:processDebugJavaRes UP-TO-DATE
    :app:compileDebugJavaWithJavac UP-TO-DATE
    :app:compileDebugNdk UP-TO-DATE
    :app:compileDebugSources UP-TO-DATE
    :app:preDexDebug UP-TO-DATE
    :app:dexDebug UP-TO-DATE
    :app:validateDebugSigning
    :app:packageDebug UP-TO-DATE
    :app:zipalignDebug UP-TO-DATE
    :app:assembleDebug UP-TO-DATE
    :app:installDebug
    Installing APK 'app-debug.apk' on 'Nexus_5X_API_25_x86(AVD) - 7.1.1'
    Installed on 1 device.
    
    BUILD SUCCESSFUL
    
    Total time: 9.438 secs
    
    This build could be faster, please consider using the Gradle Daemon: http://gradle.org/docs/2.4/userguide/gradle_daemon.html
    Starting the app (adb shell am start -n com.reactnativenwreactcalculator/.MainActivity)...
    ╭─[email protected] ~/Documents/Testcode/react-native-nw-react-calculator  ‹master› 
    ╰─➤ 
    

    nothing shows on my emulator. I've turned it on via

    ./emulator -avd Nexus_5X_API_25_x86
    
    Reviewed by yuzrieSiddiq at 2017-07-06 05:51
  • 3. `npm test` fails with naming collision

    Repro steps:

    1. git clone https://github.com/benoitvallon/react-native-nw-react-calculator
    2. cd react-native-nw-react-calculator
    3. npm install
    4. npm install (again, per discussion in #3)
    5. npm test

    Actual results:

    koi:✓:react-native-nw-react-calculator>> npm test
    
    > [email protected] test /Users/whitley/src/3p/react-native-nw-react-calculator
    > jest
    
    Using Jest CLI v0.9.0, jasmine2
    
    Error: Failed to build DependencyGraph: @providesModule naming collision:
      Duplicate module name: xhrSimpleDataSerializer
      Paths: /Users/whitley/src/3p/react-native-nw-react-calculator/node_modules/react-native/node_modules/fbjs/lib/xhrSimpleDataSerializer.js collides with /Users/whitley/src/3p/react-native-nw-react-calculator/node_modules/flux/node_modules/fbjs/flow/include/xhrSimpleDataSerializer.js
    
    This error is caused by a @providesModule declaration with the same name accross two different files.
    
    This is most likely a setup or configuration issue. To resolve a module name collision, change or blacklist one of the offending modules. See http://facebook.github.io/jest/docs/api.html#config-modulepathignorepatterns-array-string
    npm ERR! Test failed.  See above for more details.
    

    I've tried to repro with both node v5.5.0 (npm v3.3.12) and node v5.7.0 (npm v3.6.0), with the same error each time.

    FWIW, I ended up here after having similar naming collision errors plaguing my attempts to bring up jest-based tests in a new RN project I'm working on. (BTW, thanks a LOT for including tests here. Very few public RN projects seem to bother.) I'm at a loss as to what could be causing this, aside from it being at least superficially related to facebook/react-native#3625 and facebook/react-native#3618. But those have been hanging around for some time, meanwhile the discussion on issues and PRs here suggest that the tests have been running well for you and others.

    Any ideas?

    Reviewed by jwhitley at 2016-03-05 20:21
  • 4. Handle keyboard input in web version.

    Problem:

    Not possible to use keyboard in web version.

    Solution:

    I added hidden component KeyboardHandler which handle keyboard input. This component rendered in AppRender component. KeyboardHandler uses data from keyCodes.json in constants folder.

    Result:

    Now it is possible to interact with calculator by keyboard.

    Reviewed by morsko1 at 2017-06-02 18:34
  • 5. Multiple platforms - build configuration question

    Hi, Could you explain how build tools 'knows' which files to import? For example when you use import Render from './KeyRender'; how it knows if choose KeyRender.js, KeyRender.android.js or KeyRender.ios.js? I can't find place where it's configured. For example when I want to change suffixes from .android.js to .myandroid.js which config should I edit?

    EDIT: Ok, I think I found it: https://facebook.github.io/react-native/docs/platform-specific-code.html#platform-specific-extensions So react-native uses .android.js or .ios.js files (if exists - if not rn uses .js files) Webpack (used for desktop and web) uses .js files

    Reviewed by dstudzinski at 2017-03-10 12:36
  • 6. Adds demo

    Please, add demo to show the running application.

    After https://github.com/benoitvallon/react-native-nw-react-calculator/pull/15 's merge,

    npm run build
    cd dist
    git init && git add . && git commit -m "Pages"
    git remote add github [email protected]:benoitvallon/react-native-nw-react-calculator.git
    git push -f github master:gh-pages
    

    I tried it on my side. my demo my branch

    Reviewed by godu at 2015-11-08 18:49
  • 7. Update README.md

    I have just updated the end of the readme file and I believe that sky color is not suitable for the background color in-app have to update that soon. Thanks

    Reviewed by kaxiif at 2021-10-03 16:47
  • 8. default export set

    previous method does not allow flexible import of "CalculatorActions" in other components we strictly had to import "CalculatorActions" with the same name but the changes made allow us to import CalculatorActions with any name in any component

    Reviewed by anishagg17 at 2019-07-22 18:34
  • 9. migrate .eslintrc file to ESLint v2

    ESLInt has updated to v2 and there're some significant changes (http://eslint.org/docs/user-guide/migrating-to-2.0.0#language-options). There're some ESLint warning with the current .eslintrc and update the option will solve those warnings.

    Reviewed by zqlu at 2016-05-07 15:52
  • 10. Cannot find module 'postcss-filter-plugins'

    when i execute npm run build: throw the error: `WARNING in main.js from UglifyJs Condition always true [./~/react/lib/ReactMount.js:764,0] Dropping side-effect-free statement [./~/react-router/lib/deprecateObjectProperties.js:65,0] Side effects in initialization of unused variable _ret [./~/react-router/lib/deprecateObjectProperties.js:63,0] Condition always true [./~/react/lib/findDOMNode.js:46,0] Condition always true [./~/react/lib/instantiateReactComponent.js:80,0] Dropping unreachable code [./~/react/lib/shouldUpdateReactComponent.js:40,0] Condition always true [./~/react/lib/traverseAllChildren.js:158,0] Condition always true [./~/react-router/lib/Redirect.js:97,0] Condition always false [./~/style-loader/addStyles.js:24,0] Dropping unreachable code [./~/style-loader/addStyles.js:25,0] Dropping unused variable r [./~/es6-promise/dist/es6-promise.js:130,0] Condition left of && always true [./~/es6-promise/dist/es6-promise.js:944,0] Dropping unused function lib$es6$promise$utils$$isMaybeThenable [./~/es6-promise/dist/es6-promise.js:19,0] Condition always true [./~/history/lib/createMemoryHistory.js:67,0] Condition always true [./~/react-router/lib/IndexRedirect.js:58,0] Condition always true [./~/react-router/lib/IndexRoute.js:55,0] Condition always true [./~/react-router/lib/Route.js:50,0] Dropping side-effect-free statement [./~/react-router/lib/getComponents.js:56,0] Side effects in initialization of unused variable _ret [./~/react-router/lib/getComponents.js:54,0] Condition always true [./~/react/lib/ReactDOMComponent.js:907,0] Dropping side-effect-free statement [./~/react/lib/ReactEventListener.js:72,0] Dropping unused function handleTopLevelWithPath [./~/react/lib/ReactEventListener.js:98,0] Dropping unused variable DOCUMENT_FRAGMENT_NODE_TYPE [./~/react/lib/ReactEventListener.js:26,0] Condition always false [./~/style-loader!./~/css-loader!./~/normalize.css/normalize.css:10,0] Dropping unreachable code [./~/style-loader!./~/css-loader!./~/normalize.css/normalize.css:12,0] Side effects in initialization of unused variable update [./~/style-loader!./~/css-loader!./~/normalize.css/normalize.css:7,0] Condition always false [./~/style-loader!./~/css-loader!./src/styles/main.css:10,0] Dropping unreachable code [./~/style-loader!./~/css-loader!./src/styles/main.css:12,0] Side effects in initialization of unused variable update [./~/style-loader!./~/css-loader!./src/styles/main.css:7,0]

    ERROR in Cannot find module 'postcss-filter-plugins' @ ./src/styles/main.css 4:14-78

    ERROR in Cannot find module 'postcss-filter-plugins' @ ./~/normalize.css/normalize.css 4:14-67 Warning: Task "webpack:dist" failed. Use --force to continue.

    Aborted due to warnings.

    npm ERR! Darwin 15.0.0 npm ERR! argv "/Users/admin/.nvm/versions/node/v5.6.0/bin/node" "/Users/admin/.nvm/versions/node/v5.6.0/lib/node_modules/cnpm/node_modules/.bin/npm" "--userconfig=/Users/admin/.cnpmrc" "--disturl=https://npm.taobao.org/mirrors/node" "--registry=https://registry.npm.taobao.org" "run" "build" npm ERR! node v5.6.0 npm ERR! npm v3.8.6 npm ERR! code ELIFECYCLE npm ERR! [email protected] build: grunt build npm ERR! Exit status 3 npm ERR! npm ERR! Failed at the [email protected] build script 'grunt build'. npm ERR! Make sure you have the latest version of node.js and npm installed. npm ERR! If you do, this is most likely a problem with the ReactNativeNWReactCalculator package, npm ERR! not with npm itself. npm ERR! Tell the author that this fails on your system: npm ERR! grunt build npm ERR! You can get information on how to open an issue for this project with: npm ERR! npm bugs ReactNativeNWReactCalculator npm ERR! Or if that isn't available, you can get their info via: npm ERR! npm owner ls ReactNativeNWReactCalculator npm ERR! There is likely additional logging output above.

    npm ERR! Please include the following file with any support request: npm ERR! /Users/admin/Desktop/react-native-nw-react-calculator-master/npm-debug.log `

    Reviewed by recwert at 2016-04-20 02:53
  • 11. Bump eslint from 2.13.1 to 6.6.0

    Bumps eslint from 2.13.1 to 6.6.0.

    Release notes

    Sourced from eslint's releases.

    v6.6.0

    • 39dfe08 Update: false positives in function-call-argument-newline (fixes #12123) (#12280) (Scott O'Hara)
    • 4d84210 Update: improve report location for no-trailing-spaces (fixes #12315) (#12477) (Milos Djermanovic)
    • c6a7745 Update: no-trailing-spaces false negatives after comments (fixes #12479) (#12480) (Milos Djermanovic)
    • 0bffe95 Fix: no-misleading-character-class crash on invalid regex (fixes #12169) (#12347) (Milos Djermanovic)
    • c6a9a3b Update: Add enforceForIndexOf option to use-isnan (fixes #12207) (#12379) (Milos Djermanovic)
    • 364877b Update: measure plugin loading time and output in debug message (#12395) (Victor Homyakov)
    • 1744fab Fix: operator-assignment removes and duplicates comments (#12485) (Milos Djermanovic)
    • 52ca11a Fix: operator-assignment invalid autofix with adjacent tokens (#12483) (Milos Djermanovic)
    • 0f6d0dc Fix: CLIEngine#addPlugin reset lastConfigArrays (fixes #12425) (#12468) (Toru Nagashima)
    • 923a8cb Chore: Fix lint failure in JSDoc comment (#12489) (Brandon Mills)
    • aac3be4 Update: Add ignored prop regex no-param-reassign (#11275) (Luke Bennett)
    • e5382d6 Chore: Remove unused parameter in dot-location (#12464) (Milos Djermanovic)
    • 49faefb Fix: no-obj-calls false positive (fixes #12437) (#12467) (Toru Nagashima)
    • b3dbd96 Fix: problematic installation issue (fixes #11018) (#12309) (Toru Nagashima)
    • cd7c29b Sponsors: Sync README with website (ESLint Jenkins)
    • 8233873 Docs: Add note about Node.js requiring SSL support (fixes #11413) (#12475) (Nicholas C. Zakas)
    • 89e8aaf Fix: improve report location for no-tabs (#12471) (Milos Djermanovic)
    • 7dffe48 Update: Enable function string option in comma-dangle (fixes #12058) (#12462) (YeonJuan)
    • e15e1f9 Docs: fix doc for no-unneeded-ternary rule (fixes #12098) (#12410) (Sam Rae)
    • b1dc58f Sponsors: Sync README with website (ESLint Jenkins)
    • 61749c9 Chore: Provide debug log for parser errors (#12474) (Brad Zacher)
    • 7c8bbe0 Update: enforceForOrderingRelations no-unsafe-negation (fixes #12163) (#12414) (Sam Rae)
    • 349ed67 Update: improve report location for no-mixed-operators (#12328) (Chiawen Chen)
    • a102eaa Fix: prefer-numeric-literals invalid autofix with adjacent tokens (#12387) (Milos Djermanovic)
    • 6e7c18d Update: enforceForNewInMemberExpressions no-extra-parens (fixes #12428) (#12436) (Milos Djermanovic)
    • 51fbbd7 Fix: array-bracket-newline consistent error with comments (fixes #12416) (#12441) (Milos Djermanovic)
    • e657d4c Fix: report full dot location in dot-location (#12452) (Milos Djermanovic)
    • 2d6e345 Update: make isSpaceBetweenTokens() ignore newline in comments (#12407) (YeonJuan)
    • 84f71de Update: remove default overrides in keyword-spacing (fixes #12369) (#12411) (YeonJuan)
    • 18a0b0e Update: improve report location for no-space-in-parens (#12364) (Chiawen Chen)
    • d61c8a5 Update: improve report location for no-multi-spaces (#12329) (Chiawen Chen)
    • 561093f Upgrade: bump inquirer to ^7.0.0 (#12440) (Joe Graham)
    • fb633b2 Chore: Add a script for testing with more control (#12444) (Eric Wang)
    • 012ec51 Sponsors: Sync README with website (ESLint Jenkins)
    • 874fe16 New: pass cwd from cli engine (#12389) (Eric Wang)
    • b962775 Update: no-self-assign should detect member expression with this (#12279) (Tibor Blenessy)
    • 02977f2 Docs: Clarify eslint:recommended semver policy (#12429) (Kevin Partington)
    • 97045ae Docs: Fixes object type for rules in "Use a Plugin" (#12409) (Daisy Develops)
    • 24ca088 Docs: Fix typo in v6 migration guide (#12412) (Benjamim Sonntag)
    • b094008 Chore: update version parameter name (#12402) (Toru Nagashima)
    • e5637ba Chore: enable jsdoc/require-description (#12365) (Kai Cataldo)
    • d31f337 Sponsors: Sync README with website (ESLint Jenkins)
    • 7ffb22f Chore: Clean up inline directive parsing (#12375) (Jordan Eldredge)
    • 84467c0 Docs: fix wrong max-depth example (fixes #11991) (#12358) (Gabriel R Sezefredo)
    • 3642342 Docs: Fix minor formatting/grammar errors (#12371) (cherryblossom000)
    • c47fa0d Docs: Fix missing word in sentence (#12361) (Dan Boulet)
    • 8108f49 Chore: enable additional eslint-plugin-jsdoc rules (#12336) (Kai Cataldo)
    • b718d2e Chore: update issue template with --eslint-fix flag (#12352) (James George)
    • 20ba14d Sponsors: Sync README with website (ESLint Jenkins)
    ... (truncated)
    Changelog

    Sourced from eslint's changelog.

    v6.6.0 - October 25, 2019

    • 39dfe08 Update: false positives in function-call-argument-newline (fixes #12123) (#12280) (Scott O'Hara)
    • 4d84210 Update: improve report location for no-trailing-spaces (fixes #12315) (#12477) (Milos Djermanovic)
    • c6a7745 Update: no-trailing-spaces false negatives after comments (fixes #12479) (#12480) (Milos Djermanovic)
    • 0bffe95 Fix: no-misleading-character-class crash on invalid regex (fixes #12169) (#12347) (Milos Djermanovic)
    • c6a9a3b Update: Add enforceForIndexOf option to use-isnan (fixes #12207) (#12379) (Milos Djermanovic)
    • 364877b Update: measure plugin loading time and output in debug message (#12395) (Victor Homyakov)
    • 1744fab Fix: operator-assignment removes and duplicates comments (#12485) (Milos Djermanovic)
    • 52ca11a Fix: operator-assignment invalid autofix with adjacent tokens (#12483) (Milos Djermanovic)
    • 0f6d0dc Fix: CLIEngine#addPlugin reset lastConfigArrays (fixes #12425) (#12468) (Toru Nagashima)
    • 923a8cb Chore: Fix lint failure in JSDoc comment (#12489) (Brandon Mills)
    • aac3be4 Update: Add ignored prop regex no-param-reassign (#11275) (Luke Bennett)
    • e5382d6 Chore: Remove unused parameter in dot-location (#12464) (Milos Djermanovic)
    • 49faefb Fix: no-obj-calls false positive (fixes #12437) (#12467) (Toru Nagashima)
    • b3dbd96 Fix: problematic installation issue (fixes #11018) (#12309) (Toru Nagashima)
    • cd7c29b Sponsors: Sync README with website (ESLint Jenkins)
    • 8233873 Docs: Add note about Node.js requiring SSL support (fixes #11413) (#12475) (Nicholas C. Zakas)
    • 89e8aaf Fix: improve report location for no-tabs (#12471) (Milos Djermanovic)
    • 7dffe48 Update: Enable function string option in comma-dangle (fixes #12058) (#12462) (YeonJuan)
    • e15e1f9 Docs: fix doc for no-unneeded-ternary rule (fixes #12098) (#12410) (Sam Rae)
    • b1dc58f Sponsors: Sync README with website (ESLint Jenkins)
    • 61749c9 Chore: Provide debug log for parser errors (#12474) (Brad Zacher)
    • 7c8bbe0 Update: enforceForOrderingRelations no-unsafe-negation (fixes #12163) (#12414) (Sam Rae)
    • 349ed67 Update: improve report location for no-mixed-operators (#12328) (Chiawen Chen)
    • a102eaa Fix: prefer-numeric-literals invalid autofix with adjacent tokens (#12387) (Milos Djermanovic)
    • 6e7c18d Update: enforceForNewInMemberExpressions no-extra-parens (fixes #12428) (#12436) (Milos Djermanovic)
    • 51fbbd7 Fix: array-bracket-newline consistent error with comments (fixes #12416) (#12441) (Milos Djermanovic)
    • e657d4c Fix: report full dot location in dot-location (#12452) (Milos Djermanovic)
    • 2d6e345 Update: make isSpaceBetweenTokens() ignore newline in comments (#12407) (YeonJuan)
    • 84f71de Update: remove default overrides in keyword-spacing (fixes #12369) (#12411) (YeonJuan)
    • 18a0b0e Update: improve report location for no-space-in-parens (#12364) (Chiawen Chen)
    • d61c8a5 Update: improve report location for no-multi-spaces (#12329) (Chiawen Chen)
    • 561093f Upgrade: bump inquirer to ^7.0.0 (#12440) (Joe Graham)
    • fb633b2 Chore: Add a script for testing with more control (#12444) (Eric Wang)
    • 012ec51 Sponsors: Sync README with website (ESLint Jenkins)
    • 874fe16 New: pass cwd from cli engine (#12389) (Eric Wang)
    • b962775 Update: no-self-assign should detect member expression with this (#12279) (Tibor Blenessy)
    • 02977f2 Docs: Clarify eslint:recommended semver policy (#12429) (Kevin Partington)
    • 97045ae Docs: Fixes object type for rules in "Use a Plugin" (#12409) (Daisy Develops)
    • 24ca088 Docs: Fix typo in v6 migration guide (#12412) (Benjamim Sonntag)
    • b094008 Chore: update version parameter name (#12402) (Toru Nagashima)
    • e5637ba Chore: enable jsdoc/require-description (#12365) (Kai Cataldo)
    • d31f337 Sponsors: Sync README with website (ESLint Jenkins)
    • 7ffb22f Chore: Clean up inline directive parsing (#12375) (Jordan Eldredge)
    • 84467c0 Docs: fix wrong max-depth example (fixes #11991) (#12358) (Gabriel R Sezefredo)
    • 3642342 Docs: Fix minor formatting/grammar errors (#12371) (cherryblossom000)
    • c47fa0d Docs: Fix missing word in sentence (#12361) (Dan Boulet)
    • 8108f49 Chore: enable additional eslint-plugin-jsdoc rules (#12336) (Kai Cataldo)
    • b718d2e Chore: update issue template with --eslint-fix flag (#12352) (James George)
    ... (truncated)
    Commits
    • 879c373 6.6.0
    • c8ba30a Build: changelog update for 6.6.0
    • 39dfe08 Update: false positives in function-call-argument-newline (fixes #12123) (#12...
    • 4d84210 Update: improve report location for no-trailing-spaces (fixes #12315) (#12477)
    • c6a7745 Update: no-trailing-spaces false negatives after comments (fixes #12479) (#12...
    • 0bffe95 Fix: no-misleading-character-class crash on invalid regex (fixes #12169) (#12...
    • c6a9a3b Update: Add enforceForIndexOf option to use-isnan (fixes #12207) (#12379)
    • 364877b Update: measure plugin loading time and output in debug message (#12395)
    • 1744fab Fix: operator-assignment removes and duplicates comments (#12485)
    • 52ca11a Fix: operator-assignment invalid autofix with adjacent tokens (#12483)
    • Additional commits viewable in compare view
    Maintainer changes

    This version was pushed to npm by eslintbot, a new releaser for eslint since your current version.


    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot ignore this [patch|minor|major] version will close this PR and stop Dependabot creating any more for this minor/major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    Reviewed by dependabot[bot] at 2019-11-02 20:56
  • 12. Calculator can’t do BIDMAS

    I am unable to create an equation which involves more than one operator. When I type 3+3, then click * to try to do 3+3*3, it just replaces the + with a . Making the equation 33 and giving me the answer 9.

    Reviewed by TheDynamical at 2018-06-19 22:12

Related

A flutter plugin about qr code or bar code scan , it can scan from file、url、memory and camera qr code or bar code .Welcome to feedback your issue.
A flutter plugin about qr code or bar code scan , it can scan from file、url、memory and camera qr code or bar code .Welcome to feedback your issue.

r_scan A flutter plugin about qr code or bar code scan , it can scan from file、url、memory and camera qr code or bar code .Welcome to feedback your iss

Jun 5, 2022
Flet enables developers to easily build realtime web, mobile and desktop apps in Python. No frontend experience required.
Flet enables developers to easily build realtime web, mobile and desktop apps in Python. No frontend experience required.

Flet Flet is a framework that enables you to easily build realtime web, mobile and desktop apps in your favorite language and securely share them with

Jun 24, 2022
Flathub-desktop - Unofficial Desktop Client for Flathub
Flathub-desktop - Unofficial Desktop Client for Flathub

Flathub Desktop Unofficial Desktop Client for Flathub How to build and run: You

Feb 5, 2022
An isolated worker for Flutter (Isolate) and Web (Web Worker). Behaves almost the same as the compute function, except it is not a one-off worker.

A singleton isolated worker for all platforms. On most platforms, it uses Flutter's Isolate, except on the web, since Isolate is not available, it use

Jun 19, 2022
Taking many pictures and photos list in the same page
Taking many pictures and photos list in the same page

Custom Camera Preview A component has developed with Flutter Purpose Instead of taking photos of a product and taking them one by one when users need

May 10, 2022
Todo app - contains same UI and different state management techniques (without using StatefulWidget)
Todo app - contains same UI and different state management techniques (without using StatefulWidget)

This repo contains same UI and different state management techniques (without using StatefulWidget) to compare and prefer based on your coding style.

May 19, 2022
A simple detailed flutter widget that looks almost the same as the real instagram mention widget.
A simple detailed flutter widget that looks almost the same as the real instagram mention widget.

Instagram Mention Widgets 'small details do matter' ❤️ This package provides simple and almost the same UI details that the real Instagram mention wid

Jan 22, 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.

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

Feb 14, 2022
Peek & Pop implementation for Flutter based on the iOS functionality of the same name.

peek_and_pop Peek & Pop implementation for Flutter based on the iOS functionality of the same name. Finally, the v1.0.0 release! More fluent, more opt

Jun 24, 2022
The same old Weather App, But 'In Flutter , By Me'
The same old Weather App, But 'In Flutter , By Me'

Weather App v1.0.1 About The same old Weather App, But 'In Flutter , By Me' . NB Still in developement Stats ### v1.0.1 - Started a Basic outline of

Mar 22, 2022
Shortcuts and actions - Spice up your Flutter Desktop/Web apps with Shortcuts and Actions
Shortcuts and actions - Spice up your Flutter Desktop/Web apps with Shortcuts and Actions

Spice up your Flutter Desktop/Web apps with Shortcuts and Actions A desktop/web

Feb 27, 2022
This plugin allows Flutter desktop apps to Retrieve information about screen size, displays, cursor position, etc.

screen_retriever This plugin allows Flutter desktop apps to Retrieve information about screen size, displays, cursor position, etc. screen_retriever P

May 5, 2022
A full screen mobile scanner for scanning QR Code and Bar Code.

Flutter QR Bar Scanner A Full Screen Scanner for Scanning QR code and Barcode using Google's Mobile Vision API Reading & Scanning QR/Bar codes using F

May 31, 2022
Today we will show you how you can create your developer portfolio website and app using flutter.
Today we will show you how you can create your developer portfolio website and app using flutter.

Responsive and Animated Portfolio Website & App - Flutter UI Live Preview Watch it on YouTube Packages we are using: flutter_svg: link goole_fonts: li

Jun 18, 2022
Feb 21, 2022
Personal Website built using Flutter

Personal Website built using Flutter

Jan 29, 2022
✔️ Flutter Portofolio Website
 ✔️ Flutter Portofolio Website

✔️ Flutter Portofolio Website A Flutter app based on the design of the Flutter Portofolio Website, created by Achmad Rizki Nur Fauzie, Features Respon

Sep 23, 2021