├── .github ├── CODEOWNERS ├── FUNDING.yml ├── PULL_REQUEST_TEMPLATE.md └── workflows │ └── main.yaml ├── .gitignore ├── .gitlab-ci.yml ├── .idea └── runConfigurations │ ├── development.xml │ ├── production.xml │ └── staging.xml ├── .metadata ├── .vscode └── launch.json ├── LICENSE ├── README.md ├── analysis_options.yaml ├── android ├── .gitignore ├── app │ ├── build.gradle │ └── src │ │ ├── debug │ │ └── AndroidManifest.xml │ │ ├── development │ │ └── res │ │ │ └── drawable │ │ │ ├── ic_launch_image.xml │ │ │ └── launch_background.xml │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── ic_launcher-playstore.png │ │ ├── kotlin │ │ │ └── space │ │ │ │ └── wisnuwiry │ │ │ │ └── flutter_starter │ │ │ │ └── MainActivity.kt │ │ └── res │ │ │ ├── drawable-v21 │ │ │ └── launch_background.xml │ │ │ ├── drawable │ │ │ ├── ic_launch_image.xml │ │ │ └── launch_background.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-mdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ ├── values-night │ │ │ └── styles.xml │ │ │ └── values │ │ │ ├── ic_launcher_background.xml │ │ │ └── styles.xml │ │ ├── profile │ │ └── AndroidManifest.xml │ │ └── staging │ │ └── res │ │ └── drawable │ │ ├── ic_launch_image.xml │ │ └── launch_background.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ └── gradle-wrapper.properties └── settings.gradle ├── assets ├── .env.example ├── fonts │ └── .gitkeep └── images │ ├── .gitkeep │ ├── bitmap │ └── not_found.webp │ ├── flags │ ├── ad.png │ ├── ae.png │ ├── af.png │ ├── ag.png │ ├── ai.png │ ├── al.png │ ├── am.png │ ├── an.png │ ├── ao.png │ ├── aq.png │ ├── ar.png │ ├── as.png │ ├── at.png │ ├── au.png │ ├── aw.png │ ├── ax.png │ ├── az.png │ ├── ba.png │ ├── bb.png │ ├── bd.png │ ├── be.png │ ├── bf.png │ ├── bg.png │ ├── bh.png │ ├── bi.png │ ├── bj.png │ ├── bl.png │ ├── bm.png │ ├── bn.png │ ├── bo.png │ ├── bq.png │ ├── br.png │ ├── bs.png │ ├── bt.png │ ├── bv.png │ ├── bw.png │ ├── by.png │ ├── bz.png │ ├── ca.png │ ├── cc.png │ ├── cd.png │ ├── cf.png │ ├── cg.png │ ├── ch.png │ ├── ci.png │ ├── ck.png │ ├── cl.png │ ├── cm.png │ ├── cn.png │ ├── co.png │ ├── cr.png │ ├── cu.png │ ├── cv.png │ ├── cw.png │ ├── cx.png │ ├── cy.png │ ├── cz.png │ ├── de.png │ ├── dj.png │ ├── dk.png │ ├── dm.png │ ├── do.png │ ├── dz.png │ ├── ec.png │ ├── ee.png │ ├── eg.png │ ├── eh.png │ ├── en.png │ ├── er.png │ ├── es.png │ ├── et.png │ ├── eu.png │ ├── fi.png │ ├── fj.png │ ├── fk.png │ ├── fm.png │ ├── fo.png │ ├── fr.png │ ├── ga.png │ ├── gb-eng.png │ ├── gb-nir.png │ ├── gb-sct.png │ ├── gb-wls.png │ ├── gb.png │ ├── gd.png │ ├── ge.png │ ├── gf.png │ ├── gg.png │ ├── gh.png │ ├── gi.png │ ├── gl.png │ ├── gm.png │ ├── gn.png │ ├── gp.png │ ├── gq.png │ ├── gr.png │ ├── gs.png │ ├── gt.png │ ├── gu.png │ ├── gw.png │ ├── gy.png │ ├── hk.png │ ├── hm.png │ ├── hn.png │ ├── hr.png │ ├── ht.png │ ├── hu.png │ ├── id.png │ ├── ie.png │ ├── il.png │ ├── im.png │ ├── in.png │ ├── io.png │ ├── iq.png │ ├── ir.png │ ├── is.png │ ├── it.png │ ├── je.png │ ├── jm.png │ ├── jo.png │ ├── jp.png │ ├── ke.png │ ├── kg.png │ ├── kh.png │ ├── ki.png │ ├── km.png │ ├── kn.png │ ├── kp.png │ ├── kr.png │ ├── kw.png │ ├── ky.png │ ├── kz.png │ ├── la.png │ ├── lb.png │ ├── lc.png │ ├── li.png │ ├── lk.png │ ├── lr.png │ ├── ls.png │ ├── lt.png │ ├── lu.png │ ├── lv.png │ ├── ly.png │ ├── ma.png │ ├── mc.png │ ├── md.png │ ├── me.png │ ├── mf.png │ ├── mg.png │ ├── mh.png │ ├── mk.png │ ├── ml.png │ ├── mm.png │ ├── mn.png │ ├── mo.png │ ├── mp.png │ ├── mq.png │ ├── mr.png │ ├── ms.png │ ├── mt.png │ ├── mu.png │ ├── mv.png │ ├── mw.png │ ├── mx.png │ ├── my.png │ ├── mz.png │ ├── na.png │ ├── nc.png │ ├── ne.png │ ├── nf.png │ ├── ng.png │ ├── ni.png │ ├── nl.png │ ├── no.png │ ├── np.png │ ├── nr.png │ ├── nu.png │ ├── nz.png │ ├── om.png │ ├── pa.png │ ├── pe.png │ ├── pf.png │ ├── pg.png │ ├── ph.png │ ├── pk.png │ ├── pl.png │ ├── pm.png │ ├── pn.png │ ├── pr.png │ ├── ps.png │ ├── pt.png │ ├── pw.png │ ├── py.png │ ├── qa.png │ ├── re.png │ ├── ro.png │ ├── rs.png │ ├── ru.png │ ├── rw.png │ ├── sa.png │ ├── sb.png │ ├── sc.png │ ├── sd.png │ ├── se.png │ ├── sg.png │ ├── sh.png │ ├── si.png │ ├── sj.png │ ├── sk.png │ ├── sl.png │ ├── sm.png │ ├── sn.png │ ├── so.png │ ├── sr.png │ ├── ss.png │ ├── st.png │ ├── sv.png │ ├── sx.png │ ├── sy.png │ ├── sz.png │ ├── tc.png │ ├── td.png │ ├── tf.png │ ├── tg.png │ ├── th.png │ ├── tj.png │ ├── tk.png │ ├── tl.png │ ├── tm.png │ ├── tn.png │ ├── to.png │ ├── tr.png │ ├── tt.png │ ├── tv.png │ ├── tw.png │ ├── tz.png │ ├── ua.png │ ├── ug.png │ ├── um.png │ ├── us.png │ ├── uy.png │ ├── uz.png │ ├── va.png │ ├── vc.png │ ├── ve.png │ ├── vg.png │ ├── vi.png │ ├── vn.png │ ├── vu.png │ ├── wf.png │ ├── ws.png │ ├── xk.png │ ├── ye.png │ ├── yt.png │ ├── za.png │ ├── zm.png │ └── zw.png │ ├── icons │ └── .gitignore │ └── illustration │ └── .gitignore ├── build.yaml ├── codecov.yml ├── coverage_badge.svg ├── ios ├── .gitignore ├── Flutter │ ├── AppFrameworkInfo.plist │ ├── Debug.xcconfig │ └── Release.xcconfig ├── Podfile ├── Runner.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ ├── IDEWorkspaceChecks.plist │ │ │ └── WorkspaceSettings.xcsettings │ └── xcshareddata │ │ └── xcschemes │ │ ├── Runner.xcscheme │ │ ├── development.xcscheme │ │ ├── production.xcscheme │ │ └── staging.xcscheme ├── Runner.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ ├── IDEWorkspaceChecks.plist │ │ └── WorkspaceSettings.xcsettings └── Runner │ ├── AppDelegate.swift │ ├── Assets.xcassets │ ├── AppIcon-dev.appiconset │ │ ├── 100.png │ │ ├── 1024.png │ │ ├── 114.png │ │ ├── 120.png │ │ ├── 128.png │ │ ├── 144.png │ │ ├── 152.png │ │ ├── 16.png │ │ ├── 167.png │ │ ├── 172.png │ │ ├── 180.png │ │ ├── 196.png │ │ ├── 20.png │ │ ├── 216.png │ │ ├── 256.png │ │ ├── 29.png │ │ ├── 32.png │ │ ├── 40.png │ │ ├── 48.png │ │ ├── 50.png │ │ ├── 512.png │ │ ├── 55.png │ │ ├── 57.png │ │ ├── 58.png │ │ ├── 60.png │ │ ├── 64.png │ │ ├── 72.png │ │ ├── 76.png │ │ ├── 80.png │ │ ├── 87.png │ │ ├── 88.png │ │ └── Contents.json │ ├── AppIcon-stg.appiconset │ │ ├── 100.png │ │ ├── 1024.png │ │ ├── 114.png │ │ ├── 120.png │ │ ├── 128.png │ │ ├── 144.png │ │ ├── 152.png │ │ ├── 16.png │ │ ├── 167.png │ │ ├── 172.png │ │ ├── 180.png │ │ ├── 196.png │ │ ├── 20.png │ │ ├── 216.png │ │ ├── 256.png │ │ ├── 29.png │ │ ├── 32.png │ │ ├── 40.png │ │ ├── 48.png │ │ ├── 50.png │ │ ├── 512.png │ │ ├── 55.png │ │ ├── 57.png │ │ ├── 58.png │ │ ├── 60.png │ │ ├── 64.png │ │ ├── 72.png │ │ ├── 76.png │ │ ├── 80.png │ │ ├── 87.png │ │ ├── 88.png │ │ └── Contents.json │ ├── AppIcon.appiconset │ │ ├── 100.png │ │ ├── 1024.png │ │ ├── 114.png │ │ ├── 120.png │ │ ├── 128.png │ │ ├── 144.png │ │ ├── 152.png │ │ ├── 16.png │ │ ├── 167.png │ │ ├── 172.png │ │ ├── 180.png │ │ ├── 196.png │ │ ├── 20.png │ │ ├── 216.png │ │ ├── 256.png │ │ ├── 29.png │ │ ├── 32.png │ │ ├── 40.png │ │ ├── 48.png │ │ ├── 50.png │ │ ├── 512.png │ │ ├── 55.png │ │ ├── 57.png │ │ ├── 58.png │ │ ├── 60.png │ │ ├── 64.png │ │ ├── 72.png │ │ ├── 76.png │ │ ├── 80.png │ │ ├── 87.png │ │ ├── 88.png │ │ └── Contents.json │ ├── Contents.json │ └── LaunchImage.imageset │ │ ├── Contents.json │ │ ├── LaunchImage@1x.png │ │ ├── LaunchImage@2x.png │ │ ├── LaunchImage@3x.png │ │ └── README.md │ ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard │ ├── Info.plist │ └── Runner-Bridging-Header.h ├── l10n.yaml ├── lib ├── app │ ├── app.dart │ ├── config.dart │ ├── flavor.dart │ ├── locator.dart │ ├── routes.dart │ └── runner.dart ├── core │ ├── component │ │ ├── atom │ │ │ └── atom.dart │ │ ├── component.dart │ │ ├── molecule │ │ │ └── molecule.dart │ │ └── organism │ │ │ └── organism.dart │ ├── core.dart │ ├── data │ │ ├── countries_data.dart │ │ ├── data.dart │ │ ├── data_sources │ │ │ ├── cache_data_source.dart │ │ │ └── data_sources.dart │ │ ├── languages_data.dart │ │ ├── models │ │ │ ├── country.dart │ │ │ ├── country.g.dart │ │ │ ├── language.dart │ │ │ ├── language.g.dart │ │ │ ├── models.dart │ │ │ └── pagination_data.dart │ │ └── raw │ │ │ ├── countries.dart │ │ │ └── languages.dart │ ├── exceptions │ │ ├── cache_exception.dart │ │ ├── code_exception.dart │ │ ├── exceptions.dart │ │ └── server_exception.dart │ ├── extensions │ │ ├── dio_error_extension.dart │ │ ├── error_tracker_extension.dart │ │ ├── extensions.dart │ │ └── theme_extension.dart │ ├── failures │ │ ├── base.dart │ │ ├── cache_failure.dart │ │ ├── code_failure.dart │ │ ├── failures.dart │ │ └── server_failure.dart │ ├── helpers │ │ ├── app_bloc_observer.dart │ │ ├── bloc_event_transformer.dart │ │ └── helpers.dart │ ├── network │ │ ├── network.dart │ │ └── network_info.dart │ ├── pages │ │ ├── not_found_page.dart │ │ └── pages.dart │ ├── preferences │ │ ├── assets.dart │ │ ├── colors.dart │ │ ├── dimens.dart │ │ ├── preferences.dart │ │ └── themes │ │ │ ├── base_theme.dart │ │ │ ├── dark_theme.dart │ │ │ ├── enum.dart │ │ │ ├── light_theme.dart │ │ │ └── themes.dart │ ├── usecases │ │ ├── params.dart │ │ ├── usecase_interface.dart │ │ └── usecases.dart │ └── utils │ │ ├── num_parser.dart │ │ ├── string_parser.dart │ │ └── utils.dart ├── features │ ├── home │ │ ├── data │ │ │ ├── data.dart │ │ │ ├── data_sources │ │ │ │ └── data_sources.dart │ │ │ ├── models │ │ │ │ └── models.dart │ │ │ └── repositories │ │ │ │ └── repositories.dart │ │ ├── domain │ │ │ ├── domain.dart │ │ │ ├── entities │ │ │ │ └── entities.dart │ │ │ ├── repositories │ │ │ │ └── repositories.dart │ │ │ └── usecases │ │ │ │ └── usecases.dart │ │ ├── home.dart │ │ └── presentation │ │ │ ├── blocs │ │ │ └── blocs.dart │ │ │ ├── pages │ │ │ ├── index │ │ │ │ └── page.dart │ │ │ ├── main │ │ │ │ └── page.dart │ │ │ └── pages.dart │ │ │ └── presentation.dart │ └── settings │ │ ├── data │ │ ├── data.dart │ │ ├── data_sources │ │ │ ├── data_sources.dart │ │ │ └── local_data_source.dart │ │ ├── models │ │ │ └── models.dart │ │ └── repositories │ │ │ ├── repositories.dart │ │ │ └── settings_repository.dart │ │ ├── domain │ │ ├── domain.dart │ │ ├── entities │ │ │ ├── entities.dart │ │ │ ├── settings.dart │ │ │ └── settings.g.dart │ │ ├── repositories │ │ │ ├── repositories.dart │ │ │ └── settings_repository.dart │ │ └── usecases │ │ │ ├── get_language_setting_usecase.dart │ │ │ ├── get_settings_usecase.dart │ │ │ ├── get_supported_language_usecase.dart │ │ │ ├── get_theme_setting_usecase.dart │ │ │ ├── record_error_usecase.dart │ │ │ ├── save_language_setting_usecase.dart │ │ │ ├── save_settings_usecase.dart │ │ │ ├── save_theme_setting_usecase.dart │ │ │ └── usecases.dart │ │ ├── presentation │ │ ├── blocs │ │ │ ├── blocs.dart │ │ │ ├── language │ │ │ │ ├── language_bloc.dart │ │ │ │ ├── language_event.dart │ │ │ │ └── language_state.dart │ │ │ └── theme │ │ │ │ ├── theme_bloc.dart │ │ │ │ ├── theme_event.dart │ │ │ │ └── theme_state.dart │ │ ├── pages │ │ │ ├── index │ │ │ │ └── page.dart │ │ │ └── pages.dart │ │ └── presentation.dart │ │ └── settings.dart ├── l10n │ ├── arb │ │ ├── app_en.arb │ │ └── app_id.arb │ └── l10n.dart ├── main_development.dart ├── main_production.dart └── main_staging.dart ├── pubspec.lock ├── pubspec.yaml ├── test ├── app │ ├── app_test.dart │ ├── config_test.dart │ └── flavor_test.dart ├── core │ ├── component │ │ ├── atom │ │ │ └── .gitkeep │ │ ├── molecule │ │ │ └── .gitkeep │ │ └── organism │ │ │ └── .gitkeep │ ├── data │ │ ├── .gitkeep │ │ ├── countries_data_test.dart │ │ ├── languages_data_test.dart │ │ └── models │ │ │ ├── country_test.dart │ │ │ ├── language_test.dart │ │ │ └── pagination_data_test.dart │ ├── exceptions │ │ ├── cache_exception_test.dart │ │ ├── code_exception_test.dart │ │ └── server_exception_test.dart │ ├── extensions │ │ └── theme_extension_test.dart │ ├── failures │ │ ├── cache_failure_test.dart │ │ ├── code_failure_test.dart │ │ └── server_failure_test.dart │ ├── network │ │ └── network_info_test.dart │ ├── pages │ │ └── not_found_page_test.dart │ ├── preferences │ │ ├── dimens_test.dart │ │ └── themes │ │ │ └── enum_test.dart │ ├── usecases │ │ └── params_test.dart │ └── utils │ │ ├── num_parser_test.dart │ │ └── string_parser_test.dart ├── features │ └── settings │ │ ├── data │ │ ├── data_sources │ │ │ └── local_data_source_test.dart │ │ └── repositories │ │ │ └── settings_repository_test.dart │ │ ├── domain │ │ ├── entities │ │ │ └── settings_test.dart │ │ └── usecaes │ │ │ ├── get_language_setting_usecase_test.dart │ │ │ ├── get_settings_usecase_test.dart │ │ │ ├── get_supported_language_usecase_test.dart │ │ │ ├── get_theme_setting_usecase_test.dart │ │ │ ├── record_error_usecase_test.dart │ │ │ ├── save_language_setting_usecase_test.dart │ │ │ ├── save_settings_usecase_test.dart │ │ │ └── save_theme_setting_usecase_test.dart │ │ └── presentation │ │ ├── blocs │ │ ├── language_bloc_test.dart │ │ └── theme_bloc_test.dart │ │ └── pages │ │ └── index_test.dart ├── fixtures │ ├── country.json │ ├── language.json │ └── settings.json ├── helpers │ ├── helpers.dart │ ├── pump_app.dart │ └── setup_test_locator.dart └── utils │ └── utils.dart └── web ├── favicon.png ├── icons ├── Icon-192.png ├── Icon-512.png └── favicon.png ├── index.html └── manifest.json /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | # Every request must be reviewed and accepted by: 2 | 3 | * @wisnuwiry -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: [wisnuwiry] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: wisnuwiry 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | custom: "https://trakteer.id/wisnuwiry" -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 8 | 9 | ## Description 10 | 11 | 12 | 13 | ## Type of Change 14 | 15 | 16 | 17 | - [ ] ✨ New feature (non-breaking change which adds functionality) 18 | - [ ] 🛠️ Bug fix (non-breaking change which fixes an issue) 19 | - [ ] ❌ Breaking change (fix or feature that would cause existing functionality to change) 20 | - [ ] 🧹 Code refactor 21 | - [ ] ✅ Build configuration change 22 | - [ ] 📝 Documentation 23 | - [ ] 🗑️ Chore 24 | -------------------------------------------------------------------------------- /.github/workflows/main.yaml: -------------------------------------------------------------------------------- 1 | name: flutter_starter 2 | 3 | on: [pull_request, push] 4 | 5 | jobs: 6 | build: 7 | runs-on: ubuntu-latest 8 | 9 | steps: 10 | - uses: actions/checkout@v2 11 | - uses: subosito/flutter-action@v1.5.3 12 | 13 | - name: Install Dependencies 14 | run: flutter packages get 15 | 16 | - name: Format 17 | run: flutter format --set-exit-if-changed lib test 18 | 19 | - name: Analyze 20 | run: flutter analyze lib test 21 | 22 | - name: Run tests 23 | run: flutter test --no-pub --coverage --test-randomize-ordering-seed random 24 | 25 | - name: Check Code Coverage 26 | uses: VeryGoodOpenSource/very_good_coverage@v1.2.0 27 | with: 28 | path: "./coverage/lcov.info" 29 | min_coverage: 85 30 | exclude: "**/*_observer.dart **/change.dart **/*g.dart **/*gr.dart **/*.freezed.dart" 31 | 32 | - name: Upload Report Codecov 33 | uses: codecov/codecov-action@v1 34 | with: 35 | token: ${{ secrets.CODECOV_TOKEN }} 36 | -------------------------------------------------------------------------------- /.gitlab-ci.yml: -------------------------------------------------------------------------------- 1 | image: cirrusci/flutter 2 | 3 | stages: 4 | - testing 5 | 6 | get_dependency: 7 | stage: testing 8 | script: 9 | - flutter pub get 10 | 11 | analyze: 12 | stage: testing 13 | script: 14 | - flutter pub get 15 | - flutter analyze lib test 16 | 17 | format: 18 | stage: testing 19 | script: 20 | - flutter pub get 21 | - flutter format --set-exit-if-changed lib test 22 | 23 | unit_test: 24 | stage: testing 25 | script: 26 | - flutter pub get 27 | - flutter test --no-pub --coverage --test-randomize-ordering-seed random 28 | - lcov --remove coverage/lcov.info 'lib/app/routes.gr.dart' -o coverage/lcov.info 29 | -------------------------------------------------------------------------------- /.idea/runConfigurations/development.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /.idea/runConfigurations/production.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /.idea/runConfigurations/staging.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /.metadata: -------------------------------------------------------------------------------- 1 | # This file tracks properties of this Flutter project. 2 | # Used by Flutter tool to assess capabilities and perform upgrades etc. 3 | # 4 | # This file should be version controlled and should not be manually edited. 5 | 6 | version: 7 | revision: 9b2d32b605630f28625709ebd9d78ab3016b2bf6 8 | channel: stable 9 | 10 | project_type: app 11 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "name": "Launch development", 9 | "request": "launch", 10 | "type": "dart", 11 | "program": "lib/main_development.dart", 12 | "args": [ 13 | "--flavor", 14 | "development", 15 | "--target", 16 | "lib/main_development.dart" 17 | ] 18 | }, 19 | { 20 | "name": "Launch staging", 21 | "request": "launch", 22 | "type": "dart", 23 | "program": "lib/main_staging.dart", 24 | "args": [ 25 | "--flavor", 26 | "staging", 27 | "--target", 28 | "lib/main_staging.dart" 29 | ] 30 | }, 31 | { 32 | "name": "Launch production", 33 | "request": "launch", 34 | "type": "dart", 35 | "program": "lib/main_production.dart", 36 | "args": [ 37 | "--flavor", 38 | "production", 39 | "--target", 40 | "lib/main_production.dart" 41 | ] 42 | } 43 | ] 44 | } 45 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Wisnu G. Saputra 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: package:very_good_analysis/analysis_options.2.4.0.yaml 2 | 3 | analyzer: 4 | exclude: [ 5 | build/**, 6 | lib/**.freezed.dart, 7 | lib/**.g.dart, 8 | lib/**.gr.dart 9 | ] 10 | 11 | strong-mode: 12 | implicit-casts: false 13 | implicit-dynamic: false 14 | 15 | errors: 16 | invalid_annotation_target: ignore 17 | 18 | linter: 19 | rules: 20 | public_member_api_docs: false 21 | one_member_abstracts: false 22 | library_private_types_in_public_api: false 23 | argument_type_not_assignable: false 24 | implicit_dynamic_method: false 25 | flutter_style_todos: false 26 | -------------------------------------------------------------------------------- /android/.gitignore: -------------------------------------------------------------------------------- 1 | gradle-wrapper.jar 2 | /.gradle 3 | /captures/ 4 | /gradlew 5 | /gradlew.bat 6 | /local.properties 7 | GeneratedPluginRegistrant.java 8 | 9 | # Remember to never publicly share your keystore. 10 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app 11 | key.properties 12 | -------------------------------------------------------------------------------- /android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/app/src/development/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/app/src/main/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/android/app/src/main/ic_launcher-playstore.png -------------------------------------------------------------------------------- /android/app/src/main/kotlin/space/wisnuwiry/flutter_starter/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package space.wisnuwiry.flutter_starter 2 | 3 | import io.flutter.embedding.android.FlutterActivity 4 | 5 | class MainActivity: FlutterActivity() { 6 | } 7 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-v21/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/values-night/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #8DC53F 4 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/app/src/staging/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | ext.kotlin_version = '1.4.32' 3 | repositories { 4 | google() 5 | mavenCentral() 6 | } 7 | 8 | dependencies { 9 | classpath 'com.android.tools.build:gradle:4.1.0' 10 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 11 | } 12 | } 13 | 14 | allprojects { 15 | repositories { 16 | google() 17 | mavenCentral() 18 | } 19 | } 20 | 21 | rootProject.buildDir = '../build' 22 | subprojects { 23 | project.buildDir = "${rootProject.buildDir}/${project.name}" 24 | } 25 | subprojects { 26 | project.evaluationDependsOn(':app') 27 | } 28 | 29 | task clean(type: Delete) { 30 | delete rootProject.buildDir 31 | } 32 | -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1024M 2 | android.useAndroidX=true 3 | android.enableJetifier=true 4 | -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Fri Jun 23 08:50:38 CEST 2017 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip 7 | -------------------------------------------------------------------------------- /android/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | 3 | def localPropertiesFile = new File(rootProject.projectDir, "local.properties") 4 | def properties = new Properties() 5 | 6 | assert localPropertiesFile.exists() 7 | localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } 8 | 9 | def flutterSdkPath = properties.getProperty("flutter.sdk") 10 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties" 11 | apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" 12 | -------------------------------------------------------------------------------- /assets/.env.example: -------------------------------------------------------------------------------- 1 | BASE_URL_PROD = 2 | BASE_URL_STG = 3 | BASE_URL_DEV = -------------------------------------------------------------------------------- /assets/fonts/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/fonts/.gitkeep -------------------------------------------------------------------------------- /assets/images/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/.gitkeep -------------------------------------------------------------------------------- /assets/images/bitmap/not_found.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/bitmap/not_found.webp -------------------------------------------------------------------------------- /assets/images/flags/ad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/ad.png -------------------------------------------------------------------------------- /assets/images/flags/ae.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/ae.png -------------------------------------------------------------------------------- /assets/images/flags/af.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/af.png -------------------------------------------------------------------------------- /assets/images/flags/ag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/ag.png -------------------------------------------------------------------------------- /assets/images/flags/ai.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/ai.png -------------------------------------------------------------------------------- /assets/images/flags/al.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/al.png -------------------------------------------------------------------------------- /assets/images/flags/am.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/am.png -------------------------------------------------------------------------------- /assets/images/flags/an.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/an.png -------------------------------------------------------------------------------- /assets/images/flags/ao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/ao.png -------------------------------------------------------------------------------- /assets/images/flags/aq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/aq.png -------------------------------------------------------------------------------- /assets/images/flags/ar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/ar.png -------------------------------------------------------------------------------- /assets/images/flags/as.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/as.png -------------------------------------------------------------------------------- /assets/images/flags/at.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/at.png -------------------------------------------------------------------------------- /assets/images/flags/au.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/au.png -------------------------------------------------------------------------------- /assets/images/flags/aw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/aw.png -------------------------------------------------------------------------------- /assets/images/flags/ax.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/ax.png -------------------------------------------------------------------------------- /assets/images/flags/az.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/az.png -------------------------------------------------------------------------------- /assets/images/flags/ba.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/ba.png -------------------------------------------------------------------------------- /assets/images/flags/bb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/bb.png -------------------------------------------------------------------------------- /assets/images/flags/bd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/bd.png -------------------------------------------------------------------------------- /assets/images/flags/be.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/be.png -------------------------------------------------------------------------------- /assets/images/flags/bf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/bf.png -------------------------------------------------------------------------------- /assets/images/flags/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/bg.png -------------------------------------------------------------------------------- /assets/images/flags/bh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/bh.png -------------------------------------------------------------------------------- /assets/images/flags/bi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/bi.png -------------------------------------------------------------------------------- /assets/images/flags/bj.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/bj.png -------------------------------------------------------------------------------- /assets/images/flags/bl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/bl.png -------------------------------------------------------------------------------- /assets/images/flags/bm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/bm.png -------------------------------------------------------------------------------- /assets/images/flags/bn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/bn.png -------------------------------------------------------------------------------- /assets/images/flags/bo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/bo.png -------------------------------------------------------------------------------- /assets/images/flags/bq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/bq.png -------------------------------------------------------------------------------- /assets/images/flags/br.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/br.png -------------------------------------------------------------------------------- /assets/images/flags/bs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/bs.png -------------------------------------------------------------------------------- /assets/images/flags/bt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/bt.png -------------------------------------------------------------------------------- /assets/images/flags/bv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/bv.png -------------------------------------------------------------------------------- /assets/images/flags/bw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/bw.png -------------------------------------------------------------------------------- /assets/images/flags/by.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/by.png -------------------------------------------------------------------------------- /assets/images/flags/bz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/bz.png -------------------------------------------------------------------------------- /assets/images/flags/ca.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/ca.png -------------------------------------------------------------------------------- /assets/images/flags/cc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/cc.png -------------------------------------------------------------------------------- /assets/images/flags/cd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/cd.png -------------------------------------------------------------------------------- /assets/images/flags/cf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/cf.png -------------------------------------------------------------------------------- /assets/images/flags/cg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/cg.png -------------------------------------------------------------------------------- /assets/images/flags/ch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/ch.png -------------------------------------------------------------------------------- /assets/images/flags/ci.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/ci.png -------------------------------------------------------------------------------- /assets/images/flags/ck.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/ck.png -------------------------------------------------------------------------------- /assets/images/flags/cl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/cl.png -------------------------------------------------------------------------------- /assets/images/flags/cm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/cm.png -------------------------------------------------------------------------------- /assets/images/flags/cn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/cn.png -------------------------------------------------------------------------------- /assets/images/flags/co.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/co.png -------------------------------------------------------------------------------- /assets/images/flags/cr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/cr.png -------------------------------------------------------------------------------- /assets/images/flags/cu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/cu.png -------------------------------------------------------------------------------- /assets/images/flags/cv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/cv.png -------------------------------------------------------------------------------- /assets/images/flags/cw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/cw.png -------------------------------------------------------------------------------- /assets/images/flags/cx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/cx.png -------------------------------------------------------------------------------- /assets/images/flags/cy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/cy.png -------------------------------------------------------------------------------- /assets/images/flags/cz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/cz.png -------------------------------------------------------------------------------- /assets/images/flags/de.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/de.png -------------------------------------------------------------------------------- /assets/images/flags/dj.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/dj.png -------------------------------------------------------------------------------- /assets/images/flags/dk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/dk.png -------------------------------------------------------------------------------- /assets/images/flags/dm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/dm.png -------------------------------------------------------------------------------- /assets/images/flags/do.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/do.png -------------------------------------------------------------------------------- /assets/images/flags/dz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/dz.png -------------------------------------------------------------------------------- /assets/images/flags/ec.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/ec.png -------------------------------------------------------------------------------- /assets/images/flags/ee.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/ee.png -------------------------------------------------------------------------------- /assets/images/flags/eg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/eg.png -------------------------------------------------------------------------------- /assets/images/flags/eh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/eh.png -------------------------------------------------------------------------------- /assets/images/flags/en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/en.png -------------------------------------------------------------------------------- /assets/images/flags/er.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/er.png -------------------------------------------------------------------------------- /assets/images/flags/es.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/es.png -------------------------------------------------------------------------------- /assets/images/flags/et.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/et.png -------------------------------------------------------------------------------- /assets/images/flags/eu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/eu.png -------------------------------------------------------------------------------- /assets/images/flags/fi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/fi.png -------------------------------------------------------------------------------- /assets/images/flags/fj.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/fj.png -------------------------------------------------------------------------------- /assets/images/flags/fk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/fk.png -------------------------------------------------------------------------------- /assets/images/flags/fm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/fm.png -------------------------------------------------------------------------------- /assets/images/flags/fo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/fo.png -------------------------------------------------------------------------------- /assets/images/flags/fr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/fr.png -------------------------------------------------------------------------------- /assets/images/flags/ga.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/ga.png -------------------------------------------------------------------------------- /assets/images/flags/gb-eng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/gb-eng.png -------------------------------------------------------------------------------- /assets/images/flags/gb-nir.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/gb-nir.png -------------------------------------------------------------------------------- /assets/images/flags/gb-sct.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/gb-sct.png -------------------------------------------------------------------------------- /assets/images/flags/gb-wls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/gb-wls.png -------------------------------------------------------------------------------- /assets/images/flags/gb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/gb.png -------------------------------------------------------------------------------- /assets/images/flags/gd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/gd.png -------------------------------------------------------------------------------- /assets/images/flags/ge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/ge.png -------------------------------------------------------------------------------- /assets/images/flags/gf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/gf.png -------------------------------------------------------------------------------- /assets/images/flags/gg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/gg.png -------------------------------------------------------------------------------- /assets/images/flags/gh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/gh.png -------------------------------------------------------------------------------- /assets/images/flags/gi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/gi.png -------------------------------------------------------------------------------- /assets/images/flags/gl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/gl.png -------------------------------------------------------------------------------- /assets/images/flags/gm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/gm.png -------------------------------------------------------------------------------- /assets/images/flags/gn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/gn.png -------------------------------------------------------------------------------- /assets/images/flags/gp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/gp.png -------------------------------------------------------------------------------- /assets/images/flags/gq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/gq.png -------------------------------------------------------------------------------- /assets/images/flags/gr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/gr.png -------------------------------------------------------------------------------- /assets/images/flags/gs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/gs.png -------------------------------------------------------------------------------- /assets/images/flags/gt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/gt.png -------------------------------------------------------------------------------- /assets/images/flags/gu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/gu.png -------------------------------------------------------------------------------- /assets/images/flags/gw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/gw.png -------------------------------------------------------------------------------- /assets/images/flags/gy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/gy.png -------------------------------------------------------------------------------- /assets/images/flags/hk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/hk.png -------------------------------------------------------------------------------- /assets/images/flags/hm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/hm.png -------------------------------------------------------------------------------- /assets/images/flags/hn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/hn.png -------------------------------------------------------------------------------- /assets/images/flags/hr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/hr.png -------------------------------------------------------------------------------- /assets/images/flags/ht.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/ht.png -------------------------------------------------------------------------------- /assets/images/flags/hu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/hu.png -------------------------------------------------------------------------------- /assets/images/flags/id.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/id.png -------------------------------------------------------------------------------- /assets/images/flags/ie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/ie.png -------------------------------------------------------------------------------- /assets/images/flags/il.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/il.png -------------------------------------------------------------------------------- /assets/images/flags/im.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/im.png -------------------------------------------------------------------------------- /assets/images/flags/in.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/in.png -------------------------------------------------------------------------------- /assets/images/flags/io.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/io.png -------------------------------------------------------------------------------- /assets/images/flags/iq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/iq.png -------------------------------------------------------------------------------- /assets/images/flags/ir.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/ir.png -------------------------------------------------------------------------------- /assets/images/flags/is.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/is.png -------------------------------------------------------------------------------- /assets/images/flags/it.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/it.png -------------------------------------------------------------------------------- /assets/images/flags/je.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/je.png -------------------------------------------------------------------------------- /assets/images/flags/jm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/jm.png -------------------------------------------------------------------------------- /assets/images/flags/jo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/jo.png -------------------------------------------------------------------------------- /assets/images/flags/jp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/jp.png -------------------------------------------------------------------------------- /assets/images/flags/ke.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/ke.png -------------------------------------------------------------------------------- /assets/images/flags/kg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/kg.png -------------------------------------------------------------------------------- /assets/images/flags/kh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/kh.png -------------------------------------------------------------------------------- /assets/images/flags/ki.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/ki.png -------------------------------------------------------------------------------- /assets/images/flags/km.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/km.png -------------------------------------------------------------------------------- /assets/images/flags/kn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/kn.png -------------------------------------------------------------------------------- /assets/images/flags/kp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/kp.png -------------------------------------------------------------------------------- /assets/images/flags/kr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/kr.png -------------------------------------------------------------------------------- /assets/images/flags/kw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/kw.png -------------------------------------------------------------------------------- /assets/images/flags/ky.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/ky.png -------------------------------------------------------------------------------- /assets/images/flags/kz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/kz.png -------------------------------------------------------------------------------- /assets/images/flags/la.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/la.png -------------------------------------------------------------------------------- /assets/images/flags/lb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/lb.png -------------------------------------------------------------------------------- /assets/images/flags/lc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/lc.png -------------------------------------------------------------------------------- /assets/images/flags/li.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/li.png -------------------------------------------------------------------------------- /assets/images/flags/lk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/lk.png -------------------------------------------------------------------------------- /assets/images/flags/lr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/lr.png -------------------------------------------------------------------------------- /assets/images/flags/ls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/ls.png -------------------------------------------------------------------------------- /assets/images/flags/lt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/lt.png -------------------------------------------------------------------------------- /assets/images/flags/lu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/lu.png -------------------------------------------------------------------------------- /assets/images/flags/lv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/lv.png -------------------------------------------------------------------------------- /assets/images/flags/ly.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/ly.png -------------------------------------------------------------------------------- /assets/images/flags/ma.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/ma.png -------------------------------------------------------------------------------- /assets/images/flags/mc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/mc.png -------------------------------------------------------------------------------- /assets/images/flags/md.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/md.png -------------------------------------------------------------------------------- /assets/images/flags/me.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/me.png -------------------------------------------------------------------------------- /assets/images/flags/mf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/mf.png -------------------------------------------------------------------------------- /assets/images/flags/mg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/mg.png -------------------------------------------------------------------------------- /assets/images/flags/mh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/mh.png -------------------------------------------------------------------------------- /assets/images/flags/mk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/mk.png -------------------------------------------------------------------------------- /assets/images/flags/ml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/ml.png -------------------------------------------------------------------------------- /assets/images/flags/mm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/mm.png -------------------------------------------------------------------------------- /assets/images/flags/mn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/mn.png -------------------------------------------------------------------------------- /assets/images/flags/mo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/mo.png -------------------------------------------------------------------------------- /assets/images/flags/mp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/mp.png -------------------------------------------------------------------------------- /assets/images/flags/mq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/mq.png -------------------------------------------------------------------------------- /assets/images/flags/mr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/mr.png -------------------------------------------------------------------------------- /assets/images/flags/ms.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/ms.png -------------------------------------------------------------------------------- /assets/images/flags/mt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/mt.png -------------------------------------------------------------------------------- /assets/images/flags/mu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/mu.png -------------------------------------------------------------------------------- /assets/images/flags/mv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/mv.png -------------------------------------------------------------------------------- /assets/images/flags/mw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/mw.png -------------------------------------------------------------------------------- /assets/images/flags/mx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/mx.png -------------------------------------------------------------------------------- /assets/images/flags/my.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/my.png -------------------------------------------------------------------------------- /assets/images/flags/mz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/mz.png -------------------------------------------------------------------------------- /assets/images/flags/na.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/na.png -------------------------------------------------------------------------------- /assets/images/flags/nc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/nc.png -------------------------------------------------------------------------------- /assets/images/flags/ne.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/ne.png -------------------------------------------------------------------------------- /assets/images/flags/nf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/nf.png -------------------------------------------------------------------------------- /assets/images/flags/ng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/ng.png -------------------------------------------------------------------------------- /assets/images/flags/ni.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/ni.png -------------------------------------------------------------------------------- /assets/images/flags/nl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/nl.png -------------------------------------------------------------------------------- /assets/images/flags/no.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/no.png -------------------------------------------------------------------------------- /assets/images/flags/np.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/np.png -------------------------------------------------------------------------------- /assets/images/flags/nr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/nr.png -------------------------------------------------------------------------------- /assets/images/flags/nu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/nu.png -------------------------------------------------------------------------------- /assets/images/flags/nz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/nz.png -------------------------------------------------------------------------------- /assets/images/flags/om.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/om.png -------------------------------------------------------------------------------- /assets/images/flags/pa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/pa.png -------------------------------------------------------------------------------- /assets/images/flags/pe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/pe.png -------------------------------------------------------------------------------- /assets/images/flags/pf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/pf.png -------------------------------------------------------------------------------- /assets/images/flags/pg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/pg.png -------------------------------------------------------------------------------- /assets/images/flags/ph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/ph.png -------------------------------------------------------------------------------- /assets/images/flags/pk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/pk.png -------------------------------------------------------------------------------- /assets/images/flags/pl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/pl.png -------------------------------------------------------------------------------- /assets/images/flags/pm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/pm.png -------------------------------------------------------------------------------- /assets/images/flags/pn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/pn.png -------------------------------------------------------------------------------- /assets/images/flags/pr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/pr.png -------------------------------------------------------------------------------- /assets/images/flags/ps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/ps.png -------------------------------------------------------------------------------- /assets/images/flags/pt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/pt.png -------------------------------------------------------------------------------- /assets/images/flags/pw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/pw.png -------------------------------------------------------------------------------- /assets/images/flags/py.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/py.png -------------------------------------------------------------------------------- /assets/images/flags/qa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/qa.png -------------------------------------------------------------------------------- /assets/images/flags/re.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/re.png -------------------------------------------------------------------------------- /assets/images/flags/ro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/ro.png -------------------------------------------------------------------------------- /assets/images/flags/rs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/rs.png -------------------------------------------------------------------------------- /assets/images/flags/ru.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/ru.png -------------------------------------------------------------------------------- /assets/images/flags/rw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/rw.png -------------------------------------------------------------------------------- /assets/images/flags/sa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/sa.png -------------------------------------------------------------------------------- /assets/images/flags/sb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/sb.png -------------------------------------------------------------------------------- /assets/images/flags/sc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/sc.png -------------------------------------------------------------------------------- /assets/images/flags/sd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/sd.png -------------------------------------------------------------------------------- /assets/images/flags/se.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/se.png -------------------------------------------------------------------------------- /assets/images/flags/sg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/sg.png -------------------------------------------------------------------------------- /assets/images/flags/sh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/sh.png -------------------------------------------------------------------------------- /assets/images/flags/si.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/si.png -------------------------------------------------------------------------------- /assets/images/flags/sj.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/sj.png -------------------------------------------------------------------------------- /assets/images/flags/sk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/sk.png -------------------------------------------------------------------------------- /assets/images/flags/sl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/sl.png -------------------------------------------------------------------------------- /assets/images/flags/sm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/sm.png -------------------------------------------------------------------------------- /assets/images/flags/sn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/sn.png -------------------------------------------------------------------------------- /assets/images/flags/so.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/so.png -------------------------------------------------------------------------------- /assets/images/flags/sr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/sr.png -------------------------------------------------------------------------------- /assets/images/flags/ss.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/ss.png -------------------------------------------------------------------------------- /assets/images/flags/st.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/st.png -------------------------------------------------------------------------------- /assets/images/flags/sv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/sv.png -------------------------------------------------------------------------------- /assets/images/flags/sx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/sx.png -------------------------------------------------------------------------------- /assets/images/flags/sy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/sy.png -------------------------------------------------------------------------------- /assets/images/flags/sz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/sz.png -------------------------------------------------------------------------------- /assets/images/flags/tc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/tc.png -------------------------------------------------------------------------------- /assets/images/flags/td.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/td.png -------------------------------------------------------------------------------- /assets/images/flags/tf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/tf.png -------------------------------------------------------------------------------- /assets/images/flags/tg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/tg.png -------------------------------------------------------------------------------- /assets/images/flags/th.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/th.png -------------------------------------------------------------------------------- /assets/images/flags/tj.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/tj.png -------------------------------------------------------------------------------- /assets/images/flags/tk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/tk.png -------------------------------------------------------------------------------- /assets/images/flags/tl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/tl.png -------------------------------------------------------------------------------- /assets/images/flags/tm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/tm.png -------------------------------------------------------------------------------- /assets/images/flags/tn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/tn.png -------------------------------------------------------------------------------- /assets/images/flags/to.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/to.png -------------------------------------------------------------------------------- /assets/images/flags/tr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/tr.png -------------------------------------------------------------------------------- /assets/images/flags/tt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/tt.png -------------------------------------------------------------------------------- /assets/images/flags/tv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/tv.png -------------------------------------------------------------------------------- /assets/images/flags/tw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/tw.png -------------------------------------------------------------------------------- /assets/images/flags/tz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/tz.png -------------------------------------------------------------------------------- /assets/images/flags/ua.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/ua.png -------------------------------------------------------------------------------- /assets/images/flags/ug.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/ug.png -------------------------------------------------------------------------------- /assets/images/flags/um.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/um.png -------------------------------------------------------------------------------- /assets/images/flags/us.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/us.png -------------------------------------------------------------------------------- /assets/images/flags/uy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/uy.png -------------------------------------------------------------------------------- /assets/images/flags/uz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/uz.png -------------------------------------------------------------------------------- /assets/images/flags/va.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/va.png -------------------------------------------------------------------------------- /assets/images/flags/vc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/vc.png -------------------------------------------------------------------------------- /assets/images/flags/ve.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/ve.png -------------------------------------------------------------------------------- /assets/images/flags/vg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/vg.png -------------------------------------------------------------------------------- /assets/images/flags/vi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/vi.png -------------------------------------------------------------------------------- /assets/images/flags/vn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/vn.png -------------------------------------------------------------------------------- /assets/images/flags/vu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/vu.png -------------------------------------------------------------------------------- /assets/images/flags/wf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/wf.png -------------------------------------------------------------------------------- /assets/images/flags/ws.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/ws.png -------------------------------------------------------------------------------- /assets/images/flags/xk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/xk.png -------------------------------------------------------------------------------- /assets/images/flags/ye.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/ye.png -------------------------------------------------------------------------------- /assets/images/flags/yt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/yt.png -------------------------------------------------------------------------------- /assets/images/flags/za.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/za.png -------------------------------------------------------------------------------- /assets/images/flags/zm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/zm.png -------------------------------------------------------------------------------- /assets/images/flags/zw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/flags/zw.png -------------------------------------------------------------------------------- /assets/images/icons/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/icons/.gitignore -------------------------------------------------------------------------------- /assets/images/illustration/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/assets/images/illustration/.gitignore -------------------------------------------------------------------------------- /build.yaml: -------------------------------------------------------------------------------- 1 | targets: 2 | $default: 3 | builders: 4 | json_serializable: 5 | options: 6 | # Options configure how source code is generated for every 7 | # `@JsonSerializable`-annotated class in the package. 8 | # 9 | # The default value for each is listed. 10 | any_map: false 11 | checked: false 12 | constructor: "" 13 | create_factory: true 14 | create_to_json: true 15 | disallow_unrecognized_keys: false 16 | explicit_to_json: true 17 | field_rename: none 18 | generic_argument_factories: false 19 | ignore_unannotated: false 20 | include_if_null: true -------------------------------------------------------------------------------- /codecov.yml: -------------------------------------------------------------------------------- 1 | coverage: 2 | status: 3 | project: 4 | default: 5 | target: 90% # the required coverage value 6 | threshold: 1% # the leniency in hitting the target -------------------------------------------------------------------------------- /coverage_badge.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | coverage 16 | coverage 17 | 100% 18 | 100% 19 | 20 | -------------------------------------------------------------------------------- /ios/.gitignore: -------------------------------------------------------------------------------- 1 | *.mode1v3 2 | *.mode2v3 3 | *.moved-aside 4 | *.pbxuser 5 | *.perspectivev3 6 | **/*sync/ 7 | .sconsign.dblite 8 | .tags* 9 | **/.vagrant/ 10 | **/DerivedData/ 11 | Icon? 12 | **/Pods/ 13 | **/.symlinks/ 14 | profile 15 | xcuserdata 16 | **/.generated/ 17 | Flutter/App.framework 18 | Flutter/Flutter.framework 19 | Flutter/Flutter.podspec 20 | Flutter/Generated.xcconfig 21 | Flutter/app.flx 22 | Flutter/app.zip 23 | Flutter/flutter_assets/ 24 | Flutter/flutter_export_environment.sh 25 | ServiceDefinitions.json 26 | Runner/GeneratedPluginRegistrant.* 27 | 28 | # Exceptions to above rules. 29 | !default.mode1v3 30 | !default.mode2v3 31 | !default.pbxuser 32 | !default.perspectivev3 33 | -------------------------------------------------------------------------------- /ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | App 9 | CFBundleIdentifier 10 | io.flutter.flutter.app 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | App 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | MinimumOSVersion 24 | 9.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import Flutter 3 | 4 | @UIApplicationMain 5 | @objc class AppDelegate: FlutterAppDelegate { 6 | override func application( 7 | _ application: UIApplication, 8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? 9 | ) -> Bool { 10 | GeneratedPluginRegistrant.register(with: self) 11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/100.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/1024.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/114.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/120.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/128.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/144.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/152.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/16.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/167.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/172.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/172.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/180.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/196.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/196.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/20.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/216.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/216.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/256.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/29.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/32.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/40.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/48.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/50.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/512.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/55.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/55.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/57.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/58.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/60.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/64.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/72.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/76.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/80.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/87.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/88.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/88.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/100.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/1024.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/114.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/120.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/128.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/144.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/152.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/16.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/167.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/172.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/172.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/180.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/196.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/196.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/20.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/216.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/216.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/256.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/29.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/32.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/40.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/48.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/50.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/512.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/55.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/55.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/57.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/58.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/60.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/64.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/72.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/76.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/80.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/87.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/88.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/88.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon.appiconset/100.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon.appiconset/114.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon.appiconset/128.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon.appiconset/144.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon.appiconset/152.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon.appiconset/16.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon.appiconset/167.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/172.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon.appiconset/172.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/196.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon.appiconset/196.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon.appiconset/20.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/216.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon.appiconset/216.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon.appiconset/256.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon.appiconset/29.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon.appiconset/32.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon.appiconset/40.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon.appiconset/48.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon.appiconset/50.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon.appiconset/512.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/55.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon.appiconset/55.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon.appiconset/57.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon.appiconset/58.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon.appiconset/64.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon.appiconset/72.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon.appiconset/76.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon.appiconset/80.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/88.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/AppIcon.appiconset/88.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "LaunchImage@1x.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "LaunchImage@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "LaunchImage@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md: -------------------------------------------------------------------------------- 1 | # Launch Screen Assets 2 | 3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory. 4 | 5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. -------------------------------------------------------------------------------- /ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" 2 | -------------------------------------------------------------------------------- /l10n.yaml: -------------------------------------------------------------------------------- 1 | arb-dir: lib/l10n/arb 2 | template-arb-file: app_en.arb 3 | output-localization-file: app_localizations.dart 4 | -------------------------------------------------------------------------------- /lib/app/flavor.dart: -------------------------------------------------------------------------------- 1 | enum Flavor { dev, staging, prod } 2 | 3 | class F { 4 | static late Flavor flavor; 5 | } 6 | -------------------------------------------------------------------------------- /lib/app/routes.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/foundation.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:flutter_starter/features/home/home.dart'; 4 | import 'package:flutter_starter/features/settings/settings.dart'; 5 | import 'package:go_router/go_router.dart'; 6 | 7 | class AppRouter { 8 | const AppRouter._(); 9 | 10 | static final navigatorKey = GlobalKey(); 11 | 12 | static GoRouter router = GoRouter( 13 | routes: [ 14 | // Home Module 15 | GoRoute( 16 | path: '/', 17 | builder: (context, state) => const MainPage(), 18 | ), 19 | 20 | // Settings Module 21 | GoRoute( 22 | path: '/settings', 23 | builder: (context, state) => const SettingsPage(), 24 | ), 25 | ], 26 | errorBuilder: (context, state) { 27 | return Text('Error Page : ${state.error}'); 28 | }, 29 | urlPathStrategy: UrlPathStrategy.path, 30 | debugLogDiagnostics: kDebugMode, 31 | ); 32 | } 33 | -------------------------------------------------------------------------------- /lib/app/runner.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter_bloc/flutter_bloc.dart'; 5 | import 'package:flutter_starter/app/app.dart'; 6 | import 'package:flutter_starter/core/core.dart'; 7 | 8 | void runnerApp() { 9 | Bloc.observer = AppBlocObserver(); 10 | 11 | runZonedGuarded( 12 | () => runApp(const App()), 13 | (error, stackTrace) => error.recordError(stackTrace: stackTrace), 14 | ); 15 | } 16 | -------------------------------------------------------------------------------- /lib/core/component/atom/atom.dart: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /lib/core/component/component.dart: -------------------------------------------------------------------------------- 1 | export 'atom/atom.dart'; 2 | export 'molecule/molecule.dart'; 3 | export 'organism/organism.dart'; 4 | -------------------------------------------------------------------------------- /lib/core/component/molecule/molecule.dart: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /lib/core/component/organism/organism.dart: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /lib/core/core.dart: -------------------------------------------------------------------------------- 1 | export 'component/component.dart'; 2 | export 'data/data.dart'; 3 | export 'exceptions/exceptions.dart'; 4 | export 'extensions/extensions.dart'; 5 | export 'failures/failures.dart'; 6 | export 'helpers/helpers.dart'; 7 | export 'network/network.dart'; 8 | export 'pages/pages.dart'; 9 | export 'preferences/preferences.dart'; 10 | export 'usecases/usecases.dart'; 11 | export 'utils/utils.dart'; 12 | -------------------------------------------------------------------------------- /lib/core/data/countries_data.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_starter/core/core.dart'; 2 | import 'package:flutter_starter/core/data/raw/countries.dart'; 3 | 4 | class CountriesData { 5 | static List data = _dataFromMap(); 6 | 7 | static List _dataFromMap() => countriesRawData 8 | .map( 9 | (e) => Country.fromJson(e).copyWith( 10 | flag: 'assets/images/flags/${e['code'].toString().toLowerCase()}.png', 11 | ), 12 | ) 13 | .toList(); 14 | } 15 | -------------------------------------------------------------------------------- /lib/core/data/data.dart: -------------------------------------------------------------------------------- 1 | export 'countries_data.dart'; 2 | export 'data_sources/data_sources.dart'; 3 | export 'languages_data.dart'; 4 | export 'models/models.dart'; 5 | -------------------------------------------------------------------------------- /lib/core/data/data_sources/cache_data_source.dart: -------------------------------------------------------------------------------- 1 | /// Interface/Abstract class defining methods for the caching DataSource. 2 | /// This is to be implemented by the cache layer, 3 | /// using this interface as a way of communicating. 4 | /// 5 | abstract class CacheDataSource { 6 | /// Method to save cache data 7 | Future saveCache(T data); 8 | 9 | /// Get main data in local storage 10 | Future getData(); 11 | 12 | // Get status cache 13 | Future isCached(); 14 | 15 | /// Clear cache from storage 16 | Future clearCache(); 17 | 18 | /// Cache key, must be unique 19 | late String cacheKey; 20 | } 21 | 22 | abstract class ExpiryCacheDataSource { 23 | /// Get status cache is expired or not 24 | Future isExpired(); 25 | 26 | /// Set expired date cache 27 | Future setExpired(DateTime date); 28 | } 29 | -------------------------------------------------------------------------------- /lib/core/data/data_sources/data_sources.dart: -------------------------------------------------------------------------------- 1 | export 'cache_data_source.dart'; 2 | -------------------------------------------------------------------------------- /lib/core/data/languages_data.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_starter/core/core.dart'; 2 | import 'package:flutter_starter/core/data/raw/languages.dart'; 3 | 4 | class LanguagesData { 5 | static List data = _dataFromMap(); 6 | 7 | static List _dataFromMap() => 8 | languagesRawData.map(Language.fromJson).toList(); 9 | } 10 | -------------------------------------------------------------------------------- /lib/core/data/models/country.dart: -------------------------------------------------------------------------------- 1 | import 'package:equatable/equatable.dart'; 2 | import 'package:flutter_starter/core/core.dart'; 3 | import 'package:json_annotation/json_annotation.dart'; 4 | 5 | part 'country.g.dart'; 6 | 7 | @JsonSerializable() 8 | class Country extends Equatable { 9 | const Country({ 10 | required this.dialCode, 11 | required this.code, 12 | required this.flag, 13 | required this.name, 14 | }); 15 | 16 | factory Country.fromJson(Map json) => 17 | _$CountryFromJson(json); 18 | 19 | @JsonKey(name: 'dial_code', fromJson: StringParser.parse) 20 | final String dialCode; 21 | 22 | @JsonKey(fromJson: StringParser.parse) 23 | final String code; 24 | 25 | @JsonKey(fromJson: StringParser.parse) 26 | final String flag; 27 | 28 | @JsonKey(fromJson: StringParser.parse) 29 | final String name; 30 | 31 | Map toJson() => _$CountryToJson(this); 32 | 33 | Country copyWith({ 34 | String? dialCode, 35 | String? code, 36 | String? flag, 37 | String? name, 38 | }) { 39 | return Country( 40 | dialCode: dialCode ?? this.dialCode, 41 | code: code ?? this.code, 42 | flag: flag ?? this.flag, 43 | name: name ?? this.name, 44 | ); 45 | } 46 | 47 | @override 48 | List get props => [dialCode, code, flag, name]; 49 | } 50 | -------------------------------------------------------------------------------- /lib/core/data/models/country.g.dart: -------------------------------------------------------------------------------- 1 | // GENERATED CODE - DO NOT MODIFY BY HAND 2 | 3 | part of 'country.dart'; 4 | 5 | // ************************************************************************** 6 | // JsonSerializableGenerator 7 | // ************************************************************************** 8 | 9 | Country _$CountryFromJson(Map json) => Country( 10 | dialCode: StringParser.parse(json['dial_code']), 11 | code: StringParser.parse(json['code']), 12 | flag: StringParser.parse(json['flag']), 13 | name: StringParser.parse(json['name']), 14 | ); 15 | 16 | Map _$CountryToJson(Country instance) => { 17 | 'dial_code': instance.dialCode, 18 | 'code': instance.code, 19 | 'flag': instance.flag, 20 | 'name': instance.name, 21 | }; 22 | -------------------------------------------------------------------------------- /lib/core/data/models/language.dart: -------------------------------------------------------------------------------- 1 | import 'package:equatable/equatable.dart'; 2 | import 'package:flutter_starter/core/core.dart'; 3 | import 'package:json_annotation/json_annotation.dart'; 4 | 5 | part 'language.g.dart'; 6 | 7 | @JsonSerializable() 8 | class Language extends Equatable { 9 | const Language({required this.code, required this.name}); 10 | 11 | factory Language.fromJson(Map json) => 12 | _$LanguageFromJson(json); 13 | 14 | @JsonKey(fromJson: StringParser.parse) 15 | final String code; 16 | 17 | @JsonKey(fromJson: StringParser.parse) 18 | final String name; 19 | 20 | Map toJson() => _$LanguageToJson(this); 21 | 22 | Language copyWith({ 23 | String? code, 24 | String? name, 25 | }) { 26 | return Language( 27 | code: code ?? this.code, 28 | name: name ?? this.name, 29 | ); 30 | } 31 | 32 | @override 33 | List get props => [code, name]; 34 | } 35 | -------------------------------------------------------------------------------- /lib/core/data/models/language.g.dart: -------------------------------------------------------------------------------- 1 | // GENERATED CODE - DO NOT MODIFY BY HAND 2 | 3 | part of 'language.dart'; 4 | 5 | // ************************************************************************** 6 | // JsonSerializableGenerator 7 | // ************************************************************************** 8 | 9 | Language _$LanguageFromJson(Map json) => Language( 10 | code: StringParser.parse(json['code']), 11 | name: StringParser.parse(json['name']), 12 | ); 13 | 14 | Map _$LanguageToJson(Language instance) => { 15 | 'code': instance.code, 16 | 'name': instance.name, 17 | }; 18 | -------------------------------------------------------------------------------- /lib/core/data/models/models.dart: -------------------------------------------------------------------------------- 1 | export 'country.dart'; 2 | export 'language.dart'; 3 | export 'pagination_data.dart'; 4 | -------------------------------------------------------------------------------- /lib/core/data/models/pagination_data.dart: -------------------------------------------------------------------------------- 1 | /// Handle Paginate Data 2 | class PaginationData { 3 | PaginationData({required this.data, required this.meta}); 4 | 5 | /// [T] as data type. 6 | /// 7 | /// Example your get data from API `List`, this result data is [T] 8 | final T data; 9 | 10 | /// [Meta] as metadata in pagination. 11 | /// 12 | /// Like info current page, info next page, total page 13 | /// and many more info in pagination data 14 | final Meta meta; 15 | } 16 | -------------------------------------------------------------------------------- /lib/core/exceptions/cache_exception.dart: -------------------------------------------------------------------------------- 1 | class CacheException implements Exception { 2 | const CacheException({required this.message, this.code}); 3 | 4 | final String message; 5 | final Object? code; 6 | 7 | @override 8 | String toString() => 'CacheException(message: $message, code: $code)'; 9 | } 10 | 11 | /// Throws when cache is empty or not found 12 | /// 13 | class NotFoundCacheException extends CacheException { 14 | const NotFoundCacheException({ 15 | required String message, 16 | Object? code, 17 | }) : super( 18 | message: message, 19 | code: code, 20 | ); 21 | 22 | @override 23 | String toString() => 'NotFoundCacheException(message: $message, code: $code)'; 24 | } 25 | 26 | /// Throw when cache is expired 27 | class ExpiredCacheException extends CacheException { 28 | const ExpiredCacheException({ 29 | required String message, 30 | Object? code, 31 | }) : super( 32 | message: message, 33 | code: code, 34 | ); 35 | 36 | @override 37 | String toString() => 'ExpiredCacheException(message: $message, code: $code)'; 38 | } 39 | -------------------------------------------------------------------------------- /lib/core/exceptions/code_exception.dart: -------------------------------------------------------------------------------- 1 | /// Throws when code have error 2 | /// 3 | class ErrorCodeException implements Exception { 4 | const ErrorCodeException({ 5 | required this.message, 6 | this.code, 7 | }); 8 | 9 | final String message; 10 | final Object? code; 11 | 12 | @override 13 | String toString() => 'ErrorCodeException(message: $message, code: $code)'; 14 | } 15 | -------------------------------------------------------------------------------- /lib/core/exceptions/exceptions.dart: -------------------------------------------------------------------------------- 1 | export 'cache_exception.dart'; 2 | export 'code_exception.dart'; 3 | export 'server_exception.dart'; 4 | -------------------------------------------------------------------------------- /lib/core/extensions/error_tracker_extension.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_starter/features/settings/settings.dart'; 2 | import 'package:get_it/get_it.dart'; 3 | 4 | extension RecordErrorExtensions on Object { 5 | void recordError({ 6 | Object? exception, 7 | Object? stackTrace, 8 | String? reason, 9 | }) { 10 | GetIt.I()( 11 | RecordErrorParams( 12 | exception: exception ?? this, 13 | stackTrace: stackTrace, 14 | reason: reason, 15 | ), 16 | ); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /lib/core/extensions/extensions.dart: -------------------------------------------------------------------------------- 1 | export 'dio_error_extension.dart'; 2 | export 'error_tracker_extension.dart'; 3 | export 'theme_extension.dart'; 4 | -------------------------------------------------------------------------------- /lib/core/extensions/theme_extension.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | /// Extension theme 4 | extension ThemeExtension on BuildContext { 5 | /// Current [ThemeData] in your widget 6 | ThemeData get theme => Theme.of(this); 7 | } 8 | -------------------------------------------------------------------------------- /lib/core/failures/base.dart: -------------------------------------------------------------------------------- 1 | import 'package:equatable/equatable.dart'; 2 | 3 | abstract class Failure extends Equatable { 4 | const Failure({required this.message, this.code}); 5 | 6 | final String message; 7 | 8 | final Object? code; 9 | 10 | @override 11 | List get props => [message, code]; 12 | } 13 | -------------------------------------------------------------------------------- /lib/core/failures/cache_failure.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_starter/core/core.dart'; 2 | 3 | class CacheFailure extends Failure { 4 | const CacheFailure({required String message, Object? code}) 5 | : super(message: message, code: code); 6 | } 7 | -------------------------------------------------------------------------------- /lib/core/failures/code_failure.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_starter/core/failures/base.dart'; 2 | 3 | class CodeFailure extends Failure { 4 | const CodeFailure({required String message, Object? code}) 5 | : super(message: message, code: code); 6 | } 7 | -------------------------------------------------------------------------------- /lib/core/failures/failures.dart: -------------------------------------------------------------------------------- 1 | export 'base.dart'; 2 | export 'cache_failure.dart'; 3 | export 'code_failure.dart'; 4 | export 'server_failure.dart'; 5 | -------------------------------------------------------------------------------- /lib/core/failures/server_failure.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_starter/core/core.dart'; 2 | 3 | class ServerFailure extends Failure { 4 | const ServerFailure({required String message, Object? code}) 5 | : super(message: message, code: code); 6 | } 7 | -------------------------------------------------------------------------------- /lib/core/helpers/app_bloc_observer.dart: -------------------------------------------------------------------------------- 1 | // coverage:ignore-file 2 | import 'dart:developer'; 3 | 4 | import 'package:bloc/bloc.dart'; 5 | 6 | class AppBlocObserver extends BlocObserver { 7 | @override 8 | void onChange(BlocBase bloc, Change change) { 9 | super.onChange(bloc, change); 10 | log('onChange(${bloc.runtimeType}, $change)', name: 'BLOC'); 11 | } 12 | 13 | @override 14 | void onError(BlocBase bloc, Object error, StackTrace stackTrace) { 15 | log( 16 | 'onError(${bloc.runtimeType}, $error, $stackTrace)', 17 | name: 'BLOC', 18 | error: error, 19 | stackTrace: stackTrace, 20 | ); 21 | super.onError(bloc, error, stackTrace); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /lib/core/helpers/bloc_event_transformer.dart: -------------------------------------------------------------------------------- 1 | // coverage:ignore-file 2 | 3 | import 'package:bloc_concurrency/bloc_concurrency.dart'; 4 | import 'package:flutter_bloc/flutter_bloc.dart'; 5 | import 'package:stream_transform/stream_transform.dart'; 6 | 7 | EventTransformer throttleDroppable(Duration duration) { 8 | return (events, mapper) { 9 | return droppable().call(events.throttle(duration), mapper); 10 | }; 11 | } 12 | 13 | EventTransformer throttleRestartable(Duration duration) { 14 | return (events, mapper) { 15 | return restartable().call(events.throttle(duration), mapper); 16 | }; 17 | } 18 | 19 | EventTransformer debounce(Duration duration) { 20 | return (events, mapper) => events.debounce(duration).switchMap(mapper); 21 | } 22 | -------------------------------------------------------------------------------- /lib/core/helpers/helpers.dart: -------------------------------------------------------------------------------- 1 | export 'app_bloc_observer.dart'; 2 | export 'bloc_event_transformer.dart'; 3 | -------------------------------------------------------------------------------- /lib/core/network/network.dart: -------------------------------------------------------------------------------- 1 | export 'network_info.dart'; 2 | -------------------------------------------------------------------------------- /lib/core/network/network_info.dart: -------------------------------------------------------------------------------- 1 | import 'package:internet_connection_checker/internet_connection_checker.dart'; 2 | 3 | /// Internet connection checker 4 | /// Getting current info internet connection status 5 | abstract class NetworkInfo { 6 | /// Get current status internet connection. 7 | /// Connected on Internet or not. 8 | /// 9 | /// - Return `true` when user/device has internet connection 10 | /// - Return `false` when user/device has't internet connection 11 | Future get isConnected; 12 | } 13 | 14 | class NetworkInfoImpl implements NetworkInfo { 15 | const NetworkInfoImpl(this.connectionChecker); 16 | 17 | final InternetConnectionChecker connectionChecker; 18 | 19 | @override 20 | Future get isConnected => connectionChecker.hasConnection; 21 | } 22 | -------------------------------------------------------------------------------- /lib/core/pages/pages.dart: -------------------------------------------------------------------------------- 1 | export 'not_found_page.dart'; 2 | -------------------------------------------------------------------------------- /lib/core/preferences/assets.dart: -------------------------------------------------------------------------------- 1 | class MainAssets { 2 | const MainAssets._(); 3 | 4 | // -------------------------------- IMAGES ----------------------------------- 5 | 6 | static const String _baseImagePath = 'assets/images'; 7 | 8 | // Bitmap 9 | static const String notFoundImg = '$_baseImagePath/bitmap/not_found.webp'; 10 | 11 | // Icon 12 | 13 | // Illustration 14 | 15 | // ---------------------------- END IMAGES ----------------------------------- 16 | 17 | // ------------------------------ OTHER -------------------------------------- 18 | 19 | // ------------------------------ END OTHER ---------------------------------- 20 | 21 | } 22 | -------------------------------------------------------------------------------- /lib/core/preferences/colors.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class AppColors { 4 | const AppColors._(); 5 | 6 | static const Color primaryColor = Color(0xFF8DC53F); 7 | 8 | // Example Use Material 9 | static const MaterialColor blue = MaterialColor( 10 | 0xFF2196F3, 11 | { 12 | 50: Color(0xFFE3F2FD), 13 | 100: Color(0xFFBBDEFB), 14 | 200: Color(0xFF90CAF9), 15 | 300: Color(0xFF64B5F6), 16 | 400: Color(0xFF42A5F5), 17 | 500: Color(0xFF2196F3), 18 | 600: Color(0xFF1E88E5), 19 | 700: Color(0xFF1976D2), 20 | 800: Color(0xFF1565C0), 21 | 900: Color(0xFF0D47A1), 22 | }, 23 | ); 24 | } 25 | -------------------------------------------------------------------------------- /lib/core/preferences/preferences.dart: -------------------------------------------------------------------------------- 1 | export 'assets.dart'; 2 | export 'colors.dart'; 3 | export 'dimens.dart'; 4 | export 'themes/themes.dart'; 5 | -------------------------------------------------------------------------------- /lib/core/preferences/themes/base_theme.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | abstract class BaseTheme { 4 | ColorScheme get scheme; 5 | 6 | AppBarTheme get appBar; 7 | 8 | ButtonThemeData get button; 9 | 10 | ElevatedButtonThemeData get elevatedButton; 11 | 12 | OutlinedButtonThemeData get outlinedButton; 13 | 14 | CardTheme get card; 15 | 16 | InputDecorationTheme get inputDecoration; 17 | 18 | ThemeData get data; 19 | } 20 | -------------------------------------------------------------------------------- /lib/core/preferences/themes/enum.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/foundation.dart'; 2 | import 'package:flutter_starter/core/core.dart'; 3 | import 'package:json_annotation/json_annotation.dart'; 4 | 5 | enum AppTheme { 6 | @JsonValue('light') 7 | light, 8 | 9 | @JsonValue('dark') 10 | dark 11 | } 12 | 13 | extension AppThemeX on AppTheme { 14 | String toText() { 15 | return describeEnum(this); 16 | } 17 | 18 | BaseTheme toTheme() { 19 | switch (this) { 20 | case AppTheme.dark: 21 | return DarkTheme(AppColors.primaryColor); 22 | case AppTheme.light: 23 | return LightTheme(AppColors.primaryColor); 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /lib/core/preferences/themes/themes.dart: -------------------------------------------------------------------------------- 1 | export 'base_theme.dart'; 2 | export 'dark_theme.dart'; 3 | export 'enum.dart'; 4 | export 'light_theme.dart'; 5 | -------------------------------------------------------------------------------- /lib/core/usecases/usecase_interface.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | import 'package:dartz/dartz.dart'; 4 | 5 | /// `UseCase` for getting data with Future. 6 | /// 7 | /// Use case contains the app's business logic / rules, e.g. validations. 8 | /// It should be independent from any other non-business logic-related 9 | /// functionalities. 10 | /// 11 | /// It can be connected with repository, although not every use case needs to 12 | /// depend on the repository. 13 | /// 14 | /// If you can live with less static typing, you can use `Params` type 15 | /// as Params. 16 | /// 17 | abstract class UseCaseFuture { 18 | /// Method to calling this useCase 19 | FutureOr> call(Params params); 20 | } 21 | 22 | /// `UseCase` for getting data with Stream. 23 | /// This usecase for getting data realtime. 24 | /// 25 | /// Use case contains the app's business logic / rules, e.g. validations. 26 | /// It should be independent from any other non-business logic-related 27 | /// functionalities. 28 | /// 29 | /// It can be connected with repository, although not every use case needs to 30 | /// depend on the repository. 31 | /// 32 | /// If you can live with less static typing, you can use `Params` type 33 | /// as Params. 34 | /// 35 | abstract class UseCaseStream { 36 | /// Method to calling this useCase 37 | Stream> call(Params params); 38 | } 39 | -------------------------------------------------------------------------------- /lib/core/usecases/usecases.dart: -------------------------------------------------------------------------------- 1 | export 'params.dart'; 2 | export 'usecase_interface.dart'; 3 | -------------------------------------------------------------------------------- /lib/core/utils/string_parser.dart: -------------------------------------------------------------------------------- 1 | /// 2 | /// Utilities Class for parsing num values 3 | /// 4 | class StringParser { 5 | /// A function to parse dynamic [value] to String. 6 | /// And for [fallbackValue] is mandatory because when there is an error 7 | /// in parse it will return the value of [fallbackValue]. 8 | static String parse(dynamic value, {String fallbackValue = ''}) { 9 | return tryParse(value) ?? fallbackValue; 10 | } 11 | 12 | /// Parse [value] as a, possibly signed, String literal. 13 | /// 14 | /// Like [parse] except that this function returns `null` where a 15 | /// similar call to [parse] for invalid input [value]. 16 | static String? tryParse(dynamic value) { 17 | if (value is String) { 18 | return value; 19 | } else if (value != null) { 20 | return value.toString(); 21 | } 22 | 23 | return null; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /lib/core/utils/utils.dart: -------------------------------------------------------------------------------- 1 | export 'num_parser.dart'; 2 | export 'string_parser.dart'; 3 | -------------------------------------------------------------------------------- /lib/features/home/data/data.dart: -------------------------------------------------------------------------------- 1 | export 'data_sources/data_sources.dart'; 2 | export 'models/models.dart'; 3 | export 'repositories/repositories.dart'; 4 | -------------------------------------------------------------------------------- /lib/features/home/data/data_sources/data_sources.dart: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /lib/features/home/data/models/models.dart: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /lib/features/home/data/repositories/repositories.dart: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /lib/features/home/domain/domain.dart: -------------------------------------------------------------------------------- 1 | export 'entities/entities.dart'; 2 | export 'repositories/repositories.dart'; 3 | export 'usecases/usecases.dart'; 4 | -------------------------------------------------------------------------------- /lib/features/home/domain/entities/entities.dart: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /lib/features/home/domain/repositories/repositories.dart: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /lib/features/home/domain/usecases/usecases.dart: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /lib/features/home/home.dart: -------------------------------------------------------------------------------- 1 | export 'data/data.dart'; 2 | export 'domain/domain.dart'; 3 | export 'presentation/presentation.dart'; 4 | -------------------------------------------------------------------------------- /lib/features/home/presentation/blocs/blocs.dart: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /lib/features/home/presentation/pages/index/page.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class HomePage extends StatefulWidget { 4 | const HomePage({Key? key}) : super(key: key); 5 | 6 | @override 7 | _HomePageState createState() => _HomePageState(); 8 | } 9 | 10 | class _HomePageState extends State { 11 | @override 12 | Widget build(BuildContext context) { 13 | return Scaffold( 14 | appBar: AppBar( 15 | title: const Text('Home Page'), 16 | ), 17 | ); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /lib/features/home/presentation/pages/main/page.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_starter/features/settings/settings.dart'; 3 | import 'package:flutter_starter/l10n/l10n.dart'; 4 | 5 | class MainPage extends StatefulWidget { 6 | const MainPage({Key? key}) : super(key: key); 7 | 8 | @override 9 | _MainPageState createState() => _MainPageState(); 10 | } 11 | 12 | class _MainPageState extends State { 13 | int activeIndex = 0; 14 | @override 15 | Widget build(BuildContext context) { 16 | return Scaffold( 17 | body: const SettingsPage(), 18 | bottomNavigationBar: BottomNavigationBar( 19 | currentIndex: activeIndex, 20 | onTap: (v) { 21 | setState(() { 22 | activeIndex = v; 23 | }); 24 | }, 25 | type: BottomNavigationBarType.fixed, 26 | items: [ 27 | BottomNavigationBarItem( 28 | icon: const Icon(Icons.home), 29 | label: context.l10n.home, 30 | ), 31 | BottomNavigationBarItem( 32 | icon: const Icon(Icons.home), 33 | label: context.l10n.home, 34 | ), 35 | BottomNavigationBarItem( 36 | icon: const Icon(Icons.home), 37 | label: context.l10n.home, 38 | ), 39 | ], 40 | ), 41 | ); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /lib/features/home/presentation/pages/pages.dart: -------------------------------------------------------------------------------- 1 | export 'index/page.dart'; 2 | export 'main/page.dart'; 3 | -------------------------------------------------------------------------------- /lib/features/home/presentation/presentation.dart: -------------------------------------------------------------------------------- 1 | export 'pages/pages.dart'; 2 | -------------------------------------------------------------------------------- /lib/features/settings/data/data.dart: -------------------------------------------------------------------------------- 1 | export 'data_sources/data_sources.dart'; 2 | export 'models/models.dart'; 3 | export 'repositories/repositories.dart'; 4 | -------------------------------------------------------------------------------- /lib/features/settings/data/data_sources/data_sources.dart: -------------------------------------------------------------------------------- 1 | export 'local_data_source.dart'; 2 | -------------------------------------------------------------------------------- /lib/features/settings/data/models/models.dart: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /lib/features/settings/data/repositories/repositories.dart: -------------------------------------------------------------------------------- 1 | export 'settings_repository.dart'; 2 | -------------------------------------------------------------------------------- /lib/features/settings/domain/domain.dart: -------------------------------------------------------------------------------- 1 | export 'entities/entities.dart'; 2 | export 'repositories/repositories.dart'; 3 | export 'usecases/usecases.dart'; 4 | -------------------------------------------------------------------------------- /lib/features/settings/domain/entities/entities.dart: -------------------------------------------------------------------------------- 1 | export 'settings.dart'; 2 | -------------------------------------------------------------------------------- /lib/features/settings/domain/entities/settings.dart: -------------------------------------------------------------------------------- 1 | import 'package:equatable/equatable.dart'; 2 | import 'package:flutter_starter/app/config.dart'; 3 | import 'package:flutter_starter/core/core.dart'; 4 | import 'package:json_annotation/json_annotation.dart'; 5 | 6 | part 'settings.g.dart'; 7 | 8 | @JsonSerializable(includeIfNull: false) 9 | class Settings extends Equatable { 10 | const Settings({ 11 | required this.language, 12 | required this.theme, 13 | }); 14 | 15 | factory Settings.fromJson(Map json) => 16 | _$SettingsFromJson(json); 17 | 18 | @JsonKey(name: 'language') 19 | final Language? language; 20 | 21 | @JsonKey( 22 | unknownEnumValue: AppConfig.defaultTheme, 23 | defaultValue: AppConfig.defaultTheme, 24 | ) 25 | final AppTheme? theme; 26 | 27 | Settings copyWith({ 28 | Language? language, 29 | AppTheme? theme, 30 | }) { 31 | return Settings( 32 | language: language ?? this.language, 33 | theme: theme ?? this.theme, 34 | ); 35 | } 36 | 37 | Map toJson() => _$SettingsToJson(this); 38 | 39 | @override 40 | List get props => [language, theme]; 41 | } 42 | -------------------------------------------------------------------------------- /lib/features/settings/domain/entities/settings.g.dart: -------------------------------------------------------------------------------- 1 | // GENERATED CODE - DO NOT MODIFY BY HAND 2 | 3 | part of 'settings.dart'; 4 | 5 | // ************************************************************************** 6 | // JsonSerializableGenerator 7 | // ************************************************************************** 8 | 9 | Settings _$SettingsFromJson(Map json) => Settings( 10 | language: json['language'] == null 11 | ? null 12 | : Language.fromJson(json['language'] as Map), 13 | theme: $enumDecodeNullable(_$AppThemeEnumMap, json['theme'], 14 | unknownValue: AppTheme.light) ?? 15 | AppTheme.light, 16 | ); 17 | 18 | Map _$SettingsToJson(Settings instance) { 19 | final val = {}; 20 | 21 | void writeNotNull(String key, dynamic value) { 22 | if (value != null) { 23 | val[key] = value; 24 | } 25 | } 26 | 27 | writeNotNull('language', instance.language?.toJson()); 28 | writeNotNull('theme', _$AppThemeEnumMap[instance.theme]); 29 | return val; 30 | } 31 | 32 | const _$AppThemeEnumMap = { 33 | AppTheme.light: 'light', 34 | AppTheme.dark: 'dark', 35 | }; 36 | -------------------------------------------------------------------------------- /lib/features/settings/domain/repositories/repositories.dart: -------------------------------------------------------------------------------- 1 | export 'settings_repository.dart'; 2 | -------------------------------------------------------------------------------- /lib/features/settings/domain/repositories/settings_repository.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutter_starter/core/core.dart'; 3 | import 'package:flutter_starter/features/settings/settings.dart'; 4 | 5 | abstract class SettingsRepository { 6 | Future> getSettings(); 7 | 8 | Future> saveSettings(Settings setting); 9 | 10 | Future> getThemeSetting(); 11 | 12 | Future> getLanguageSetting(); 13 | 14 | Future> saveThemeSetting(AppTheme theme); 15 | 16 | Future> saveLanguageSetting(Language language); 17 | } 18 | -------------------------------------------------------------------------------- /lib/features/settings/domain/usecases/get_language_setting_usecase.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | import 'package:dartz/dartz.dart'; 4 | import 'package:flutter_starter/core/core.dart'; 5 | import 'package:flutter_starter/features/settings/settings.dart'; 6 | 7 | class GetLanguageSettingUseCase 8 | implements UseCaseFuture { 9 | GetLanguageSettingUseCase(this.repository); 10 | final SettingsRepository repository; 11 | 12 | @override 13 | FutureOr> call(NoParams params) { 14 | return repository.getLanguageSetting(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /lib/features/settings/domain/usecases/get_settings_usecase.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | import 'package:dartz/dartz.dart'; 4 | import 'package:flutter_starter/core/core.dart'; 5 | import 'package:flutter_starter/features/settings/settings.dart'; 6 | 7 | class GetSettingsUseCase implements UseCaseFuture { 8 | GetSettingsUseCase(this.repository); 9 | final SettingsRepository repository; 10 | 11 | @override 12 | FutureOr> call(NoParams params) { 13 | return repository.getSettings(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /lib/features/settings/domain/usecases/get_supported_language_usecase.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | import 'package:dartz/dartz.dart'; 4 | import 'package:flutter/widgets.dart'; 5 | import 'package:flutter_starter/core/core.dart'; 6 | 7 | class GetSupportedLanguageUseCase 8 | implements UseCaseFuture, SupportedLanguageParams> { 9 | @override 10 | FutureOr>> call( 11 | SupportedLanguageParams params, 12 | ) async { 13 | final _currentSupportedLangCode = []; 14 | final _result = []; 15 | 16 | for (final item in params.locales) { 17 | _currentSupportedLangCode.add(item.languageCode); 18 | } 19 | 20 | for (final item in params.referenceLanguages) { 21 | if (_currentSupportedLangCode.contains(item.code)) { 22 | _result.add(item); 23 | } 24 | } 25 | 26 | return Right(_result.toSet().toList()); 27 | } 28 | } 29 | 30 | class SupportedLanguageParams { 31 | SupportedLanguageParams({ 32 | required this.referenceLanguages, 33 | required this.locales, 34 | }); 35 | 36 | final List referenceLanguages; 37 | final List locales; 38 | } 39 | -------------------------------------------------------------------------------- /lib/features/settings/domain/usecases/get_theme_setting_usecase.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | import 'package:dartz/dartz.dart'; 4 | import 'package:flutter_starter/core/core.dart'; 5 | import 'package:flutter_starter/features/settings/settings.dart'; 6 | 7 | class GetThemeSettingUseCase 8 | implements UseCaseFuture { 9 | GetThemeSettingUseCase(this.repository); 10 | final SettingsRepository repository; 11 | 12 | @override 13 | FutureOr> call(NoParams params) { 14 | return repository.getThemeSetting(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /lib/features/settings/domain/usecases/record_error_usecase.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | import 'dart:developer'; 3 | 4 | import 'package:equatable/equatable.dart'; 5 | 6 | class RecordErrorUseCase { 7 | FutureOr call(RecordErrorParams params) async { 8 | // TODO: Implement Logging Error in this body, 9 | // like Sentry of Firebase Crashlytics http://sentry.io 10 | log( 11 | params.reason ?? params.exception.toString(), 12 | name: 'ERROR', 13 | stackTrace: params.stackTrace is StackTrace? 14 | ? params.stackTrace as StackTrace? 15 | : StackTrace.fromString(params.stackTrace.toString()), 16 | ); 17 | } 18 | } 19 | 20 | class RecordErrorParams extends Equatable { 21 | const RecordErrorParams({ 22 | required this.exception, 23 | this.stackTrace, 24 | this.reason, 25 | }); 26 | 27 | final Object exception; 28 | final Object? stackTrace; 29 | final String? reason; 30 | 31 | @override 32 | List get props => [exception, stackTrace, reason]; 33 | } 34 | -------------------------------------------------------------------------------- /lib/features/settings/domain/usecases/save_language_setting_usecase.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | import 'package:dartz/dartz.dart'; 4 | import 'package:flutter_starter/core/core.dart'; 5 | import 'package:flutter_starter/features/settings/domain/domain.dart'; 6 | 7 | class SaveLanguageSettingUseCase 8 | implements UseCaseFuture { 9 | SaveLanguageSettingUseCase(this.repository); 10 | final SettingsRepository repository; 11 | 12 | @override 13 | FutureOr> call(Language params) { 14 | return repository.saveLanguageSetting(params); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /lib/features/settings/domain/usecases/save_settings_usecase.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | import 'package:dartz/dartz.dart'; 4 | import 'package:flutter_starter/core/core.dart'; 5 | import 'package:flutter_starter/features/settings/settings.dart'; 6 | 7 | class SaveSettingsUseCase implements UseCaseFuture { 8 | SaveSettingsUseCase(this.repository); 9 | final SettingsRepository repository; 10 | 11 | @override 12 | FutureOr> call(Settings params) { 13 | return repository.saveSettings(params); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /lib/features/settings/domain/usecases/save_theme_setting_usecase.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | import 'package:dartz/dartz.dart'; 4 | import 'package:flutter_starter/core/core.dart'; 5 | import 'package:flutter_starter/features/settings/domain/domain.dart'; 6 | 7 | class SaveThemeSettingUseCase 8 | implements UseCaseFuture { 9 | SaveThemeSettingUseCase(this.repository); 10 | final SettingsRepository repository; 11 | 12 | @override 13 | FutureOr> call(AppTheme params) { 14 | return repository.saveThemeSetting(params); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /lib/features/settings/domain/usecases/usecases.dart: -------------------------------------------------------------------------------- 1 | export 'get_language_setting_usecase.dart'; 2 | export 'get_settings_usecase.dart'; 3 | export 'get_supported_language_usecase.dart'; 4 | export 'get_theme_setting_usecase.dart'; 5 | export 'record_error_usecase.dart'; 6 | export 'save_language_setting_usecase.dart'; 7 | export 'save_settings_usecase.dart'; 8 | export 'save_theme_setting_usecase.dart'; 9 | -------------------------------------------------------------------------------- /lib/features/settings/presentation/blocs/blocs.dart: -------------------------------------------------------------------------------- 1 | export 'language/language_bloc.dart'; 2 | export 'theme/theme_bloc.dart'; 3 | -------------------------------------------------------------------------------- /lib/features/settings/presentation/blocs/language/language_event.dart: -------------------------------------------------------------------------------- 1 | part of 'language_bloc.dart'; 2 | 3 | abstract class LanguageEvent extends Equatable { 4 | const LanguageEvent(); 5 | } 6 | 7 | class LanguageStarted extends LanguageEvent { 8 | const LanguageStarted(); 9 | 10 | @override 11 | List get props => []; 12 | } 13 | 14 | class LanguageChanged extends LanguageEvent { 15 | const LanguageChanged(this.language); 16 | 17 | final Language language; 18 | 19 | @override 20 | List get props => [language]; 21 | } 22 | -------------------------------------------------------------------------------- /lib/features/settings/presentation/blocs/language/language_state.dart: -------------------------------------------------------------------------------- 1 | part of 'language_bloc.dart'; 2 | 3 | class LanguageState extends Equatable { 4 | const LanguageState(this.language, this.supportedLanguages); 5 | 6 | final Language? language; 7 | final List supportedLanguages; 8 | 9 | LanguageState copyWith({ 10 | Language? language, 11 | List? supportedLanguages, 12 | }) { 13 | return LanguageState( 14 | language ?? this.language, 15 | supportedLanguages ?? this.supportedLanguages, 16 | ); 17 | } 18 | 19 | @override 20 | List get props => [language, supportedLanguages]; 21 | } 22 | -------------------------------------------------------------------------------- /lib/features/settings/presentation/blocs/theme/theme_event.dart: -------------------------------------------------------------------------------- 1 | part of 'theme_bloc.dart'; 2 | 3 | abstract class ThemeEvent extends Equatable { 4 | const ThemeEvent(); 5 | } 6 | 7 | class ThemeStarted extends ThemeEvent { 8 | const ThemeStarted(); 9 | 10 | @override 11 | List get props => []; 12 | } 13 | 14 | class ThemeChanged extends ThemeEvent { 15 | const ThemeChanged(this.theme); 16 | 17 | final AppTheme theme; 18 | 19 | @override 20 | List get props => [theme]; 21 | } 22 | -------------------------------------------------------------------------------- /lib/features/settings/presentation/blocs/theme/theme_state.dart: -------------------------------------------------------------------------------- 1 | part of 'theme_bloc.dart'; 2 | 3 | class ThemeState extends Equatable { 4 | const ThemeState(this.theme); 5 | 6 | final AppTheme theme; 7 | 8 | @override 9 | List get props => [theme]; 10 | } 11 | -------------------------------------------------------------------------------- /lib/features/settings/presentation/pages/pages.dart: -------------------------------------------------------------------------------- 1 | export 'index/page.dart'; 2 | -------------------------------------------------------------------------------- /lib/features/settings/presentation/presentation.dart: -------------------------------------------------------------------------------- 1 | export 'blocs/blocs.dart'; 2 | export 'pages/pages.dart'; 3 | -------------------------------------------------------------------------------- /lib/features/settings/settings.dart: -------------------------------------------------------------------------------- 1 | export 'data/data.dart'; 2 | export 'domain/domain.dart'; 3 | export 'presentation/presentation.dart'; 4 | -------------------------------------------------------------------------------- /lib/l10n/arb/app_en.arb: -------------------------------------------------------------------------------- 1 | { 2 | "@@locale": "en", 3 | "counterAppBarTitle": "Counter", 4 | "@counterAppBarTitle": { 5 | "description": "Text shown in the AppBar of the Counter Page" 6 | }, 7 | "pageNotFoundMessage": "Sorry, we couldn’t find that page…", 8 | "backToHomeLabel": "Back To Home", 9 | "settings": "Settings", 10 | "language": "Language", 11 | "theme": "Theme", 12 | "home": "Home" 13 | } -------------------------------------------------------------------------------- /lib/l10n/arb/app_id.arb: -------------------------------------------------------------------------------- 1 | { 2 | "@@locale": "id", 3 | "counterAppBarTitle": "Perhitungan", 4 | "@counterAppBarTitle": { 5 | "description": "Teks ditampilkan di AppBar dari Halaman Penghitung" 6 | }, 7 | "pageNotFoundMessage": "Maaf, kami tidak dapat menemukan halaman itu…", 8 | "backToHomeLabel": "Kembali Ke Home", 9 | "settings": "Pengaturan", 10 | "language": "Bahasa", 11 | "theme": "Tema", 12 | "home": "Home" 13 | } -------------------------------------------------------------------------------- /lib/l10n/l10n.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/widgets.dart'; 2 | import 'package:flutter_gen/gen_l10n/app_localizations.dart'; 3 | 4 | export 'package:flutter_gen/gen_l10n/app_localizations.dart'; 5 | 6 | extension AppLocalizationsX on BuildContext { 7 | AppLocalizations get l10n => AppLocalizations.of(this)!; 8 | } 9 | -------------------------------------------------------------------------------- /lib/main_development.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | import 'dart:developer'; 3 | 4 | import 'package:flutter/widgets.dart'; 5 | import 'package:flutter_starter/app/flavor.dart'; 6 | import 'package:flutter_starter/app/locator.dart'; 7 | import 'package:flutter_starter/app/runner.dart'; 8 | 9 | Future main() async { 10 | WidgetsFlutterBinding.ensureInitialized(); 11 | F.flavor = Flavor.dev; 12 | 13 | await setupLocator(); 14 | 15 | runZonedGuarded( 16 | runnerApp, 17 | (error, stackTrace) => log( 18 | error.toString(), 19 | name: 'ERROR', 20 | stackTrace: stackTrace, 21 | ), 22 | ); 23 | } 24 | -------------------------------------------------------------------------------- /lib/main_production.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | import 'dart:developer'; 3 | 4 | import 'package:flutter/widgets.dart'; 5 | import 'package:flutter_starter/app/flavor.dart'; 6 | import 'package:flutter_starter/app/locator.dart'; 7 | import 'package:flutter_starter/app/runner.dart'; 8 | 9 | Future main() async { 10 | WidgetsFlutterBinding.ensureInitialized(); 11 | F.flavor = Flavor.prod; 12 | 13 | await setupLocator(); 14 | 15 | runZonedGuarded( 16 | runnerApp, 17 | (error, stackTrace) => log( 18 | error.toString(), 19 | name: 'ERROR', 20 | stackTrace: stackTrace, 21 | ), 22 | ); 23 | } 24 | -------------------------------------------------------------------------------- /lib/main_staging.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | import 'dart:developer'; 3 | 4 | import 'package:flutter/widgets.dart'; 5 | import 'package:flutter_starter/app/flavor.dart'; 6 | import 'package:flutter_starter/app/locator.dart'; 7 | import 'package:flutter_starter/app/runner.dart'; 8 | 9 | Future main() async { 10 | WidgetsFlutterBinding.ensureInitialized(); 11 | F.flavor = Flavor.staging; 12 | 13 | await setupLocator(); 14 | 15 | runZonedGuarded( 16 | runnerApp, 17 | (error, stackTrace) => log( 18 | error.toString(), 19 | name: 'ERROR', 20 | stackTrace: stackTrace, 21 | ), 22 | ); 23 | } 24 | -------------------------------------------------------------------------------- /pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: flutter_starter 2 | description: A new Flutter project. 3 | version: 1.0.0+1 4 | publish_to: none 5 | 6 | environment: 7 | sdk: ">=2.15.0 <3.0.0" 8 | 9 | dependencies: 10 | bloc_concurrency: ^0.2.0 11 | dartz: ^0.10.1 12 | dio: ^4.0.6 13 | equatable: ^2.0.3 14 | flutter: 15 | sdk: flutter 16 | flutter_bloc: ^8.0.1 17 | flutter_dotenv: ^5.0.2 18 | flutter_localizations: 19 | sdk: flutter 20 | get_it: ^7.2.0 21 | go_router: ^4.2.7 22 | hive: ^2.2.3 23 | internet_connection_checker: ^0.0.1+4 24 | intl: ^0.17.0 25 | json_annotation: ^4.6.0 26 | path_provider: ^2.0.11 27 | stream_transform: ^2.0.0 28 | 29 | dev_dependencies: 30 | bloc_test: ^9.0.3 31 | build_runner: ^2.2.0 32 | flutter_test: 33 | sdk: flutter 34 | json_serializable: ^6.3.1 35 | mocktail: ^0.3.0 36 | very_good_analysis: ^3.0.1 37 | 38 | flutter: 39 | uses-material-design: true 40 | generate: true 41 | 42 | assets: 43 | - assets/images/ 44 | - assets/images/bitmap/ 45 | - assets/images/flags/ 46 | - assets/.env -------------------------------------------------------------------------------- /test/app/app_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_starter/app/app.dart'; 2 | import 'package:flutter_starter/features/home/home.dart'; 3 | import 'package:flutter_test/flutter_test.dart'; 4 | 5 | import '../helpers/helpers.dart'; 6 | 7 | void main() { 8 | setUp(() async { 9 | await setupTestLocator(); 10 | }); 11 | 12 | group('app/', () { 13 | testWidgets('Renders MainPage as Default Page', (tester) async { 14 | await tester.pumpApp(const App()); 15 | 16 | await tester.pumpAndSettle(); 17 | expect(find.byType(MainPage), findsWidgets); 18 | }); 19 | }); 20 | } 21 | -------------------------------------------------------------------------------- /test/app/flavor_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_starter/app/flavor.dart'; 2 | import 'package:flutter_test/flutter_test.dart'; 3 | 4 | void main() { 5 | group('app/', () { 6 | test('Check when run with Flavor.dev valid or not', () { 7 | // arrange 8 | const expected = Flavor.dev; 9 | 10 | // actual 11 | F.flavor = Flavor.dev; 12 | 13 | // assert 14 | expect(F.flavor, expected); 15 | }); 16 | 17 | test('Check when run with Flavor.staging valid or not', () { 18 | // arrange 19 | const expected = Flavor.staging; 20 | 21 | // actual 22 | F.flavor = Flavor.staging; 23 | 24 | // assert 25 | expect(F.flavor, expected); 26 | }); 27 | 28 | test('Check when run with Flavor.prod valid or not', () { 29 | // arrange 30 | const expected = Flavor.prod; 31 | 32 | // actual 33 | F.flavor = Flavor.prod; 34 | 35 | // assert 36 | expect(F.flavor, expected); 37 | }); 38 | }); 39 | } 40 | -------------------------------------------------------------------------------- /test/core/component/atom/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/test/core/component/atom/.gitkeep -------------------------------------------------------------------------------- /test/core/component/molecule/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/test/core/component/molecule/.gitkeep -------------------------------------------------------------------------------- /test/core/component/organism/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/test/core/component/organism/.gitkeep -------------------------------------------------------------------------------- /test/core/data/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/test/core/data/.gitkeep -------------------------------------------------------------------------------- /test/core/data/countries_data_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_starter/core/core.dart'; 2 | import 'package:flutter_test/flutter_test.dart'; 3 | 4 | void main() { 5 | group('core/data/', () { 6 | test('Should get all country is valid', () { 7 | final actual = CountriesData.data; 8 | 9 | expect(actual, isNotNull); 10 | expect(actual, isNotEmpty); 11 | expect(actual, isA>()); 12 | }); 13 | 14 | test('Should generate flags assets URI correctly', () async { 15 | final data = CountriesData.data; 16 | 17 | for (final country in data) { 18 | expect( 19 | country.flag, 20 | 'assets/images/flags/${country.code.toLowerCase()}.png', 21 | ); 22 | } 23 | }); 24 | }); 25 | } 26 | -------------------------------------------------------------------------------- /test/core/data/languages_data_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_starter/core/core.dart'; 2 | import 'package:flutter_test/flutter_test.dart'; 3 | 4 | void main() { 5 | group('core/data/', () { 6 | test('Should get all languages is valid', () { 7 | final actual = LanguagesData.data; 8 | 9 | expect(actual, isNotNull); 10 | expect(actual, isNotEmpty); 11 | expect(actual, isA>()); 12 | }); 13 | 14 | test('Should language code correctly with only have 2 chars', () async { 15 | final data = LanguagesData.data; 16 | 17 | for (final lang in data) { 18 | expect(lang.code.length, 2); 19 | } 20 | }); 21 | }); 22 | } 23 | -------------------------------------------------------------------------------- /test/core/data/models/pagination_data_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_starter/core/core.dart'; 2 | import 'package:flutter_test/flutter_test.dart'; 3 | 4 | void main() { 5 | group('core/data/models/', () { 6 | test('Should PaginationData correctly', () { 7 | final actual = PaginationData, bool>( 8 | data: ['Hello', 'World'], 9 | meta: true, 10 | ); 11 | 12 | expect(actual.data, isA>()); 13 | expect(actual.meta, isA()); 14 | }); 15 | }); 16 | } 17 | -------------------------------------------------------------------------------- /test/core/extensions/theme_extension_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_starter/core/core.dart'; 3 | import 'package:flutter_test/flutter_test.dart'; 4 | 5 | import '../../helpers/helpers.dart'; 6 | 7 | void main() { 8 | group('core/extensions/ ', () { 9 | testWidgets('Should equals context.theme with Theme.of(context)', 10 | (tester) async { 11 | final app = Builder( 12 | builder: (context) { 13 | final actualResult = context.theme; 14 | final expectedResult = Theme.of(context); 15 | 16 | expect(actualResult, expectedResult); 17 | 18 | return const Scaffold(); 19 | }, 20 | ); 21 | 22 | await tester.pumpApp(app); 23 | }); 24 | }); 25 | } 26 | -------------------------------------------------------------------------------- /test/core/failures/cache_failure_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_starter/core/core.dart'; 2 | import 'package:flutter_test/flutter_test.dart'; 3 | 4 | void main() { 5 | group('core/failures/', () { 6 | const tFailure = CacheFailure(message: 'Test Failure', code: 90); 7 | 8 | test('Should CacheFailure is SubClass of Failure', () async { 9 | expect(tFailure, isA()); 10 | }); 11 | 12 | test('Should compare object CacheFailure is correctly', () async { 13 | expect(tFailure, tFailure); 14 | expect(tFailure == tFailure, true); 15 | }); 16 | 17 | test('Should toString object CacheFailure is correctly', () async { 18 | expect(tFailure.toString(), 'CacheFailure(Test Failure, 90)'); 19 | }); 20 | }); 21 | } 22 | -------------------------------------------------------------------------------- /test/core/failures/code_failure_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_starter/core/core.dart'; 2 | import 'package:flutter_test/flutter_test.dart'; 3 | 4 | void main() { 5 | group('core/failures/', () { 6 | const tFailure = CodeFailure(message: 'Test Failure', code: 90); 7 | 8 | test('Should CodeFailure is SubClass of Failure', () async { 9 | expect(tFailure, isA()); 10 | }); 11 | 12 | test('Should compare object CodeFailure is correctly', () async { 13 | expect(tFailure, tFailure); 14 | expect(tFailure == tFailure, true); 15 | }); 16 | 17 | test('Should toString object CodeFailure is correctly', () async { 18 | expect(tFailure.toString(), 'CodeFailure(Test Failure, 90)'); 19 | }); 20 | }); 21 | } 22 | -------------------------------------------------------------------------------- /test/core/failures/server_failure_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_starter/core/core.dart'; 2 | import 'package:flutter_test/flutter_test.dart'; 3 | 4 | void main() { 5 | group('core/failures/', () { 6 | const tFailure = ServerFailure(message: 'Test Failure', code: 90); 7 | 8 | test('Should ServerFailure is SubClass of Failure', () async { 9 | expect(tFailure, isA()); 10 | }); 11 | 12 | test('Should compare object ServerFailure is correctly', () async { 13 | expect(tFailure, tFailure); 14 | expect(tFailure == tFailure, true); 15 | }); 16 | 17 | test('Should toString object ServerFailure is correctly', () async { 18 | expect(tFailure.toString(), 'ServerFailure(Test Failure, 90)'); 19 | }); 20 | }); 21 | } 22 | -------------------------------------------------------------------------------- /test/core/network/network_info_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_starter/core/core.dart'; 2 | import 'package:flutter_test/flutter_test.dart'; 3 | import 'package:internet_connection_checker/internet_connection_checker.dart'; 4 | import 'package:mocktail/mocktail.dart'; 5 | 6 | class MockInternetConnectionChecker extends Mock 7 | implements InternetConnectionChecker {} 8 | 9 | void main() { 10 | late NetworkInfoImpl networkInfo; 11 | late MockInternetConnectionChecker mockInternetConnectionChecker; 12 | 13 | setUp(() { 14 | mockInternetConnectionChecker = MockInternetConnectionChecker(); 15 | networkInfo = NetworkInfoImpl(mockInternetConnectionChecker); 16 | }); 17 | 18 | group('core/network/', () { 19 | test( 20 | 'should forward the call to InternetConnectionChecker.hasConnection', 21 | () async { 22 | // arrange 23 | final tHasConnectionFuture = Future.value(true); 24 | 25 | when(() => mockInternetConnectionChecker.hasConnection) 26 | .thenAnswer((_) => tHasConnectionFuture); 27 | 28 | // actual 29 | final result = networkInfo.isConnected; 30 | 31 | // assert 32 | verify(() => mockInternetConnectionChecker.hasConnection).called(1); 33 | expect(result, tHasConnectionFuture); 34 | }, 35 | ); 36 | }); 37 | } 38 | -------------------------------------------------------------------------------- /test/core/pages/not_found_page_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_starter/core/core.dart'; 3 | import 'package:flutter_test/flutter_test.dart'; 4 | 5 | import '../../helpers/helpers.dart'; 6 | 7 | void main() { 8 | setUp(() async { 9 | await setupTestLocator(); 10 | }); 11 | 12 | group('core/pages/', () { 13 | testWidgets('Render Not Found Page', (tester) async { 14 | // First render Page 15 | await tester.pumpApp(const NotFoundPage()); 16 | 17 | // Check text 404 is available or not 18 | final text404 = find.text('404'); 19 | expect(text404, findsOneWidget); 20 | 21 | // Cek button back to home 22 | final backButton = find.byKey(const Key('back_to_home_button_not_found')); 23 | expect(backButton, findsOneWidget); 24 | }); 25 | }); 26 | } 27 | -------------------------------------------------------------------------------- /test/core/preferences/dimens_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_starter/core/core.dart'; 3 | import 'package:flutter_test/flutter_test.dart'; 4 | 5 | import '../../helpers/helpers.dart'; 6 | 7 | void main() { 8 | group('core/preferences/ ', () { 9 | testWidgets( 10 | 'Should equals Dimens.width/height with MediaQuery.of(context).size.width/height', 11 | (tester) async { 12 | final app = MediaQuery( 13 | data: const MediaQueryData(), 14 | child: Scaffold( 15 | body: Builder( 16 | builder: (context) { 17 | Future.microtask(() { 18 | final actualWidth = Dimens.width(context); 19 | final expectedWidth = MediaQuery.of(context).size.width; 20 | 21 | final actualHeight = Dimens.height(context); 22 | final expectedHeight = MediaQuery.of(context).size.height; 23 | 24 | expect(actualWidth, expectedWidth); 25 | expect(actualHeight, expectedHeight); 26 | }); 27 | 28 | return const SizedBox(); 29 | }, 30 | ), 31 | ), 32 | ); 33 | 34 | await tester.pumpApp(app); 35 | }); 36 | }); 37 | } 38 | -------------------------------------------------------------------------------- /test/core/preferences/themes/enum_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_starter/core/preferences/preferences.dart'; 2 | import 'package:flutter_test/flutter_test.dart'; 3 | 4 | void main() { 5 | group('core/preferences/themes/', () { 6 | // arrange 7 | const tDark = AppTheme.dark; 8 | const tLight = AppTheme.light; 9 | 10 | test('Should get name enum in String correctly', () { 11 | // assert 12 | expect(tDark.toText(), 'dark'); 13 | expect(tLight.toText(), 'light'); 14 | }); 15 | 16 | test('Should convert from AppTheme enum to ThemeData', () { 17 | expect(tDark.toTheme(), isA()); 18 | expect(tLight.toTheme(), isA()); 19 | 20 | expect(tDark.toTheme().data.primaryColor, AppColors.primaryColor); 21 | expect(tLight.toTheme().data.primaryColor, AppColors.primaryColor); 22 | }); 23 | }); 24 | } 25 | -------------------------------------------------------------------------------- /test/core/utils/string_parser_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_starter/core/core.dart'; 2 | import 'package:flutter_test/flutter_test.dart'; 3 | 4 | void main() { 5 | group('core/utils/', () { 6 | test('Should stringParse from dynamic value correctly', () { 7 | final actual1 = StringParser.parse('123'); 8 | final actual2 = StringParser.parse(2323983489348); 9 | final actual3 = StringParser.parse(0034934.034); 10 | final actual4 = StringParser.parse(null); 11 | final actual5 = StringParser.parse(null, fallbackValue: 'fallback'); 12 | 13 | expect(actual1, isA()); 14 | expect(actual1, '123'); 15 | expect(actual2, '2323983489348'); 16 | expect(actual3, '34934.034'); 17 | expect(actual4, ''); 18 | expect(actual5, 'fallback'); 19 | }); 20 | 21 | test('Should tryStringParse return null when incorrectly', () { 22 | final actual = StringParser.tryParse(null); 23 | 24 | expect(actual, null); 25 | }); 26 | }); 27 | } 28 | -------------------------------------------------------------------------------- /test/features/settings/domain/usecaes/get_language_setting_usecase_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutter_starter/core/core.dart'; 3 | import 'package:flutter_starter/features/settings/settings.dart'; 4 | import 'package:flutter_test/flutter_test.dart'; 5 | import 'package:mocktail/mocktail.dart'; 6 | 7 | import '../../../../utils/utils.dart'; 8 | 9 | class MockSettingsRepository extends Mock implements SettingsRepositoryImpl {} 10 | 11 | void main() { 12 | late GetLanguageSettingUseCase useCase; 13 | late MockSettingsRepository mockRepository; 14 | 15 | setUp(() { 16 | mockRepository = MockSettingsRepository(); 17 | useCase = GetLanguageSettingUseCase(mockRepository); 18 | }); 19 | 20 | final tLanguage = Language.fromJson(jsonFixture('language.json')); 21 | 22 | group('features/settings/domain/usecases/', () { 23 | test('Should get languageSetting data setting from the settings repository', 24 | () async { 25 | // arrange 26 | when(() => mockRepository.getLanguageSetting()) 27 | .thenAnswer((_) async => Right(tLanguage)); 28 | 29 | // actual 30 | final result = await useCase(const NoParams()); 31 | 32 | // assert 33 | expect(result, Right(tLanguage)); 34 | verify(() => mockRepository.getLanguageSetting()); 35 | verifyNoMoreInteractions(mockRepository); 36 | }); 37 | }); 38 | } 39 | -------------------------------------------------------------------------------- /test/features/settings/domain/usecaes/get_settings_usecase_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutter_starter/core/core.dart'; 3 | import 'package:flutter_starter/features/settings/settings.dart'; 4 | import 'package:flutter_test/flutter_test.dart'; 5 | import 'package:mocktail/mocktail.dart'; 6 | 7 | import '../../../../utils/utils.dart'; 8 | 9 | class MockSettingsRepository extends Mock implements SettingsRepositoryImpl {} 10 | 11 | void main() { 12 | late GetSettingsUseCase useCase; 13 | late MockSettingsRepository mockRepository; 14 | 15 | setUp(() { 16 | mockRepository = MockSettingsRepository(); 17 | useCase = GetSettingsUseCase(mockRepository); 18 | }); 19 | 20 | final tSettings = Settings.fromJson(jsonFixture('settings.json')); 21 | 22 | group('features/settings/domain/usecases/', () { 23 | test('Should get settings from the settings repository', () async { 24 | // arrange 25 | when(() => mockRepository.getSettings()) 26 | .thenAnswer((_) async => Right(tSettings)); 27 | 28 | // actual 29 | final result = await useCase(const NoParams()); 30 | 31 | // assert 32 | expect(result, Right(tSettings)); 33 | verify(() => mockRepository.getSettings()); 34 | verifyNoMoreInteractions(mockRepository); 35 | }); 36 | }); 37 | } 38 | -------------------------------------------------------------------------------- /test/features/settings/domain/usecaes/get_supported_language_usecase_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutter_starter/core/core.dart'; 3 | import 'package:flutter_starter/features/settings/settings.dart'; 4 | import 'package:flutter_starter/l10n/l10n.dart'; 5 | import 'package:flutter_test/flutter_test.dart'; 6 | 7 | void main() { 8 | late GetSupportedLanguageUseCase useCase; 9 | 10 | setUp(() { 11 | useCase = GetSupportedLanguageUseCase(); 12 | }); 13 | 14 | group('features/settings/domain/usecases/', () { 15 | test( 16 | 'Should get filter supportedLanguage from localization ' 17 | '& with static data Languages', () async { 18 | // actual 19 | final result = await useCase( 20 | SupportedLanguageParams( 21 | locales: AppLocalizations.supportedLocales, 22 | referenceLanguages: LanguagesData.data, 23 | ), 24 | ); 25 | 26 | // assert 27 | expect(result, isA>>()); 28 | expect( 29 | result.foldRight(0, (r, previous) => r.length), 30 | AppLocalizations.supportedLocales.length, 31 | ); 32 | }); 33 | }); 34 | } 35 | -------------------------------------------------------------------------------- /test/features/settings/domain/usecaes/get_theme_setting_usecase_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutter_starter/core/core.dart'; 3 | import 'package:flutter_starter/features/settings/settings.dart'; 4 | import 'package:flutter_test/flutter_test.dart'; 5 | import 'package:mocktail/mocktail.dart'; 6 | 7 | class MockSettingsRepository extends Mock implements SettingsRepositoryImpl {} 8 | 9 | void main() { 10 | late GetThemeSettingUseCase useCase; 11 | late MockSettingsRepository mockRepository; 12 | 13 | setUp(() { 14 | mockRepository = MockSettingsRepository(); 15 | useCase = GetThemeSettingUseCase(mockRepository); 16 | }); 17 | 18 | const tTheme = AppTheme.light; 19 | 20 | group('features/settings/domain/usecases/', () { 21 | test('Should get languageSetting data setting from the settings repository', 22 | () async { 23 | // arrange 24 | when(() => mockRepository.getThemeSetting()) 25 | .thenAnswer((_) async => const Right(tTheme)); 26 | 27 | // actual 28 | final result = await useCase(const NoParams()); 29 | 30 | // assert 31 | expect(result, const Right(tTheme)); 32 | verify(() => mockRepository.getThemeSetting()); 33 | verifyNoMoreInteractions(mockRepository); 34 | }); 35 | }); 36 | } 37 | -------------------------------------------------------------------------------- /test/features/settings/domain/usecaes/record_error_usecase_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_starter/features/settings/settings.dart'; 2 | import 'package:flutter_test/flutter_test.dart'; 3 | 4 | void main() { 5 | setUp(() {}); 6 | 7 | group('features/settings/domain/usecases/', () { 8 | const tInValidParams = RecordErrorParams( 9 | exception: 12, 10 | stackTrace: true, 11 | ); 12 | 13 | test('Should props is valid all properties in RecordErrorParams', () { 14 | // arrange 15 | final expectedResult = [12, true, null]; 16 | 17 | // actual 18 | final actualResult = tInValidParams.props; 19 | 20 | // assert 21 | expect(actualResult, expectedResult); 22 | }); 23 | }); 24 | } 25 | -------------------------------------------------------------------------------- /test/features/settings/domain/usecaes/save_settings_usecase_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutter_starter/core/core.dart'; 3 | import 'package:flutter_starter/features/settings/settings.dart'; 4 | import 'package:flutter_test/flutter_test.dart'; 5 | import 'package:mocktail/mocktail.dart'; 6 | 7 | import '../../../../utils/utils.dart'; 8 | 9 | class MockSettingsRepository extends Mock implements SettingsRepositoryImpl {} 10 | 11 | void main() { 12 | late SaveSettingsUseCase useCase; 13 | late MockSettingsRepository mockRepository; 14 | 15 | setUp(() { 16 | mockRepository = MockSettingsRepository(); 17 | useCase = SaveSettingsUseCase(mockRepository); 18 | }); 19 | 20 | final tSettings = Settings.fromJson(jsonFixture('settings.json')); 21 | 22 | group('features/settings/domain/usecases/', () { 23 | test('Should save all settings data to the settings repository correctly', 24 | () async { 25 | // arrange 26 | when(() => mockRepository.saveSettings(tSettings)) 27 | .thenAnswer((_) async => const Right(true)); 28 | 29 | // actual 30 | final result = await useCase(tSettings); 31 | 32 | // assert 33 | expect(result, const Right(true)); 34 | verify(() => mockRepository.saveSettings(tSettings)); 35 | verifyNoMoreInteractions(mockRepository); 36 | }); 37 | }); 38 | } 39 | -------------------------------------------------------------------------------- /test/features/settings/domain/usecaes/save_theme_setting_usecase_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutter_starter/core/core.dart'; 3 | import 'package:flutter_starter/features/settings/settings.dart'; 4 | import 'package:flutter_test/flutter_test.dart'; 5 | import 'package:mocktail/mocktail.dart'; 6 | 7 | class MockSettingsRepository extends Mock implements SettingsRepositoryImpl {} 8 | 9 | void main() { 10 | late SaveThemeSettingUseCase useCase; 11 | late MockSettingsRepository mockRepository; 12 | 13 | setUp(() { 14 | mockRepository = MockSettingsRepository(); 15 | useCase = SaveThemeSettingUseCase(mockRepository); 16 | }); 17 | 18 | const tTheme = AppTheme.light; 19 | 20 | group('features/settings/domain/usecases/', () { 21 | test('Should save theme setting to the settings repository correctly', 22 | () async { 23 | // arrange 24 | when(() => mockRepository.saveThemeSetting(tTheme)) 25 | .thenAnswer((_) async => const Right(true)); 26 | 27 | // actual 28 | final result = await useCase(tTheme); 29 | 30 | // assert 31 | expect(result, const Right(true)); 32 | verify(() => mockRepository.saveThemeSetting(tTheme)); 33 | verifyNoMoreInteractions(mockRepository); 34 | }); 35 | }); 36 | } 37 | -------------------------------------------------------------------------------- /test/fixtures/country.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "ID", 3 | "name": "Indonesia", 4 | "dial_code": "+62", 5 | "flag": "id.png" 6 | } 7 | -------------------------------------------------------------------------------- /test/fixtures/language.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "id", 3 | "name": "Indonesia" 4 | } -------------------------------------------------------------------------------- /test/fixtures/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "language": { 3 | "code":"id", 4 | "name":"Indonesia" 5 | }, 6 | "theme":"light" 7 | } 8 | -------------------------------------------------------------------------------- /test/helpers/helpers.dart: -------------------------------------------------------------------------------- 1 | export 'pump_app.dart'; 2 | export 'setup_test_locator.dart'; 3 | -------------------------------------------------------------------------------- /test/helpers/setup_test_locator.dart: -------------------------------------------------------------------------------- 1 | import 'dart:io'; 2 | 3 | import 'package:flutter/services.dart'; 4 | import 'package:flutter_starter/app/locator.dart'; 5 | import 'package:flutter_test/src/deprecated.dart'; 6 | 7 | Future setupTestLocator() async { 8 | _setupMockPathProvider(); 9 | 10 | await setupLocator(); 11 | } 12 | 13 | void _setupMockPathProvider() { 14 | var channelName = ''; 15 | if (Platform.isMacOS) { 16 | channelName = 'plugins.flutter.io/path_provider_macos'; 17 | } else if (Platform.isLinux) { 18 | channelName = 'plugins.flutter.io/path_provider_linux'; 19 | } else if (Platform.isWindows) { 20 | channelName = 'plugins.flutter.io/path_provider_windows'; 21 | } else { 22 | channelName = 'plugins.flutter.io/path_provider'; 23 | } 24 | 25 | final channel = MethodChannel(channelName); 26 | 27 | // ignore: cascade_invocations 28 | channel.setMockMethodCallHandler((MethodCall methodCall) async => '.'); 29 | } 30 | -------------------------------------------------------------------------------- /test/utils/utils.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | import 'dart:io'; 3 | 4 | String fixture(String name) { 5 | final dir = currentDirectory.path; 6 | return File('$dir/test/fixtures/$name').readAsStringSync(); 7 | } 8 | 9 | File assetFile(String name) { 10 | final dir = currentDirectory.path; 11 | return File('$dir/test/assets/$name'); 12 | } 13 | 14 | Map jsonFixture(String name) => 15 | json.decode(fixture(name)) as Map; 16 | 17 | // https://github.com/flutter/flutter/issues/20907 18 | Directory get currentDirectory { 19 | var directory = Directory.current; 20 | if (directory.path.endsWith('/test')) { 21 | directory = directory.parent; 22 | } 23 | return directory; 24 | } 25 | -------------------------------------------------------------------------------- /web/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/web/favicon.png -------------------------------------------------------------------------------- /web/icons/Icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/web/icons/Icon-192.png -------------------------------------------------------------------------------- /web/icons/Icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/web/icons/Icon-512.png -------------------------------------------------------------------------------- /web/icons/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisnuwiry/flutter-starter/a42fcc7e4574d7716bf1b82fb993e4dfa97483cc/web/icons/favicon.png -------------------------------------------------------------------------------- /web/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Flutter Starter", 3 | "short_name": "Flutter Starter", 4 | "start_url": ".", 5 | "display": "standalone", 6 | "background_color": "#8DC53F", 7 | "theme_color": "#8DC53F", 8 | "description": "A new Flutter project.", 9 | "orientation": "portrait-primary", 10 | "prefer_related_applications": false, 11 | "icons": [ 12 | { 13 | "src": "icons/Icon-192.png", 14 | "sizes": "192x192", 15 | "type": "image/png" 16 | }, 17 | { 18 | "src": "icons/Icon-512.png", 19 | "sizes": "512x512", 20 | "type": "image/png" 21 | } 22 | ] 23 | } 24 | --------------------------------------------------------------------------------