├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── PULL_REQUEST_TEMPLATE.md └── workflows │ └── tests.yml ├── .gitignore ├── .idea └── runConfigurations │ ├── development.xml │ ├── production.xml │ └── staging.xml ├── .metadata ├── .vscode ├── extensions.json └── launch.json ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── DISCLAIMER ├── Gemfile ├── LICENSE ├── Makefile ├── README.md ├── analysis_options.yaml ├── android ├── .gitignore ├── app │ ├── build.gradle │ └── src │ │ ├── debug │ │ └── AndroidManifest.xml │ │ ├── development │ │ └── res │ │ │ ├── drawable-hdpi │ │ │ └── splash.png │ │ │ ├── drawable-mdpi │ │ │ └── splash.png │ │ │ ├── drawable-nodpi │ │ │ └── app_widget_preview.png │ │ │ ├── drawable-v21 │ │ │ ├── back_imagen_widget.xml │ │ │ ├── back_imagen_widget_button.xml │ │ │ ├── background.png │ │ │ └── launch_background.xml │ │ │ ├── drawable-xhdpi │ │ │ └── splash.png │ │ │ ├── drawable-xxhdpi │ │ │ └── splash.png │ │ │ ├── drawable-xxxhdpi │ │ │ └── splash.png │ │ │ ├── drawable │ │ │ ├── background.png │ │ │ ├── bono.png │ │ │ ├── close.png │ │ │ ├── corp.png │ │ │ ├── datos.png │ │ │ ├── ic_launch_image.xml │ │ │ ├── ic_launcher_background.xml │ │ │ ├── ic_launcher_foreground.xml │ │ │ ├── launch_background.xml │ │ │ ├── quick_actions.xml │ │ │ └── saldo.png │ │ │ ├── layout │ │ │ ├── close_float_widget.xml │ │ │ ├── float_window.xml │ │ │ └── todo_app_widget.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_round.png │ │ │ └── launcher_icon.png │ │ │ ├── mipmap-mdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_round.png │ │ │ └── launcher_icon.png │ │ │ ├── mipmap-xhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_round.png │ │ │ └── launcher_icon.png │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_round.png │ │ │ └── launcher_icon.png │ │ │ ├── mipmap-xxxhdpi │ │ │ ├── back_widget_negro.png │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_round.png │ │ │ ├── ic_main_list_item2.png │ │ │ ├── ic_planes_datos_list_item1.png │ │ │ ├── ic_planes_sms_list_item1.png │ │ │ ├── ic_planes_voz_list_item1.png │ │ │ ├── ic_saldo_list_item4.png │ │ │ ├── ic_widget_button_apn.png │ │ │ ├── ic_widget_button_datos.png │ │ │ ├── ic_widget_button_wifi.png │ │ │ ├── ic_widget_demo.png │ │ │ └── launcher_icon.png │ │ │ ├── values-night │ │ │ ├── styles.xml │ │ │ └── themes.xml │ │ │ ├── values │ │ │ ├── attrs.xml │ │ │ ├── colors.xml │ │ │ ├── dimens.xml │ │ │ ├── ic_launcher_background.xml │ │ │ ├── strings.xml │ │ │ ├── styles.xml │ │ │ └── themes.xml │ │ │ └── xml │ │ │ └── todo_app_widget_info.xml │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ │ └── com │ │ │ │ └── cubanopensource │ │ │ │ └── todo │ │ │ │ └── TodoAppWidget.kt │ │ ├── kotlin │ │ │ └── com │ │ │ │ └── cubanopensource │ │ │ │ ├── FloatingWindow.kt │ │ │ │ └── MainActivity.kt │ │ └── res │ │ │ ├── drawable-hdpi │ │ │ └── splash.png │ │ │ ├── drawable-mdpi │ │ │ └── splash.png │ │ │ ├── drawable-nodpi │ │ │ └── app_widget_preview.png │ │ │ ├── drawable-v21 │ │ │ ├── back_imagen_widget.xml │ │ │ ├── back_imagen_widget_button.xml │ │ │ ├── background.png │ │ │ └── launch_background.xml │ │ │ ├── drawable-xhdpi │ │ │ └── splash.png │ │ │ ├── drawable-xxhdpi │ │ │ └── splash.png │ │ │ ├── drawable-xxxhdpi │ │ │ └── splash.png │ │ │ ├── drawable │ │ │ ├── background.png │ │ │ ├── bono.png │ │ │ ├── close.png │ │ │ ├── corp.png │ │ │ ├── datos.png │ │ │ ├── ic_launch_image.xml │ │ │ ├── ic_launcher_background.xml │ │ │ ├── ic_launcher_foreground.xml │ │ │ ├── launch_background.xml │ │ │ ├── quick_actions.xml │ │ │ └── saldo.png │ │ │ ├── layout │ │ │ ├── close_float_widget.xml │ │ │ ├── float_window.xml │ │ │ └── todo_app_widget.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_round.png │ │ │ └── launcher_icon.png │ │ │ ├── mipmap-mdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_round.png │ │ │ └── launcher_icon.png │ │ │ ├── mipmap-xhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_round.png │ │ │ └── launcher_icon.png │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_round.png │ │ │ └── launcher_icon.png │ │ │ ├── mipmap-xxxhdpi │ │ │ ├── back_widget_negro.png │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_round.png │ │ │ ├── ic_main_list_item2.png │ │ │ ├── ic_planes_datos_list_item1.png │ │ │ ├── ic_planes_sms_list_item1.png │ │ │ ├── ic_planes_voz_list_item1.png │ │ │ ├── ic_saldo_list_item4.png │ │ │ ├── ic_widget_button_apn.png │ │ │ ├── ic_widget_button_datos.png │ │ │ ├── ic_widget_button_wifi.png │ │ │ ├── ic_widget_demo.png │ │ │ └── launcher_icon.png │ │ │ ├── values-night │ │ │ ├── styles.xml │ │ │ └── themes.xml │ │ │ ├── values │ │ │ ├── attrs.xml │ │ │ ├── colors.xml │ │ │ ├── dimens.xml │ │ │ ├── ic_launcher_background.xml │ │ │ ├── strings.xml │ │ │ ├── styles.xml │ │ │ └── themes.xml │ │ │ └── xml │ │ │ └── todo_app_widget_info.xml │ │ ├── profile │ │ └── AndroidManifest.xml │ │ └── staging │ │ └── res │ │ ├── drawable-hdpi │ │ └── splash.png │ │ ├── drawable-mdpi │ │ └── splash.png │ │ ├── drawable-nodpi │ │ └── app_widget_preview.png │ │ ├── drawable-v21 │ │ ├── back_imagen_widget.xml │ │ ├── back_imagen_widget_button.xml │ │ ├── background.png │ │ └── launch_background.xml │ │ ├── drawable-xhdpi │ │ └── splash.png │ │ ├── drawable-xxhdpi │ │ └── splash.png │ │ ├── drawable-xxxhdpi │ │ └── splash.png │ │ ├── drawable │ │ ├── background.png │ │ ├── bono.png │ │ ├── close.png │ │ ├── corp.png │ │ ├── datos.png │ │ ├── ic_launch_image.xml │ │ ├── ic_launcher_background.xml │ │ ├── ic_launcher_foreground.xml │ │ ├── launch_background.xml │ │ ├── quick_actions.xml │ │ └── saldo.png │ │ ├── layout │ │ ├── close_float_widget.xml │ │ ├── float_window.xml │ │ └── todo_app_widget.xml │ │ ├── mipmap-anydpi-v26 │ │ ├── ic_launcher.xml │ │ └── ic_launcher_round.xml │ │ ├── mipmap-hdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_round.png │ │ └── launcher_icon.png │ │ ├── mipmap-mdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_round.png │ │ └── launcher_icon.png │ │ ├── mipmap-xhdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_round.png │ │ └── launcher_icon.png │ │ ├── mipmap-xxhdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_round.png │ │ └── launcher_icon.png │ │ ├── mipmap-xxxhdpi │ │ ├── back_widget_negro.png │ │ ├── ic_launcher.png │ │ ├── ic_launcher_round.png │ │ ├── ic_main_list_item2.png │ │ ├── ic_planes_datos_list_item1.png │ │ ├── ic_planes_sms_list_item1.png │ │ ├── ic_planes_voz_list_item1.png │ │ ├── ic_saldo_list_item4.png │ │ ├── ic_widget_button_apn.png │ │ ├── ic_widget_button_datos.png │ │ ├── ic_widget_button_wifi.png │ │ ├── ic_widget_demo.png │ │ └── launcher_icon.png │ │ ├── values-night │ │ ├── styles.xml │ │ └── themes.xml │ │ ├── values │ │ ├── attrs.xml │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── ic_launcher_background.xml │ │ ├── strings.xml │ │ ├── styles.xml │ │ └── themes.xml │ │ └── xml │ │ └── todo_app_widget_info.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ └── gradle-wrapper.properties └── settings.gradle ├── assets ├── fonts │ └── Montserrat-Regular.ttf └── images │ ├── logo.png │ └── splash.png ├── config └── ussd_codes.json ├── fastlane ├── .gitignore ├── Appfile └── Fastfile ├── file_structure.txt ├── flutter_native_splash.yaml ├── go ├── .gitignore ├── assets │ └── icon.png ├── cmd │ ├── main.go │ └── options.go ├── go.mod ├── go.sum └── hover.yaml ├── ios ├── .gitignore ├── Flutter │ ├── AppFrameworkInfo.plist │ ├── Debug.xcconfig │ └── Release.xcconfig ├── 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 │ │ ├── Icon-App-1024x1024@1x.png │ │ ├── Icon-App-20x20@1x.png │ │ ├── Icon-App-20x20@2x.png │ │ ├── Icon-App-20x20@3x.png │ │ ├── Icon-App-29x29@1x.png │ │ ├── Icon-App-29x29@2x.png │ │ ├── Icon-App-29x29@3x.png │ │ ├── Icon-App-40x40@1x.png │ │ ├── Icon-App-40x40@2x.png │ │ ├── Icon-App-40x40@3x.png │ │ ├── Icon-App-60x60@2x.png │ │ ├── Icon-App-60x60@3x.png │ │ ├── Icon-App-76x76@1x.png │ │ ├── Icon-App-76x76@2x.png │ │ └── Icon-App-83.5x83.5@2x.png │ ├── Contents.json │ ├── LaunchBackground.imageset │ │ ├── Contents.json │ │ └── background.png │ └── LaunchImage.imageset │ │ ├── Contents.json │ │ ├── LaunchImage.png │ │ ├── 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 │ ├── app_bloc_observer.dart │ ├── app_environment.dart │ ├── app_router.dart │ ├── bloc │ │ ├── bloc.dart │ │ └── theme │ │ │ ├── theme_bloc.dart │ │ │ ├── theme_bloc.freezed.dart │ │ │ ├── theme_event.dart │ │ │ └── theme_state.dart │ ├── data │ │ ├── core │ │ │ ├── core.dart │ │ │ ├── exceptions │ │ │ │ └── exceptions.dart │ │ │ ├── platform │ │ │ │ ├── contacts.dart │ │ │ │ ├── http_client │ │ │ │ │ ├── adapters │ │ │ │ │ │ ├── http_browser_adapter.dart │ │ │ │ │ │ ├── http_native_adapter.dart │ │ │ │ │ │ └── http_stub_adapter.dart │ │ │ │ │ ├── http_client.dart │ │ │ │ │ └── http_logger.dart │ │ │ │ ├── platform.dart │ │ │ │ └── platform_channels.dart │ │ │ ├── result │ │ │ │ ├── result.dart │ │ │ │ └── result.freezed.dart │ │ │ └── utils │ │ │ │ ├── icons.dart │ │ │ │ ├── parse_json.dart │ │ │ │ └── utils.dart │ │ ├── data.dart │ │ ├── datasources │ │ │ ├── datasources.dart │ │ │ ├── nauta │ │ │ │ ├── nauta.dart │ │ │ │ ├── nauta_account_datasource.dart │ │ │ │ └── nauta_session_local_datasource.dart │ │ │ └── ussd │ │ │ │ ├── ussd.dart │ │ │ │ ├── ussd_assets_datasource.dart │ │ │ │ ├── ussd_local_datasource.dart │ │ │ │ ├── ussd_recent_datasource.dart │ │ │ │ └── ussd_remote_datasource.dart │ │ ├── models │ │ │ ├── models.dart │ │ │ ├── nauta │ │ │ │ ├── account │ │ │ │ │ ├── nauta_account.dart │ │ │ │ │ └── nauta_account.g.dart │ │ │ │ ├── nauta.dart │ │ │ │ └── session │ │ │ │ │ ├── nauta_session.dart │ │ │ │ │ └── nauta_session.g.dart │ │ │ └── ussd │ │ │ │ ├── category │ │ │ │ ├── ussd_category.dart │ │ │ │ └── ussd_category.g.dart │ │ │ │ ├── code │ │ │ │ ├── ussd_code.dart │ │ │ │ └── ussd_code.g.dart │ │ │ │ ├── code_field │ │ │ │ ├── ussd_code_field.dart │ │ │ │ └── ussd_code_field.g.dart │ │ │ │ ├── ussd.dart │ │ │ │ └── ussd_item.dart │ │ └── repositories │ │ │ ├── nauta_repository.dart │ │ │ ├── repositories.dart │ │ │ └── ussd_repository.dart │ ├── dependencies │ │ ├── dependencies.config.dart │ │ ├── dependencies.dart │ │ └── providers.dart │ ├── theme │ │ ├── app_bar_theme.dart │ │ ├── dark.dart │ │ ├── light.dart │ │ └── theme.dart │ └── widgets │ │ ├── app_bar_title.dart │ │ ├── app_drawer.dart │ │ ├── app_drawer_tile.dart │ │ ├── app_tab_bar.dart │ │ ├── loading.dart │ │ ├── theme_icon_button.dart │ │ └── widgets.dart ├── gen │ ├── assets.gen.dart │ └── fonts.gen.dart ├── home │ ├── home.dart │ ├── router │ │ ├── home_location.dart │ │ ├── home_page.dart │ │ └── router.dart │ ├── view │ │ ├── home_view.dart │ │ └── view.dart │ └── widgets │ │ └── widgets.dart ├── l10n │ ├── arb │ │ ├── app_en.arb │ │ └── app_es.arb │ └── l10n.dart ├── main_development.dart ├── main_production.dart ├── main_staging.dart ├── nauta │ ├── bloc │ │ ├── accounts │ │ │ ├── accounts_bloc.dart │ │ │ ├── accounts_bloc.freezed.dart │ │ │ ├── accounts_event.dart │ │ │ └── accounts_state.dart │ │ ├── bloc.dart │ │ └── save_account │ │ │ └── save_account_bloc.dart │ ├── nauta.dart │ ├── router │ │ ├── accounts_page.dart │ │ ├── nauta_location.dart │ │ ├── router.dart │ │ └── save_account_page.dart │ ├── view │ │ ├── accounts_view.dart │ │ ├── save_account_view.dart │ │ └── view.dart │ └── widgets │ │ ├── account_tile.dart │ │ └── widgets.dart ├── settings │ ├── bloc │ │ ├── bloc.dart │ │ ├── settings │ │ │ ├── settings_bloc.dart │ │ │ ├── settings_bloc.freezed.dart │ │ │ ├── settings_event.dart │ │ │ └── settings_state.dart │ │ └── update_ussd │ │ │ ├── update_ussd_bloc.dart │ │ │ ├── update_ussd_bloc.freezed.dart │ │ │ ├── update_ussd_event.dart │ │ │ └── update_ussd_state.dart │ ├── router │ │ ├── disclaimer_page.dart │ │ ├── router.dart │ │ ├── settings_location.dart │ │ ├── settings_page.dart │ │ └── update_ussd_page.dart │ ├── settings.dart │ ├── view │ │ ├── disclaimer_view.dart │ │ ├── settings_view.dart │ │ ├── update_ussd_view.dart │ │ └── view.dart │ └── widgets │ │ ├── settings_button.dart │ │ ├── settings_switch.dart │ │ └── widgets.dart └── ussd_codes │ ├── bloc │ ├── bloc.dart │ └── ussd_code │ │ ├── ussd_code_bloc.dart │ │ ├── ussd_code_bloc.freezed.dart │ │ ├── ussd_code_event.dart │ │ └── ussd_code_state.dart │ ├── router │ ├── router.dart │ ├── ussd_category_page.dart │ ├── ussd_code_form_page.dart │ └── ussd_codes_location.dart │ ├── ussd_codes.dart │ ├── view │ ├── ussd_category_view.dart │ ├── ussd_code_form_view.dart │ ├── ussd_code_view.dart │ └── view.dart │ └── widgets │ ├── ussd_code_form.dart │ ├── ussd_item_widget.dart │ └── widgets.dart ├── lines_of_code.txt ├── linux ├── .gitignore ├── CMakeLists.txt ├── flutter │ ├── CMakeLists.txt │ ├── generated_plugin_registrant.cc │ ├── generated_plugin_registrant.h │ └── generated_plugins.cmake ├── main.cc ├── my_application.cc └── my_application.h ├── logo.png ├── pubspec.lock ├── pubspec.yaml ├── splash.png ├── test ├── datasources │ └── ussd_remote_datasource_test.dart ├── fixtures │ ├── fixture_reader.dart │ ├── ussd_category.json │ ├── ussd_code.json │ └── ussd_code_field.json └── models │ └── ussd │ ├── ussd_category_test.dart │ ├── ussd_code_field_test.dart │ └── ussd_code_test.dart └── web ├── favicon.png ├── icons ├── Icon-192.png ├── Icon-512.png └── favicon.png ├── index.html ├── manifest.json └── splash ├── img ├── dark-1x.png ├── dark-2x.png ├── dark-3x.png ├── dark-4x.png ├── light-1x.png ├── light-2x.png ├── light-3x.png └── light-4x.png └── style.css /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Informe de error 3 | about: Crea un informe de error para ayudarnos a mejorar 4 | title: '[BUG] ' 5 | labels: 'bug' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe el error** 11 | Una descripción clara y concisa de cuál es el error. 12 | 13 | **Reproducir** 14 | Pasos para reproducir el comportamiento: 15 | 1. Vaya a '...' 16 | 2. Haga clic en '....' 17 | 3. Desplácese hacia abajo hasta '....' 18 | 4. Ver error 19 | 20 | **Comportamiento esperado** 21 | Una descripción clara y concisa de lo que esperaba que sucediera. 22 | 23 | **Capturas de pantalla** 24 | Si corresponde, agregue capturas de pantalla para ayudar a explicar su problema. 25 | 26 | **Escritorio (complete la siguiente información):** 27 | - SO: [p. Ej. iOS] 28 | - Navegador [p. Ej. cromo, safari] 29 | - Versión [p. Ej. 22] 30 | 31 | **Smartphone (complete la siguiente información):** 32 | - Dispositivo: [p. Ej. iphone 6] 33 | - SO: [p. Ej. iOS8.1] 34 | - Navegador [p. Ej. navegador de valores, safari] 35 | - Versión [p. Ej. 22] 36 | 37 | **Contexto adicional** 38 | Agregue aquí cualquier otro contexto sobre el problema. 39 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Solicitud de característica 3 | about: Sugerir una idea para este proyecto 4 | title: '[FEATURE] ' 5 | labels: 'feature' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **¿Su solicitud de característica está relacionada con un problema? Por favor describa.** 11 | Una descripción clara y concisa de cuál es el problema. Ex. Siempre me frustra cuando [...] 12 | 13 | **Describe la solución que te gustaría** 14 | Una descripción clara y concisa de lo que quieres que suceda. 15 | 16 | **Describe las alternativas que has considerado** 17 | Una descripción clara y concisa de cualquier solución o característica alternativa que haya considerado. 18 | 19 | **Contexto adicional** 20 | Agregue cualquier otro contexto o capturas de pantalla sobre la solicitud de función aquí. 21 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 8 | 9 | ## Descripción 10 | 11 | 12 | 13 | ## Tipo de cambio 14 | 15 | 16 | 17 | - [] ✨ Nueva función (cambio inquebrantable que agrega funcionalidad) 18 | - [] 🛠️ Corrección de errores (cambio permanente que soluciona un problema) 19 | - [] ❌ Cambio rotundo (corrección o característica que haría que cambiara la funcionalidad existente) 20 | - [] 🧹 Refactor de código 21 | - [] ✅ Cambio de configuración de compilación 22 | - [] 📝 Documentación 23 | - [] 🗑️ Tarea -------------------------------------------------------------------------------- /.github/workflows/tests.yml: -------------------------------------------------------------------------------- 1 | on: [push, pull_request, workflow_dispatch] 2 | jobs: 3 | tests: 4 | runs-on: ubuntu-latest 5 | steps: 6 | - name: Setup Action 7 | uses: actions/checkout@v2 8 | - name: Setup Java 9 | uses: actions/setup-java@v1 10 | with: 11 | java-version: '12.x' 12 | - name: Setup Flutter 13 | uses: subosito/flutter-action@v1 14 | with: 15 | channel: 'stable' 16 | - name: Run Tests 17 | run: | 18 | flutter pub get 19 | flutter test -------------------------------------------------------------------------------- /.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/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | // See https://go.microsoft.com/fwlink/?LinkId=827846 3 | // for the documentation about the extensions.json format 4 | "recommendations": [ 5 | "dart-code.dart-code", 6 | "dart-code.flutter", 7 | "felixangelov.bloc" 8 | ] 9 | } 10 | -------------------------------------------------------------------------------- /.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": ["--flavor", "staging", "--target", "lib/main_staging.dart"] 25 | }, 26 | { 27 | "name": "Launch production", 28 | "request": "launch", 29 | "type": "dart", 30 | "program": "lib/main_production.dart", 31 | "args": ["--flavor", "production", "--target", "lib/main_production.dart"] 32 | } 33 | ] 34 | } 35 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Historial de Cambios 2 | 3 | ## 2.0.0 4 | 5 | Cambios en la interfaz de usuario. 6 | Agregada pantalla de acciones recientes. -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source "https://rubygems.org" 2 | 3 | gem "fastlane" 4 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | BSD 3-Clause License 2 | 3 | Copyright (c) 2021, TODO Devs 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions are met: 8 | 9 | 1. Redistributions of source code must retain the above copyright notice, this 10 | list of conditions and the following disclaimer. 11 | 12 | 2. Redistributions in binary form must reproduce the above copyright notice, 13 | this list of conditions and the following disclaimer in the documentation 14 | and/or other materials provided with the distribution. 15 | 16 | 3. Neither the name of the copyright holder nor the names of its 17 | contributors may be used to endorse or promote products derived from 18 | this software without specific prior written permission. 19 | 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 24 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 26 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 27 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 28 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | .PHONY: generate 2 | generate: 3 | flutter packages pub run build_runner build --delete-conflicting-outputs 4 | 5 | .PHONY: run 6 | run: 7 | flutter run --flavor development --target lib/main_development.dart 8 | 9 | .PHONY: run-prod 10 | run-prod: 11 | flutter run --flavor production --target lib/main_production.dart 12 | 13 | .PHONY: build 14 | build: 15 | flutter build apk --flavor production --target lib/main_production.dart --target-platform=android-arm 16 | 17 | .PHONY: build-stg 18 | build-stg: 19 | flutter build apk --flavor staging --target lib/main_staging.dart --target-platform=android-arm 20 | 21 | .PHONY: build-dev 22 | build-dev: 23 | flutter build apk --flavor development --target lib/main_development.dart --target-platform=android-arm 24 | 25 | .PHONY: splash 26 | splash: 27 | flutter packages pub run flutter_native_splash:create 28 | rm -r android/app/src/development/res 29 | rm -r android/app/src/staging/res 30 | cp -r android/app/src/main/res android/app/src/development 31 | cp -r android/app/src/main/res android/app/src/staging 32 | 33 | .PHONY: icon 34 | icon: 35 | flutter pub run flutter_launcher_icons:main 36 | rm -r android/app/src/development/res 37 | rm -r android/app/src/staging/res 38 | cp -r android/app/src/main/res android/app/src/development 39 | cp -r android/app/src/main/res android/app/src/staging 40 | 41 | .PHONY: report 42 | report: 43 | rm file_structure.txt 44 | tree lib/ > file_structure.txt 45 | rm lines_of_code.txt 46 | find lib/ -name '*.dart' | xargs wc -l > lines_of_code.txt -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # TODO 2 | 3 | ![logo](logo.png) 4 | 5 | [![tests](https://github.com/todo-devs/todo/actions/workflows/tests.yml/badge.svg?branch=main)](https://github.com/todo-devs/todo/actions?query=workflow%3Atests) 6 | [![Last commit](https://img.shields.io/github/last-commit/todo-devs/todo.svg?style=flat)](https://github.com/todo-devs/todo/commits) 7 | [![GitHub commit activity](https://img.shields.io/github/commit-activity/m/todo-devs/todo)](https://github.com/todo-devs/todo/commits) 8 | [![Github Stars](https://img.shields.io/github/stars/todo-devs/todo?style=flat&logo=github)](https://github.com/todo-devs/todo/stargazers) 9 | [![Github Forks](https://img.shields.io/github/forks/todo-devs/todo?style=flat&logo=github)](https://github.com/todo-devs/todo/network/members) 10 | [![Github Watchers](https://img.shields.io/github/watchers/todo-devs/todo?style=flat&logo=github)](https://github.com/todo-devs/todo) 11 | [![GitHub contributors](https://img.shields.io/github/contributors/todo-devs/todo)](https://github.com/todo-devs/todo/graphs/contributors) 12 | 13 | Aplicación auxiliar para ayudar al usuario a consultar y acceder a los servicios de ETECSA. 14 | 15 | -------------------------------------------------------------------------------- /analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: package:very_good_analysis/analysis_options.2.3.0.yaml 2 | linter: 3 | rules: 4 | public_member_api_docs: false 5 | constant_identifier_names: false 6 | unawaited_futures: false 7 | 8 | analyzer: 9 | strong-mode: 10 | implicit-dynamic: true 11 | exclude: 12 | - "**/*.g.dart" 13 | - "**/*.freezed.dart" 14 | - "**/dependencies.config.dart" 15 | errors: 16 | invalid_annotation_target: ignore 17 | -------------------------------------------------------------------------------- /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 | **/*.keystore 13 | **/*.jks 14 | **/google-services.json -------------------------------------------------------------------------------- /android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/app/src/development/res/drawable-hdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/development/res/drawable-hdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/development/res/drawable-mdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/development/res/drawable-mdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/development/res/drawable-nodpi/app_widget_preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/development/res/drawable-nodpi/app_widget_preview.png -------------------------------------------------------------------------------- /android/app/src/development/res/drawable-v21/back_imagen_widget.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | -------------------------------------------------------------------------------- /android/app/src/development/res/drawable-v21/back_imagen_widget_button.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | -------------------------------------------------------------------------------- /android/app/src/development/res/drawable-v21/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/development/res/drawable-v21/background.png -------------------------------------------------------------------------------- /android/app/src/development/res/drawable-v21/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/app/src/development/res/drawable-xhdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/development/res/drawable-xhdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/development/res/drawable-xxhdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/development/res/drawable-xxhdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/development/res/drawable-xxxhdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/development/res/drawable-xxxhdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/development/res/drawable/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/development/res/drawable/background.png -------------------------------------------------------------------------------- /android/app/src/development/res/drawable/bono.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/development/res/drawable/bono.png -------------------------------------------------------------------------------- /android/app/src/development/res/drawable/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/development/res/drawable/close.png -------------------------------------------------------------------------------- /android/app/src/development/res/drawable/corp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/development/res/drawable/corp.png -------------------------------------------------------------------------------- /android/app/src/development/res/drawable/datos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/development/res/drawable/datos.png -------------------------------------------------------------------------------- /android/app/src/development/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/app/src/development/res/drawable/quick_actions.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /android/app/src/development/res/drawable/saldo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/development/res/drawable/saldo.png -------------------------------------------------------------------------------- /android/app/src/development/res/layout/close_float_widget.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 14 | -------------------------------------------------------------------------------- /android/app/src/development/res/layout/float_window.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/development/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/development/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-hdpi/launcher_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/development/res/mipmap-hdpi/launcher_icon.png -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/development/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/development/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-mdpi/launcher_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/development/res/mipmap-mdpi/launcher_icon.png -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/development/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/development/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-xhdpi/launcher_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/development/res/mipmap-xhdpi/launcher_icon.png -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/development/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/development/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-xxhdpi/launcher_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/development/res/mipmap-xxhdpi/launcher_icon.png -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-xxxhdpi/back_widget_negro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/development/res/mipmap-xxxhdpi/back_widget_negro.png -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/development/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/development/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-xxxhdpi/ic_main_list_item2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/development/res/mipmap-xxxhdpi/ic_main_list_item2.png -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-xxxhdpi/ic_planes_datos_list_item1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/development/res/mipmap-xxxhdpi/ic_planes_datos_list_item1.png -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-xxxhdpi/ic_planes_sms_list_item1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/development/res/mipmap-xxxhdpi/ic_planes_sms_list_item1.png -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-xxxhdpi/ic_planes_voz_list_item1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/development/res/mipmap-xxxhdpi/ic_planes_voz_list_item1.png -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-xxxhdpi/ic_saldo_list_item4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/development/res/mipmap-xxxhdpi/ic_saldo_list_item4.png -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-xxxhdpi/ic_widget_button_apn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/development/res/mipmap-xxxhdpi/ic_widget_button_apn.png -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-xxxhdpi/ic_widget_button_datos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/development/res/mipmap-xxxhdpi/ic_widget_button_datos.png -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-xxxhdpi/ic_widget_button_wifi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/development/res/mipmap-xxxhdpi/ic_widget_button_wifi.png -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-xxxhdpi/ic_widget_demo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/development/res/mipmap-xxxhdpi/ic_widget_demo.png -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-xxxhdpi/launcher_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/development/res/mipmap-xxxhdpi/launcher_icon.png -------------------------------------------------------------------------------- /android/app/src/development/res/values-night/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 16 | 19 | -------------------------------------------------------------------------------- /android/app/src/development/res/values-night/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /android/app/src/development/res/values/attrs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /android/app/src/development/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | #FFE1F5FE 3 | #FF81D4FA 4 | #FF039BE5 5 | #FF01579B 6 | -------------------------------------------------------------------------------- /android/app/src/development/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 0dp 9 | 25.0dip 10 | 40.0dip 11 | -------------------------------------------------------------------------------- /android/app/src/development/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #000000 4 | -------------------------------------------------------------------------------- /android/app/src/development/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | EXAMPLE 4 | Add widget 5 | -------------------------------------------------------------------------------- /android/app/src/development/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 16 | 19 | -------------------------------------------------------------------------------- /android/app/src/development/res/values/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /android/app/src/development/res/xml/todo_app_widget_info.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-hdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/main/res/drawable-hdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-mdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/main/res/drawable-mdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-nodpi/app_widget_preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/main/res/drawable-nodpi/app_widget_preview.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-v21/back_imagen_widget.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-v21/back_imagen_widget_button.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-v21/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/main/res/drawable-v21/background.png -------------------------------------------------------------------------------- /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-xhdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/main/res/drawable-xhdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-xxhdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/main/res/drawable-xxhdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-xxxhdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/main/res/drawable-xxxhdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/main/res/drawable/background.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/bono.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/main/res/drawable/bono.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/main/res/drawable/close.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/corp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/main/res/drawable/corp.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/datos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/main/res/drawable/datos.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/quick_actions.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/saldo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/main/res/drawable/saldo.png -------------------------------------------------------------------------------- /android/app/src/main/res/layout/close_float_widget.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 14 | -------------------------------------------------------------------------------- /android/app/src/main/res/layout/float_window.xml: -------------------------------------------------------------------------------- 1 | 2 | 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/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/launcher_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/main/res/mipmap-hdpi/launcher_icon.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/launcher_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/main/res/mipmap-mdpi/launcher_icon.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/launcher_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/main/res/mipmap-xhdpi/launcher_icon.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/back_widget_negro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/main/res/mipmap-xxxhdpi/back_widget_negro.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_main_list_item2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/main/res/mipmap-xxxhdpi/ic_main_list_item2.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_planes_datos_list_item1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/main/res/mipmap-xxxhdpi/ic_planes_datos_list_item1.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_planes_sms_list_item1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/main/res/mipmap-xxxhdpi/ic_planes_sms_list_item1.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_planes_voz_list_item1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/main/res/mipmap-xxxhdpi/ic_planes_voz_list_item1.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_saldo_list_item4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/main/res/mipmap-xxxhdpi/ic_saldo_list_item4.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_widget_button_apn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/main/res/mipmap-xxxhdpi/ic_widget_button_apn.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_widget_button_datos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/main/res/mipmap-xxxhdpi/ic_widget_button_datos.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_widget_button_wifi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/main/res/mipmap-xxxhdpi/ic_widget_button_wifi.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_widget_demo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/main/res/mipmap-xxxhdpi/ic_widget_demo.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png -------------------------------------------------------------------------------- /android/app/src/main/res/values-night/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 16 | 19 | -------------------------------------------------------------------------------- /android/app/src/main/res/values-night/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/attrs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | #FFE1F5FE 3 | #FF81D4FA 4 | #FF039BE5 5 | #FF01579B 6 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 0dp 9 | 25.0dip 10 | 40.0dip 11 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #000000 4 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | EXAMPLE 4 | Add widget 5 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 16 | 19 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /android/app/src/main/res/xml/todo_app_widget_info.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/app/src/staging/res/drawable-hdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/staging/res/drawable-hdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/staging/res/drawable-mdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/staging/res/drawable-mdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/staging/res/drawable-nodpi/app_widget_preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/staging/res/drawable-nodpi/app_widget_preview.png -------------------------------------------------------------------------------- /android/app/src/staging/res/drawable-v21/back_imagen_widget.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | -------------------------------------------------------------------------------- /android/app/src/staging/res/drawable-v21/back_imagen_widget_button.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | -------------------------------------------------------------------------------- /android/app/src/staging/res/drawable-v21/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/staging/res/drawable-v21/background.png -------------------------------------------------------------------------------- /android/app/src/staging/res/drawable-v21/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/app/src/staging/res/drawable-xhdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/staging/res/drawable-xhdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/staging/res/drawable-xxhdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/staging/res/drawable-xxhdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/staging/res/drawable-xxxhdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/staging/res/drawable-xxxhdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/staging/res/drawable/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/staging/res/drawable/background.png -------------------------------------------------------------------------------- /android/app/src/staging/res/drawable/bono.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/staging/res/drawable/bono.png -------------------------------------------------------------------------------- /android/app/src/staging/res/drawable/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/staging/res/drawable/close.png -------------------------------------------------------------------------------- /android/app/src/staging/res/drawable/corp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/staging/res/drawable/corp.png -------------------------------------------------------------------------------- /android/app/src/staging/res/drawable/datos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/staging/res/drawable/datos.png -------------------------------------------------------------------------------- /android/app/src/staging/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/app/src/staging/res/drawable/quick_actions.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /android/app/src/staging/res/drawable/saldo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/staging/res/drawable/saldo.png -------------------------------------------------------------------------------- /android/app/src/staging/res/layout/close_float_widget.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 14 | -------------------------------------------------------------------------------- /android/app/src/staging/res/layout/float_window.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/app/src/staging/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /android/app/src/staging/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /android/app/src/staging/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/staging/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/staging/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/staging/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/staging/res/mipmap-hdpi/launcher_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/staging/res/mipmap-hdpi/launcher_icon.png -------------------------------------------------------------------------------- /android/app/src/staging/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/staging/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/staging/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/staging/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/staging/res/mipmap-mdpi/launcher_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/staging/res/mipmap-mdpi/launcher_icon.png -------------------------------------------------------------------------------- /android/app/src/staging/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/staging/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/staging/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/staging/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/staging/res/mipmap-xhdpi/launcher_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/staging/res/mipmap-xhdpi/launcher_icon.png -------------------------------------------------------------------------------- /android/app/src/staging/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/staging/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/staging/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/staging/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/staging/res/mipmap-xxhdpi/launcher_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/staging/res/mipmap-xxhdpi/launcher_icon.png -------------------------------------------------------------------------------- /android/app/src/staging/res/mipmap-xxxhdpi/back_widget_negro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/staging/res/mipmap-xxxhdpi/back_widget_negro.png -------------------------------------------------------------------------------- /android/app/src/staging/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/staging/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/staging/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/staging/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/staging/res/mipmap-xxxhdpi/ic_main_list_item2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/staging/res/mipmap-xxxhdpi/ic_main_list_item2.png -------------------------------------------------------------------------------- /android/app/src/staging/res/mipmap-xxxhdpi/ic_planes_datos_list_item1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/staging/res/mipmap-xxxhdpi/ic_planes_datos_list_item1.png -------------------------------------------------------------------------------- /android/app/src/staging/res/mipmap-xxxhdpi/ic_planes_sms_list_item1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/staging/res/mipmap-xxxhdpi/ic_planes_sms_list_item1.png -------------------------------------------------------------------------------- /android/app/src/staging/res/mipmap-xxxhdpi/ic_planes_voz_list_item1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/staging/res/mipmap-xxxhdpi/ic_planes_voz_list_item1.png -------------------------------------------------------------------------------- /android/app/src/staging/res/mipmap-xxxhdpi/ic_saldo_list_item4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/staging/res/mipmap-xxxhdpi/ic_saldo_list_item4.png -------------------------------------------------------------------------------- /android/app/src/staging/res/mipmap-xxxhdpi/ic_widget_button_apn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/staging/res/mipmap-xxxhdpi/ic_widget_button_apn.png -------------------------------------------------------------------------------- /android/app/src/staging/res/mipmap-xxxhdpi/ic_widget_button_datos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/staging/res/mipmap-xxxhdpi/ic_widget_button_datos.png -------------------------------------------------------------------------------- /android/app/src/staging/res/mipmap-xxxhdpi/ic_widget_button_wifi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/staging/res/mipmap-xxxhdpi/ic_widget_button_wifi.png -------------------------------------------------------------------------------- /android/app/src/staging/res/mipmap-xxxhdpi/ic_widget_demo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/staging/res/mipmap-xxxhdpi/ic_widget_demo.png -------------------------------------------------------------------------------- /android/app/src/staging/res/mipmap-xxxhdpi/launcher_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/android/app/src/staging/res/mipmap-xxxhdpi/launcher_icon.png -------------------------------------------------------------------------------- /android/app/src/staging/res/values-night/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 16 | 19 | -------------------------------------------------------------------------------- /android/app/src/staging/res/values-night/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /android/app/src/staging/res/values/attrs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /android/app/src/staging/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | #FFE1F5FE 3 | #FF81D4FA 4 | #FF039BE5 5 | #FF01579B 6 | -------------------------------------------------------------------------------- /android/app/src/staging/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 0dp 9 | 25.0dip 10 | 40.0dip 11 | -------------------------------------------------------------------------------- /android/app/src/staging/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #000000 4 | -------------------------------------------------------------------------------- /android/app/src/staging/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | EXAMPLE 4 | Add widget 5 | -------------------------------------------------------------------------------- /android/app/src/staging/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 16 | 19 | -------------------------------------------------------------------------------- /android/app/src/staging/res/values/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /android/app/src/staging/res/xml/todo_app_widget_info.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | ext.kotlin_version = '1.5.0' 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 | classpath 'com.google.gms:google-services:4.3.10' 12 | } 13 | } 14 | 15 | allprojects { 16 | repositories { 17 | google() 18 | mavenCentral() 19 | } 20 | } 21 | 22 | rootProject.buildDir = '../build' 23 | subprojects { 24 | project.buildDir = "${rootProject.buildDir}/${project.name}" 25 | project.evaluationDependsOn(':app') 26 | } 27 | 28 | task clean(type: Delete) { 29 | delete rootProject.buildDir 30 | } 31 | -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 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/fonts/Montserrat-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/assets/fonts/Montserrat-Regular.ttf -------------------------------------------------------------------------------- /assets/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/assets/images/logo.png -------------------------------------------------------------------------------- /assets/images/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/assets/images/splash.png -------------------------------------------------------------------------------- /fastlane/.gitignore: -------------------------------------------------------------------------------- 1 | *.md 2 | *.xml -------------------------------------------------------------------------------- /fastlane/Appfile: -------------------------------------------------------------------------------- 1 | json_key_file("") # Path to the json secret file - Follow https://docs.fastlane.tools/actions/supply/#setup to get one 2 | package_name("com.cubanopensource.todo") # e.g. com.krausefx.app 3 | -------------------------------------------------------------------------------- /fastlane/Fastfile: -------------------------------------------------------------------------------- 1 | # This file contains the fastlane.tools configuration 2 | # You can find the documentation at https://docs.fastlane.tools 3 | # 4 | # For a list of all available actions, check out 5 | # 6 | # https://docs.fastlane.tools/actions 7 | # 8 | # For a list of all available plugins, check out 9 | # 10 | # https://docs.fastlane.tools/plugins/available-plugins 11 | # 12 | 13 | # Uncomment the line if you want fastlane to automatically update itself 14 | # update_fastlane 15 | 16 | default_platform(:android) 17 | 18 | platform :android do 19 | desc "Build development flavor" 20 | lane :build_development do 21 | build_number = number_of_commits() 22 | sh "flutter clean" 23 | sh "flutter pub get" 24 | sh "flutter build apk -t lib/main_development.dart --flavor development --build-number=#{build_number}" 25 | end 26 | 27 | desc "Build staging flavor" 28 | lane :build_staging do 29 | build_number = number_of_commits() 30 | sh "flutter clean" 31 | sh "flutter pub get" 32 | sh "flutter build apk -t lib/main_staging.dart --flavor staging --build-number=#{build_number}" 33 | end 34 | 35 | desc "Build production flavor" 36 | lane :build_production do 37 | build_number = number_of_commits() 38 | sh "flutter clean" 39 | sh "flutter pub get" 40 | sh "flutter build apk -t lib/main.dart --flavor production --build-number=#{build_number}" 41 | end 42 | end -------------------------------------------------------------------------------- /flutter_native_splash.yaml: -------------------------------------------------------------------------------- 1 | flutter_native_splash: 2 | color: "#163e72" 3 | image: "splash.png" -------------------------------------------------------------------------------- /go/.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | .last_goflutter_check 3 | .last_go-flutter_check 4 | -------------------------------------------------------------------------------- /go/assets/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/go/assets/icon.png -------------------------------------------------------------------------------- /go/cmd/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "fmt" 5 | "image" 6 | _ "image/png" 7 | "os" 8 | "path/filepath" 9 | "strings" 10 | 11 | "github.com/go-flutter-desktop/go-flutter" 12 | "github.com/pkg/errors" 13 | ) 14 | 15 | // vmArguments may be set by hover at compile-time 16 | var vmArguments string 17 | 18 | func main() { 19 | // DO NOT EDIT, add options in options.go 20 | mainOptions := []flutter.Option{ 21 | flutter.OptionVMArguments(strings.Split(vmArguments, ";")), 22 | flutter.WindowIcon(iconProvider), 23 | } 24 | err := flutter.Run(append(options, mainOptions...)...) 25 | if err != nil { 26 | fmt.Println(err) 27 | os.Exit(1) 28 | } 29 | } 30 | 31 | func iconProvider() ([]image.Image, error) { 32 | execPath, err := os.Executable() 33 | if err != nil { 34 | return nil, errors.Wrap(err, "failed to resolve executable path") 35 | } 36 | execPath, err = filepath.EvalSymlinks(execPath) 37 | if err != nil { 38 | return nil, errors.Wrap(err, "failed to eval symlinks for executable path") 39 | } 40 | imgFile, err := os.Open(filepath.Join(filepath.Dir(execPath), "assets", "icon.png")) 41 | if err != nil { 42 | return nil, errors.Wrap(err, "failed to open assets/icon.png") 43 | } 44 | img, _, err := image.Decode(imgFile) 45 | if err != nil { 46 | return nil, errors.Wrap(err, "failed to decode image") 47 | } 48 | return []image.Image{img}, nil 49 | } 50 | -------------------------------------------------------------------------------- /go/cmd/options.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "github.com/go-flutter-desktop/go-flutter" 5 | ) 6 | 7 | var options = []flutter.Option{ 8 | flutter.WindowInitialDimensions(800, 1280), 9 | } 10 | -------------------------------------------------------------------------------- /go/go.mod: -------------------------------------------------------------------------------- 1 | module github.com/todo-devs/todo/go 2 | 3 | go 1.16 4 | 5 | require ( 6 | github.com/go-flutter-desktop/go-flutter v0.43.0 7 | github.com/pkg/errors v0.9.1 8 | ) 9 | -------------------------------------------------------------------------------- /go/hover.yaml: -------------------------------------------------------------------------------- 1 | #application-name: "TODO" # Uncomment to modify this value. 2 | #executable-name: "todo" # Uncomment to modify this value. Only lowercase a-z, numbers, underscores and no spaces 3 | #package-name: "todo" # Uncomment to modify this value. Only lowercase a-z, numbers and no underscores or spaces 4 | organization-name: "com.cubanopensource" 5 | license: "BSD3" # MANDATORY: Fill in your SPDX license name: https://spdx.org/licenses 6 | target: lib/main_production.dart 7 | # opengl: "none" # Uncomment this line if you have trouble with your OpenGL driver (https://github.com/go-flutter-desktop/go-flutter/issues/272) 8 | docker: false 9 | engine-version: "" # change to a engine version commit 10 | -------------------------------------------------------------------------------- /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 | 8.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /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 | 8 | -------------------------------------------------------------------------------- /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/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/100.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/1024.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/114.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/120.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/128.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/144.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/152.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/16.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/167.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/172.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/172.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/180.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/196.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/196.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/20.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/216.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/216.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/256.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/29.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/32.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/40.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/48.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/50.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/512.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/55.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/55.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/57.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/58.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/60.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/64.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/72.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/76.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/80.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/87.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/88.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/88.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/100.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/1024.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/114.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/120.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/128.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/144.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/152.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/16.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/167.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/172.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/172.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/180.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/196.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/196.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/20.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/216.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/216.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/256.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/29.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/32.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/40.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/48.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/50.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/512.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/55.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/55.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/57.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/58.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/60.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/64.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/72.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/76.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/80.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/87.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/88.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/88.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/100.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/114.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/128.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/144.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/152.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/16.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/167.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/172.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/172.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/196.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/196.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/20.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/216.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/216.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/256.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/29.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/32.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/40.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/48.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/50.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/512.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/55.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/55.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/57.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/58.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/64.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/72.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/76.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/80.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/88.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/88.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchBackground.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "background.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchBackground.imageset/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/LaunchBackground.imageset/background.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "LaunchImage.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.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/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_es.arb 3 | output-localization-file: app_localizations.dart 4 | nullable-getter: false 5 | -------------------------------------------------------------------------------- /lib/app/app_bloc_observer.dart: -------------------------------------------------------------------------------- 1 | import 'dart:developer'; 2 | 3 | import 'package:bloc/bloc.dart'; 4 | 5 | class AppBlocObserver extends BlocObserver { 6 | @override 7 | void onChange(BlocBase bloc, Change change) { 8 | super.onChange(bloc, change); 9 | log('onChange(${bloc.runtimeType}, $change)'); 10 | } 11 | 12 | @override 13 | void onError(BlocBase bloc, Object error, StackTrace stackTrace) { 14 | log('onError(${bloc.runtimeType}, $error, $stackTrace)'); 15 | super.onError(bloc, error, stackTrace); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /lib/app/app_environment.dart: -------------------------------------------------------------------------------- 1 | import 'package:injectable/injectable.dart'; 2 | 3 | abstract class AppEnvironment { 4 | const AppEnvironment({ 5 | required this.appVersion, 6 | required this.ussdCodesRemote, 7 | required this.ussdCodesHashRemote, 8 | required this.telegramGroupUrl, 9 | }); 10 | 11 | final String appVersion; 12 | final String ussdCodesRemote; 13 | final String ussdCodesHashRemote; 14 | final String telegramGroupUrl; 15 | } 16 | 17 | @prod 18 | @Injectable(as: AppEnvironment) 19 | class AppEnvironmentProd extends AppEnvironment { 20 | AppEnvironmentProd() 21 | : super( 22 | appVersion: 'TODO v2.0', 23 | ussdCodesHashRemote: 24 | 'https://todo-devs.github.io/todo-json/hash.json', 25 | ussdCodesRemote: 'https://todo-devs.github.io/todo-json/config.json', 26 | telegramGroupUrl: 'https://t.me/todoapp_cuba', 27 | ); 28 | } 29 | 30 | @dev 31 | @Injectable(as: AppEnvironment) 32 | class AppEnvironmentDev extends AppEnvironment { 33 | AppEnvironmentDev() 34 | : super( 35 | appVersion: 'TODO v2.0-beta', 36 | ussdCodesHashRemote: 37 | 'https://todo-devs.github.io/todo-json/hash.json', 38 | ussdCodesRemote: 'https://todo-devs.github.io/todo-json/config.json', 39 | telegramGroupUrl: 'https://t.me/todoapp_cuba', 40 | ); 41 | } 42 | -------------------------------------------------------------------------------- /lib/app/bloc/bloc.dart: -------------------------------------------------------------------------------- 1 | export 'theme/theme_bloc.dart'; 2 | -------------------------------------------------------------------------------- /lib/app/bloc/theme/theme_bloc.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | import 'package:bloc/bloc.dart'; 4 | import 'package:flutter/material.dart'; 5 | import 'package:freezed_annotation/freezed_annotation.dart'; 6 | import 'package:injectable/injectable.dart'; 7 | import 'package:shared_preferences/shared_preferences.dart'; 8 | 9 | part 'theme_event.dart'; 10 | part 'theme_state.dart'; 11 | part 'theme_bloc.freezed.dart'; 12 | 13 | @injectable 14 | class ThemeBloc extends Bloc { 15 | ThemeBloc( 16 | this._storage, 17 | ) : super(ThemeState.initial()) { 18 | on<_SetLight>(_setLight); 19 | on<_SetDark>(_setDark); 20 | 21 | _loadFromStorage(); 22 | } 23 | 24 | final SharedPreferences _storage; 25 | 26 | Future _loadFromStorage() async { 27 | final theme = _storage.getInt('theme'); 28 | 29 | if (theme != null) { 30 | if (theme == ThemeMode.light.index) { 31 | add(const _SetLight()); 32 | } 33 | } 34 | } 35 | 36 | Future _setDark( 37 | _SetDark event, 38 | Emitter emit, 39 | ) async { 40 | emit(const ThemeState(themeMode: ThemeMode.dark)); 41 | 42 | await _storage.setInt('theme', ThemeMode.dark.index); 43 | } 44 | 45 | Future _setLight( 46 | _SetLight event, 47 | Emitter emit, 48 | ) async { 49 | emit(const ThemeState(themeMode: ThemeMode.light)); 50 | 51 | await _storage.setInt('theme', ThemeMode.light.index); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /lib/app/bloc/theme/theme_event.dart: -------------------------------------------------------------------------------- 1 | part of 'theme_bloc.dart'; 2 | 3 | @freezed 4 | class ThemeEvent with _$ThemeEvent { 5 | const factory ThemeEvent.setDark() = _SetDark; 6 | const factory ThemeEvent.setLight() = _SetLight; 7 | } 8 | -------------------------------------------------------------------------------- /lib/app/bloc/theme/theme_state.dart: -------------------------------------------------------------------------------- 1 | part of 'theme_bloc.dart'; 2 | 3 | @freezed 4 | class ThemeState with _$ThemeState { 5 | const factory ThemeState({ 6 | required ThemeMode themeMode, 7 | }) = _ThemeState; 8 | 9 | factory ThemeState.initial() => const ThemeState( 10 | themeMode: ThemeMode.dark, 11 | ); 12 | } 13 | -------------------------------------------------------------------------------- /lib/app/data/core/core.dart: -------------------------------------------------------------------------------- 1 | export 'exceptions/exceptions.dart'; 2 | export 'platform/platform.dart'; 3 | export 'result/result.dart'; 4 | export 'utils/utils.dart'; 5 | -------------------------------------------------------------------------------- /lib/app/data/core/exceptions/exceptions.dart: -------------------------------------------------------------------------------- 1 | class ParseUssdCodeException implements Exception { 2 | const ParseUssdCodeException({ 3 | required this.message, 4 | this.map, 5 | }); 6 | 7 | final String message; 8 | final Map? map; 9 | } 10 | 11 | class UssdCodesCacheException implements Exception {} 12 | 13 | class UssdCodesServerException implements Exception { 14 | const UssdCodesServerException(this.message); 15 | 16 | final String message; 17 | } 18 | -------------------------------------------------------------------------------- /lib/app/data/core/platform/contacts.dart: -------------------------------------------------------------------------------- 1 | import 'package:contact_picker/contact_picker.dart'; 2 | 3 | final ContactPicker _contactPicker = ContactPicker(); 4 | 5 | Future getContactPhoneNumber() async { 6 | final contact = await _contactPicker.selectContact(); 7 | 8 | return contact?.phoneNumber 9 | .toString() 10 | .replaceAll('+53', '') 11 | .replaceAll(' ', '') 12 | .replaceAll(RegExp('([a-zA-Z])'), '') 13 | .replaceAll('()', '') 14 | .replaceAll('-', ''); 15 | } 16 | -------------------------------------------------------------------------------- /lib/app/data/core/platform/http_client/adapters/http_browser_adapter.dart: -------------------------------------------------------------------------------- 1 | import 'package:dio/adapter_browser.dart'; 2 | 3 | BrowserHttpClientAdapter httpAdapter() => BrowserHttpClientAdapter(); 4 | -------------------------------------------------------------------------------- /lib/app/data/core/platform/http_client/adapters/http_native_adapter.dart: -------------------------------------------------------------------------------- 1 | import 'package:dio/adapter.dart'; 2 | 3 | DefaultHttpClientAdapter httpAdapter() => DefaultHttpClientAdapter(); 4 | -------------------------------------------------------------------------------- /lib/app/data/core/platform/http_client/adapters/http_stub_adapter.dart: -------------------------------------------------------------------------------- 1 | import 'package:dio/dio.dart'; 2 | 3 | HttpClientAdapter httpAdapter() => throw UnsupportedError(''); 4 | -------------------------------------------------------------------------------- /lib/app/data/core/platform/http_client/http_client.dart: -------------------------------------------------------------------------------- 1 | import 'package:dio/dio.dart'; 2 | import 'package:injectable/injectable.dart'; 3 | 4 | // ignore_for_file: always_use_package_imports 5 | import 'adapters/http_stub_adapter.dart' 6 | if (dart.library.html) 'adapters/http_browser_adapter.dart' 7 | if (dart.library.io) 'adapters/http_native_adapter.dart'; 8 | 9 | import 'http_logger.dart'; 10 | 11 | @injectable 12 | class HttpClient with DioMixin implements Dio { 13 | HttpClient() { 14 | options = BaseOptions( 15 | headers: { 16 | 'Accept-Encoding': 'gzip, deflate, br', 17 | 'Content-Type': 'application/json', 18 | }, 19 | ); 20 | 21 | httpClientAdapter = httpAdapter(); 22 | 23 | interceptors.add(HttpLogger()); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /lib/app/data/core/platform/platform.dart: -------------------------------------------------------------------------------- 1 | export 'contacts.dart'; 2 | export 'http_client/http_client.dart'; 3 | export 'platform_channels.dart'; 4 | -------------------------------------------------------------------------------- /lib/app/data/core/platform/platform_channels.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/services.dart'; 2 | 3 | const platform = MethodChannel('com.cubanopensource.todo'); 4 | 5 | //! Call 6 | Future callTo(String number) async { 7 | return platform.invokeMethod('callTo', number); 8 | } 9 | 10 | //! Show float widget 11 | Future getShowWidgetPreference() async { 12 | return platform.invokeMethod('getShowWidgetPreference'); 13 | } 14 | 15 | Future setTrueShowWidget() async { 16 | await platform.invokeMethod('setTrueShowWidget'); 17 | } 18 | 19 | Future setFalseShowWidget() async { 20 | await platform.invokeMethod('setFalseShowWidget'); 21 | } 22 | 23 | //! Turn on/off wifi 24 | Future getTurnOffWifiPreference() async { 25 | return platform.invokeMethod('getTurnOffWifiPreference'); 26 | } 27 | 28 | Future setTrueTurnOffWifi() async { 29 | await platform.invokeMethod('setTrueTurnOffWifi'); 30 | } 31 | 32 | Future setFalseTurnOffWifi() async { 33 | await platform.invokeMethod('setFalseTurnOffWifi'); 34 | } 35 | 36 | Future turnOnWifi() async { 37 | await platform.invokeMethod('turnOnWifi'); 38 | } 39 | 40 | Future turnOffWifi() async { 41 | await platform.invokeMethod('turnOffWifi'); 42 | } 43 | -------------------------------------------------------------------------------- /lib/app/data/core/result/result.dart: -------------------------------------------------------------------------------- 1 | import 'package:freezed_annotation/freezed_annotation.dart'; 2 | 3 | part 'result.freezed.dart'; 4 | 5 | @freezed 6 | class Result with _$Result { 7 | const factory Result.success({required T data}) = _Success; 8 | const factory Result.error({required String message}) = _Error; 9 | } 10 | -------------------------------------------------------------------------------- /lib/app/data/core/utils/icons.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | const strIcons = { 4 | 'attach_money': Icons.attach_money, 5 | 'code': Icons.code, 6 | 'monetization_on': Icons.monetization_on, 7 | 'data_usage': Icons.data_usage, 8 | 'people': Icons.people, 9 | 'call': Icons.call, 10 | 'sms': Icons.sms, 11 | 'phone_in_talk': Icons.phone_in_talk, 12 | 'mobile_screen_share': Icons.mobile_screen_share, 13 | 'star_border': Icons.star_border, 14 | 'shopping_cart': Icons.shopping_cart, 15 | 'network_cell': Icons.network_cell, 16 | 'network_locked': Icons.network_locked, 17 | 'cancel': Icons.cancel, 18 | 'offline_pin': Icons.offline_pin, 19 | 'add_circle_outline': Icons.add_circle_outline, 20 | 'remove_circle_outline': Icons.remove_circle_outline, 21 | 'list': Icons.list, 22 | 'lock_open': Icons.lock_open, 23 | 'screen_lock_landscape': Icons.screen_lock_landscape, 24 | 'mail': Icons.mail, 25 | 'phone_android': Icons.phone_android, 26 | 'vpn_key': Icons.vpn_key 27 | }; 28 | -------------------------------------------------------------------------------- /lib/app/data/core/utils/parse_json.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | 3 | import 'package:flutter/foundation.dart'; 4 | 5 | Future> parseJson(String text) { 6 | return compute(_parseAndDecode, text); 7 | } 8 | 9 | Map _parseAndDecode(String response) { 10 | return json.decode( 11 | response, 12 | ) as Map; 13 | } 14 | -------------------------------------------------------------------------------- /lib/app/data/core/utils/utils.dart: -------------------------------------------------------------------------------- 1 | export 'icons.dart'; 2 | export 'parse_json.dart'; 3 | -------------------------------------------------------------------------------- /lib/app/data/data.dart: -------------------------------------------------------------------------------- 1 | export 'core/core.dart'; 2 | export 'datasources/datasources.dart'; 3 | export 'models/models.dart'; 4 | export 'repositories/repositories.dart'; 5 | -------------------------------------------------------------------------------- /lib/app/data/datasources/datasources.dart: -------------------------------------------------------------------------------- 1 | export 'nauta/nauta.dart'; 2 | export 'ussd/ussd.dart'; 3 | -------------------------------------------------------------------------------- /lib/app/data/datasources/nauta/nauta.dart: -------------------------------------------------------------------------------- 1 | export 'nauta_account_datasource.dart'; 2 | export 'nauta_session_local_datasource.dart'; 3 | -------------------------------------------------------------------------------- /lib/app/data/datasources/nauta/nauta_session_local_datasource.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | 3 | import 'package:injectable/injectable.dart'; 4 | import 'package:shared_preferences/shared_preferences.dart'; 5 | import 'package:todo/app/app.dart'; 6 | 7 | const NAUTA_SESSION_KEY = 'NAUTA_SESSION'; 8 | 9 | @injectable 10 | class NautaSessionLocalDataSource { 11 | NautaSessionLocalDataSource(this._storage); 12 | 13 | final SharedPreferences _storage; 14 | 15 | Future saveSession(NautaSession session) async { 16 | final data = json.encode(session.toJson()); 17 | 18 | await _storage.setString(NAUTA_SESSION_KEY, data); 19 | } 20 | 21 | Future getSession() async { 22 | final jsonString = _storage.getString(NAUTA_SESSION_KEY); 23 | 24 | if (jsonString != null) { 25 | final parsedJson = await parseJson(jsonString); 26 | 27 | return NautaSession.fromJson(parsedJson); 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /lib/app/data/datasources/ussd/ussd.dart: -------------------------------------------------------------------------------- 1 | export 'ussd_assets_datasource.dart'; 2 | export 'ussd_local_datasource.dart'; 3 | export 'ussd_recent_datasource.dart'; 4 | export 'ussd_remote_datasource.dart'; 5 | -------------------------------------------------------------------------------- /lib/app/data/datasources/ussd/ussd_assets_datasource.dart: -------------------------------------------------------------------------------- 1 | import 'dart:developer'; 2 | 3 | import 'package:flutter/services.dart'; 4 | import 'package:injectable/injectable.dart'; 5 | import 'package:todo/app/app.dart'; 6 | 7 | @injectable 8 | class UssdAssetsDatasource { 9 | Future> getUssdCodes() async { 10 | try { 11 | final data = await rootBundle.loadString(Assets.config.ussdCodes); 12 | 13 | final parsedJson = await parseJson(data); 14 | 15 | parsedJson['name'] = ''; 16 | parsedJson['description'] = ''; 17 | parsedJson['icon'] = ''; 18 | parsedJson['type'] = 'category'; 19 | 20 | return UssdCategory.fromJson(parsedJson).items; 21 | } on Exception catch (e) { 22 | log(e.toString()); 23 | rethrow; 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /lib/app/data/datasources/ussd/ussd_remote_datasource.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | 3 | import 'package:injectable/injectable.dart'; 4 | import 'package:todo/app/app.dart'; 5 | 6 | @injectable 7 | class UssdRemoteDatasource { 8 | const UssdRemoteDatasource( 9 | this._environment, 10 | this._http, 11 | ); 12 | 13 | final AppEnvironment _environment; 14 | final HttpClient _http; 15 | 16 | Future getHash() async { 17 | return _getData(_environment.ussdCodesHashRemote); 18 | } 19 | 20 | Future> getUssdCodes() async { 21 | final jsonString = await _getData(_environment.ussdCodesRemote); 22 | final parsedJson = json.decode(jsonString) as Map; 23 | 24 | parsedJson['name'] = ''; 25 | parsedJson['description'] = ''; 26 | parsedJson['icon'] = ''; 27 | parsedJson['type'] = 'category'; 28 | 29 | return UssdCategory.fromJson(parsedJson).items; 30 | } 31 | 32 | Future _getData(String url) { 33 | return _http.get>(url).then( 34 | (response) { 35 | if (response.statusCode == 200) { 36 | return json.encode(response.data); 37 | } else { 38 | throw UssdCodesServerException( 39 | 'Request failed: ${response.realUri}\n' 40 | 'StatusCode: ${response.statusCode}\n' 41 | 'Body: ${response.data}', 42 | ); 43 | } 44 | }, 45 | ).timeout( 46 | const Duration(seconds: 5), 47 | onTimeout: () => throw const UssdCodesServerException('Request timeout'), 48 | ); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /lib/app/data/models/models.dart: -------------------------------------------------------------------------------- 1 | export 'nauta/nauta.dart'; 2 | export 'ussd/ussd.dart'; 3 | -------------------------------------------------------------------------------- /lib/app/data/models/nauta/account/nauta_account.dart: -------------------------------------------------------------------------------- 1 | import 'package:equatable/equatable.dart'; 2 | import 'package:json_annotation/json_annotation.dart'; 3 | 4 | part 'nauta_account.g.dart'; 5 | 6 | @JsonSerializable() 7 | class NautaAccount extends Equatable { 8 | const NautaAccount({ 9 | this.id, 10 | required this.username, 11 | required this.password, 12 | }); 13 | 14 | factory NautaAccount.fromJson(Map json) => 15 | _$NautaAccountFromJson(json); 16 | 17 | Map toJson() => _$NautaAccountToJson(this); 18 | 19 | final int? id; 20 | final String username; 21 | final String password; 22 | 23 | @override 24 | List get props => [ 25 | id, 26 | username, 27 | password, 28 | ]; 29 | } 30 | -------------------------------------------------------------------------------- /lib/app/data/models/nauta/account/nauta_account.g.dart: -------------------------------------------------------------------------------- 1 | // GENERATED CODE - DO NOT MODIFY BY HAND 2 | 3 | part of 'nauta_account.dart'; 4 | 5 | // ************************************************************************** 6 | // JsonSerializableGenerator 7 | // ************************************************************************** 8 | 9 | NautaAccount _$NautaAccountFromJson(Map json) { 10 | return NautaAccount( 11 | id: json['id'] as int?, 12 | username: json['username'] as String, 13 | password: json['password'] as String, 14 | ); 15 | } 16 | 17 | Map _$NautaAccountToJson(NautaAccount instance) => 18 | { 19 | 'id': instance.id, 20 | 'username': instance.username, 21 | 'password': instance.password, 22 | }; 23 | -------------------------------------------------------------------------------- /lib/app/data/models/nauta/nauta.dart: -------------------------------------------------------------------------------- 1 | export 'account/nauta_account.dart'; 2 | export 'session/nauta_session.dart'; 3 | -------------------------------------------------------------------------------- /lib/app/data/models/nauta/session/nauta_session.dart: -------------------------------------------------------------------------------- 1 | import 'package:equatable/equatable.dart'; 2 | import 'package:json_annotation/json_annotation.dart'; 3 | 4 | part 'nauta_session.g.dart'; 5 | 6 | @JsonSerializable() 7 | class NautaSession extends Equatable { 8 | const NautaSession({ 9 | required this.loginAction, 10 | required this.csrfhw, 11 | required this.wlanuserip, 12 | required this.attributeUuid, 13 | required this.ssid, 14 | required this.loggerId, 15 | }); 16 | 17 | factory NautaSession.fromJson(Map json) => 18 | _$NautaSessionFromJson(json); 19 | 20 | final String loginAction; 21 | final String csrfhw; 22 | final String wlanuserip; 23 | final String attributeUuid; 24 | final String ssid; 25 | final String loggerId; 26 | 27 | Map toJson() => _$NautaSessionToJson(this); 28 | 29 | NautaSession copyWith({ 30 | String? loginAction, 31 | String? csrfhw, 32 | String? wlanuserip, 33 | String? attributeUuid, 34 | String? ssid, 35 | String? loggerId, 36 | }) => 37 | NautaSession( 38 | loginAction: loginAction ?? this.loginAction, 39 | csrfhw: csrfhw ?? this.csrfhw, 40 | wlanuserip: wlanuserip ?? this.wlanuserip, 41 | attributeUuid: attributeUuid ?? this.attributeUuid, 42 | ssid: ssid ?? this.ssid, 43 | loggerId: loggerId ?? this.loggerId, 44 | ); 45 | 46 | @override 47 | List get props => [ 48 | loginAction, 49 | csrfhw, 50 | wlanuserip, 51 | attributeUuid, 52 | ssid, 53 | loggerId, 54 | ]; 55 | } 56 | -------------------------------------------------------------------------------- /lib/app/data/models/nauta/session/nauta_session.g.dart: -------------------------------------------------------------------------------- 1 | // GENERATED CODE - DO NOT MODIFY BY HAND 2 | 3 | part of 'nauta_session.dart'; 4 | 5 | // ************************************************************************** 6 | // JsonSerializableGenerator 7 | // ************************************************************************** 8 | 9 | NautaSession _$NautaSessionFromJson(Map json) { 10 | return NautaSession( 11 | loginAction: json['loginAction'] as String, 12 | csrfhw: json['csrfhw'] as String, 13 | wlanuserip: json['wlanuserip'] as String, 14 | attributeUuid: json['attributeUuid'] as String, 15 | ssid: json['ssid'] as String, 16 | loggerId: json['loggerId'] as String, 17 | ); 18 | } 19 | 20 | Map _$NautaSessionToJson(NautaSession instance) => 21 | { 22 | 'loginAction': instance.loginAction, 23 | 'csrfhw': instance.csrfhw, 24 | 'wlanuserip': instance.wlanuserip, 25 | 'attributeUuid': instance.attributeUuid, 26 | 'ssid': instance.ssid, 27 | 'loggerId': instance.loggerId, 28 | }; 29 | -------------------------------------------------------------------------------- /lib/app/data/models/ussd/category/ussd_category.g.dart: -------------------------------------------------------------------------------- 1 | // GENERATED CODE - DO NOT MODIFY BY HAND 2 | 3 | part of 'ussd_category.dart'; 4 | 5 | // ************************************************************************** 6 | // JsonSerializableGenerator 7 | // ************************************************************************** 8 | 9 | UssdCategory _$UssdCategoryFromJson(Map json) { 10 | return UssdCategory( 11 | name: json['name'] as String, 12 | description: json['description'] as String, 13 | icon: json['icon'] as String, 14 | type: json['type'] as String, 15 | items: UssdCategory._fieldsFromJson(json['items'] as List), 16 | ); 17 | } 18 | 19 | Map _$UssdCategoryToJson(UssdCategory instance) => 20 | { 21 | 'name': instance.name, 22 | 'description': instance.description, 23 | 'icon': instance.icon, 24 | 'type': instance.type, 25 | 'items': UssdCategory._fieldsToJson(instance.items), 26 | }; 27 | -------------------------------------------------------------------------------- /lib/app/data/models/ussd/code/ussd_code.dart: -------------------------------------------------------------------------------- 1 | import 'package:json_annotation/json_annotation.dart'; 2 | import 'package:todo/app/app.dart'; 3 | 4 | part 'ussd_code.g.dart'; 5 | 6 | @JsonSerializable() 7 | class UssdCode extends UssdItem { 8 | const UssdCode({ 9 | required String name, 10 | required String description, 11 | required String icon, 12 | required String type, 13 | required this.code, 14 | required this.fields, 15 | }) : super( 16 | name: name, 17 | description: description, 18 | icon: icon, 19 | type: type, 20 | ); 21 | 22 | factory UssdCode.fromJson(Map json) => 23 | _$UssdCodeFromJson(json); 24 | 25 | Map toJson() => _$UssdCodeToJson(this); 26 | 27 | final String code; 28 | 29 | @JsonKey(toJson: _fieldsToJson) 30 | final List fields; 31 | 32 | static List> _fieldsToJson( 33 | List fieldList, 34 | ) => 35 | fieldList.map((e) => e.toJson()).toList(); 36 | 37 | @override 38 | List get props => super.props..addAll([code, fields]); 39 | } 40 | -------------------------------------------------------------------------------- /lib/app/data/models/ussd/code/ussd_code.g.dart: -------------------------------------------------------------------------------- 1 | // GENERATED CODE - DO NOT MODIFY BY HAND 2 | 3 | part of 'ussd_code.dart'; 4 | 5 | // ************************************************************************** 6 | // JsonSerializableGenerator 7 | // ************************************************************************** 8 | 9 | UssdCode _$UssdCodeFromJson(Map json) { 10 | return UssdCode( 11 | name: json['name'] as String, 12 | description: json['description'] as String, 13 | icon: json['icon'] as String, 14 | type: json['type'] as String, 15 | code: json['code'] as String, 16 | fields: (json['fields'] as List) 17 | .map((e) => UssdCodeField.fromJson(e as Map)) 18 | .toList(), 19 | ); 20 | } 21 | 22 | Map _$UssdCodeToJson(UssdCode instance) => { 23 | 'name': instance.name, 24 | 'description': instance.description, 25 | 'icon': instance.icon, 26 | 'type': instance.type, 27 | 'code': instance.code, 28 | 'fields': UssdCode._fieldsToJson(instance.fields), 29 | }; 30 | -------------------------------------------------------------------------------- /lib/app/data/models/ussd/code_field/ussd_code_field.dart: -------------------------------------------------------------------------------- 1 | import 'package:equatable/equatable.dart'; 2 | import 'package:json_annotation/json_annotation.dart'; 3 | 4 | part 'ussd_code_field.g.dart'; 5 | 6 | @JsonSerializable() 7 | class UssdCodeField extends Equatable { 8 | const UssdCodeField({ 9 | required this.name, 10 | required this.type, 11 | }); 12 | 13 | factory UssdCodeField.fromJson(Map json) => 14 | _$UssdCodeFieldFromJson(json); 15 | 16 | Map toJson() => _$UssdCodeFieldToJson(this); 17 | 18 | final String name; 19 | final String type; 20 | 21 | @override 22 | List get props => [ 23 | name, 24 | type, 25 | ]; 26 | } 27 | -------------------------------------------------------------------------------- /lib/app/data/models/ussd/code_field/ussd_code_field.g.dart: -------------------------------------------------------------------------------- 1 | // GENERATED CODE - DO NOT MODIFY BY HAND 2 | 3 | part of 'ussd_code_field.dart'; 4 | 5 | // ************************************************************************** 6 | // JsonSerializableGenerator 7 | // ************************************************************************** 8 | 9 | UssdCodeField _$UssdCodeFieldFromJson(Map json) { 10 | return UssdCodeField( 11 | name: json['name'] as String, 12 | type: json['type'] as String, 13 | ); 14 | } 15 | 16 | Map _$UssdCodeFieldToJson(UssdCodeField instance) => 17 | { 18 | 'name': instance.name, 19 | 'type': instance.type, 20 | }; 21 | -------------------------------------------------------------------------------- /lib/app/data/models/ussd/ussd.dart: -------------------------------------------------------------------------------- 1 | export 'category/ussd_category.dart'; 2 | export 'code/ussd_code.dart'; 3 | export 'code_field/ussd_code_field.dart'; 4 | export 'ussd_item.dart'; 5 | -------------------------------------------------------------------------------- /lib/app/data/models/ussd/ussd_item.dart: -------------------------------------------------------------------------------- 1 | import 'package:equatable/equatable.dart'; 2 | 3 | abstract class UssdItem extends Equatable { 4 | const UssdItem({ 5 | required this.name, 6 | required this.description, 7 | required this.icon, 8 | required this.type, 9 | }); 10 | 11 | final String name; 12 | final String description; 13 | final String icon; 14 | final String type; 15 | 16 | String get key => '$name-$description'; 17 | 18 | @override 19 | List get props => [ 20 | name, 21 | description, 22 | icon, 23 | type, 24 | ]; 25 | } 26 | -------------------------------------------------------------------------------- /lib/app/data/repositories/nauta_repository.dart: -------------------------------------------------------------------------------- 1 | import 'package:injectable/injectable.dart'; 2 | import 'package:todo/app/app.dart'; 3 | 4 | @injectable 5 | class NautaRepository { 6 | NautaRepository(this._accountDatasource); 7 | 8 | final NautaAccountDatasource _accountDatasource; 9 | 10 | Future saveAccount(NautaAccount account) => 11 | _accountDatasource.save(account); 12 | 13 | Future> findAllAccounts() => _accountDatasource.findAll(); 14 | 15 | Future findByIdAccount(int id) => 16 | _accountDatasource.findById(id); 17 | 18 | Future findByUsernameAccount(String username) => 19 | _accountDatasource.findByUsername(username); 20 | 21 | Future updateAccount(int id, NautaAccount account) => 22 | _accountDatasource.update(id, account); 23 | 24 | Future deleteAccount(int id) => _accountDatasource.delete(id); 25 | } 26 | -------------------------------------------------------------------------------- /lib/app/data/repositories/repositories.dart: -------------------------------------------------------------------------------- 1 | export 'nauta_repository.dart'; 2 | export 'ussd_repository.dart'; 3 | -------------------------------------------------------------------------------- /lib/app/dependencies/dependencies.dart: -------------------------------------------------------------------------------- 1 | import 'package:connectivity_plus/connectivity_plus.dart'; 2 | import 'package:get_it/get_it.dart'; 3 | import 'package:injectable/injectable.dart'; 4 | import 'package:path/path.dart'; 5 | import 'package:shared_preferences/shared_preferences.dart'; 6 | import 'package:sqflite/sqflite.dart'; 7 | import 'package:todo/app/dependencies/dependencies.config.dart'; 8 | 9 | export 'providers.dart'; 10 | 11 | final getIt = GetIt.instance; 12 | 13 | @module 14 | abstract class RegisterModule { 15 | @preResolve 16 | Future get prefs => SharedPreferences.getInstance(); 17 | 18 | Connectivity get connectivity => Connectivity(); 19 | 20 | @preResolve 21 | Future get database async { 22 | return openDatabase( 23 | // Establece la ruta de la base de datos 24 | join(await getDatabasesPath(), 'todoapp.db'), 25 | // Cuando la base de datos se crea por primera vez, crea las tablas 26 | onCreate: (db, version) { 27 | db.execute( 28 | // ignore: lines_longer_than_80_chars 29 | 'CREATE TABLE users(id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, username TEXT, password TEXT)', 30 | ); 31 | }, 32 | version: 1, 33 | ); 34 | } 35 | } 36 | 37 | @InjectableInit() 38 | Future setupDependencies(String env) => $initGetIt( 39 | getIt, 40 | environment: env, 41 | ); 42 | -------------------------------------------------------------------------------- /lib/app/dependencies/providers.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_bloc/flutter_bloc.dart'; 2 | import 'package:todo/app/app.dart'; 3 | import 'package:todo/nauta/nauta.dart'; 4 | import 'package:todo/ussd_codes/ussd_codes.dart'; 5 | 6 | final blocProviders = [ 7 | BlocProvider( 8 | create: (context) => getIt(), 9 | ), 10 | BlocProvider( 11 | create: (context) => getIt(), 12 | ), 13 | BlocProvider( 14 | create: (context) => getIt(), 15 | ), 16 | ]; 17 | -------------------------------------------------------------------------------- /lib/app/theme/app_bar_theme.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | const appBarTheme = AppBarTheme( 4 | elevation: 0, 5 | backgroundColor: Colors.transparent, 6 | centerTitle: true, 7 | ); 8 | -------------------------------------------------------------------------------- /lib/app/theme/dark.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:todo/app/theme/app_bar_theme.dart'; 3 | 4 | final darkTheme = ThemeData( 5 | appBarTheme: appBarTheme.copyWith( 6 | foregroundColor: Colors.white, 7 | ), 8 | brightness: Brightness.dark, 9 | fontFamily: 'Montserrat', 10 | ); 11 | -------------------------------------------------------------------------------- /lib/app/theme/light.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:todo/app/theme/app_bar_theme.dart'; 3 | 4 | final lightTheme = ThemeData( 5 | appBarTheme: appBarTheme.copyWith( 6 | foregroundColor: Colors.blue, 7 | ), 8 | brightness: Brightness.light, 9 | fontFamily: 'Montserrat', 10 | ); 11 | -------------------------------------------------------------------------------- /lib/app/theme/theme.dart: -------------------------------------------------------------------------------- 1 | export 'dark.dart'; 2 | export 'light.dart'; 3 | -------------------------------------------------------------------------------- /lib/app/widgets/app_bar_title.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class AppBarTitle extends StatelessWidget { 4 | const AppBarTitle( 5 | this.title, { 6 | Key? key, 7 | }) : super(key: key); 8 | 9 | final String title; 10 | 11 | @override 12 | Widget build(BuildContext context) { 13 | return Text( 14 | title, 15 | style: const TextStyle( 16 | fontWeight: FontWeight.bold, 17 | ), 18 | ); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /lib/app/widgets/app_drawer_tile.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class AppDrawerTile extends StatelessWidget { 4 | const AppDrawerTile({ 5 | Key? key, 6 | required this.title, 7 | required this.icon, 8 | required this.onTap, 9 | }) : super(key: key); 10 | 11 | final String title; 12 | final IconData icon; 13 | final VoidCallback onTap; 14 | 15 | @override 16 | Widget build(BuildContext context) { 17 | return Padding( 18 | padding: const EdgeInsets.only( 19 | left: 10, 20 | right: 10, 21 | ), 22 | child: ListTile( 23 | leading: Icon( 24 | icon, 25 | size: 32, 26 | ), 27 | title: Text( 28 | title, 29 | style: const TextStyle( 30 | fontWeight: FontWeight.bold, 31 | ), 32 | ), 33 | onTap: () { 34 | Navigator.pop(context); 35 | onTap(); 36 | }, 37 | ), 38 | ); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /lib/app/widgets/app_tab_bar.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class AppTabBar extends StatelessWidget { 4 | const AppTabBar({Key? key}) : super(key: key); 5 | 6 | @override 7 | Widget build(BuildContext context) { 8 | return TabBar( 9 | indicator: BoxDecoration( 10 | borderRadius: BorderRadius.circular(100), 11 | color: Colors.blue, 12 | ), 13 | isScrollable: true, 14 | labelPadding: const EdgeInsets.only(top: 0.5, bottom: 0.5), 15 | unselectedLabelColor: Theme.of(context).brightness == Brightness.dark 16 | ? Colors.white 17 | : Colors.blue, 18 | overlayColor: MaterialStateProperty.all(Colors.transparent), 19 | tabs: const [ 20 | SizedBox( 21 | height: 64, 22 | width: 68, 23 | child: Icon( 24 | Icons.phone_android_rounded, 25 | size: 38, 26 | ), 27 | ), 28 | SizedBox( 29 | height: 64, 30 | width: 68, 31 | child: Icon( 32 | Icons.history, 33 | size: 38, 34 | ), 35 | ), 36 | // SizedBox( 37 | // height: 64, 38 | // width: 68, 39 | // child: Icon( 40 | // Icons.wifi, 41 | // size: 38, 42 | // ), 43 | // ), 44 | ], 45 | ); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /lib/app/widgets/loading.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class Loading extends StatelessWidget { 4 | const Loading({Key? key}) : super(key: key); 5 | 6 | @override 7 | Widget build(BuildContext context) { 8 | return const Center( 9 | child: CircularProgressIndicator(), 10 | ); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /lib/app/widgets/theme_icon_button.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_bloc/flutter_bloc.dart'; 3 | import 'package:todo/app/app.dart'; 4 | 5 | class ThemeIconButton extends StatelessWidget { 6 | const ThemeIconButton({ 7 | Key? key, 8 | }) : super(key: key); 9 | 10 | @override 11 | Widget build(BuildContext context) { 12 | final bloc = context.read(); 13 | 14 | return BlocBuilder( 15 | builder: (context, state) { 16 | return IconButton( 17 | icon: const Icon(Icons.wb_sunny), 18 | onPressed: () { 19 | if (state.themeMode == ThemeMode.dark) { 20 | bloc.add(const ThemeEvent.setLight()); 21 | } else { 22 | bloc.add(const ThemeEvent.setDark()); 23 | } 24 | }, 25 | ); 26 | }, 27 | ); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /lib/app/widgets/widgets.dart: -------------------------------------------------------------------------------- 1 | export 'app_bar_title.dart'; 2 | export 'app_drawer.dart'; 3 | export 'app_drawer_tile.dart'; 4 | export 'app_tab_bar.dart'; 5 | export 'loading.dart'; 6 | export 'theme_icon_button.dart'; 7 | -------------------------------------------------------------------------------- /lib/gen/fonts.gen.dart: -------------------------------------------------------------------------------- 1 | /// GENERATED CODE - DO NOT MODIFY BY HAND 2 | /// ***************************************************** 3 | /// FlutterGen 4 | /// ***************************************************** 5 | 6 | class FontFamily { 7 | FontFamily._(); 8 | 9 | static const String montserrat = 'Montserrat'; 10 | } 11 | -------------------------------------------------------------------------------- /lib/home/home.dart: -------------------------------------------------------------------------------- 1 | export 'router/router.dart'; 2 | export 'view/view.dart'; 3 | export 'widgets/widgets.dart'; 4 | -------------------------------------------------------------------------------- /lib/home/router/home_location.dart: -------------------------------------------------------------------------------- 1 | import 'package:beamer/beamer.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:todo/home/home.dart'; 4 | 5 | class HomeLocation extends BeamLocation { 6 | @override 7 | List get pathBlueprints => [ 8 | HomePage.pathBlueprint, 9 | ]; 10 | 11 | @override 12 | List buildPages(BuildContext context, BeamState state) => [ 13 | HomePage(), 14 | ]; 15 | } 16 | -------------------------------------------------------------------------------- /lib/home/router/home_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:beamer/beamer.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:todo/home/home.dart'; 4 | 5 | class HomePage extends BeamPage { 6 | HomePage() 7 | : super( 8 | title: 'TODO', 9 | type: BeamPageType.cupertino, 10 | child: const HomeView(), 11 | ); 12 | 13 | static String get pathBlueprint => '/'; 14 | 15 | static String route() => '/'; 16 | 17 | static void open(BuildContext context) => context.beamToNamed(route()); 18 | 19 | // static bool checkBeamState(BeamState state) => 20 | // state.pathBlueprintSegments.contains('home'); 21 | 22 | } 23 | -------------------------------------------------------------------------------- /lib/home/router/router.dart: -------------------------------------------------------------------------------- 1 | export 'home_location.dart'; 2 | export 'home_page.dart'; 3 | -------------------------------------------------------------------------------- /lib/home/view/view.dart: -------------------------------------------------------------------------------- 1 | export 'home_view.dart'; 2 | -------------------------------------------------------------------------------- /lib/home/widgets/widgets.dart: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /lib/l10n/l10n.dart: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2021, Very Good Ventures 2 | // https://verygood.ventures 3 | // 4 | // Use of this source code is governed by an MIT-style 5 | // license that can be found in the LICENSE file or at 6 | // https://opensource.org/licenses/MIT. 7 | 8 | import 'package:flutter/widgets.dart'; 9 | import 'package:flutter_gen/gen_l10n/app_localizations.dart'; 10 | 11 | export 'package:flutter_gen/gen_l10n/app_localizations.dart'; 12 | 13 | extension AppLocalizationsX on BuildContext { 14 | AppLocalizations get l10n => AppLocalizations.of(this); 15 | } 16 | -------------------------------------------------------------------------------- /lib/main_development.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | import 'dart:developer'; 3 | 4 | import 'package:beamer/beamer.dart'; 5 | import 'package:bloc/bloc.dart'; 6 | import 'package:flutter/widgets.dart'; 7 | import 'package:injectable/injectable.dart'; 8 | 9 | import 'package:todo/app/app.dart'; 10 | import 'package:todo/app/app_bloc_observer.dart'; 11 | 12 | void main() { 13 | Bloc.observer = AppBlocObserver(); 14 | FlutterError.onError = (details) { 15 | log(details.exceptionAsString(), stackTrace: details.stack); 16 | }; 17 | 18 | Beamer.setPathUrlStrategy(); 19 | 20 | runZonedGuarded( 21 | () => runApp(const App(env: Environment.dev)), 22 | (error, stackTrace) => log(error.toString(), stackTrace: stackTrace), 23 | ); 24 | } 25 | -------------------------------------------------------------------------------- /lib/main_production.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | import 'dart:developer'; 3 | 4 | import 'package:beamer/beamer.dart'; 5 | import 'package:bloc/bloc.dart'; 6 | import 'package:flutter/widgets.dart'; 7 | import 'package:injectable/injectable.dart'; 8 | 9 | import 'package:todo/app/app.dart'; 10 | import 'package:todo/app/app_bloc_observer.dart'; 11 | 12 | void main() { 13 | Bloc.observer = AppBlocObserver(); 14 | FlutterError.onError = (details) { 15 | log(details.exceptionAsString(), stackTrace: details.stack); 16 | }; 17 | 18 | Beamer.setPathUrlStrategy(); 19 | 20 | runZonedGuarded( 21 | () => runApp(const App(env: Environment.prod)), 22 | (error, stackTrace) => log(error.toString(), stackTrace: stackTrace), 23 | ); 24 | } 25 | -------------------------------------------------------------------------------- /lib/main_staging.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | import 'dart:developer'; 3 | 4 | import 'package:beamer/beamer.dart'; 5 | import 'package:bloc/bloc.dart'; 6 | import 'package:flutter/widgets.dart'; 7 | import 'package:injectable/injectable.dart'; 8 | 9 | import 'package:todo/app/app.dart'; 10 | import 'package:todo/app/app_bloc_observer.dart'; 11 | 12 | void main() { 13 | Bloc.observer = AppBlocObserver(); 14 | FlutterError.onError = (details) { 15 | log(details.exceptionAsString(), stackTrace: details.stack); 16 | }; 17 | 18 | Beamer.setPathUrlStrategy(); 19 | 20 | runZonedGuarded( 21 | () => runApp(const App(env: Environment.dev)), 22 | (error, stackTrace) => log(error.toString(), stackTrace: stackTrace), 23 | ); 24 | } 25 | -------------------------------------------------------------------------------- /lib/nauta/bloc/accounts/accounts_bloc.dart: -------------------------------------------------------------------------------- 1 | import 'package:bloc/bloc.dart'; 2 | import 'package:freezed_annotation/freezed_annotation.dart'; 3 | import 'package:injectable/injectable.dart'; 4 | import 'package:todo/app/app.dart'; 5 | 6 | part 'accounts_event.dart'; 7 | part 'accounts_state.dart'; 8 | part 'accounts_bloc.freezed.dart'; 9 | 10 | @injectable 11 | class AccountsBloc extends Bloc { 12 | AccountsBloc(this._repository) 13 | : super( 14 | const _AccountsState( 15 | loading: true, 16 | accounts: [], 17 | ), 18 | ) { 19 | on<_LoadData>(_loadData); 20 | on<_RemoveAccount>(_removeAccount); 21 | 22 | add(const _LoadData()); 23 | } 24 | 25 | final NautaRepository _repository; 26 | 27 | Future _loadData( 28 | _LoadData event, 29 | Emitter emit, 30 | ) async { 31 | final result = await _repository.findAllAccounts(); 32 | 33 | emit(state.copyWith(loading: false, accounts: result)); 34 | } 35 | 36 | Future _removeAccount( 37 | _RemoveAccount event, 38 | Emitter emit, 39 | ) async { 40 | await _repository.deleteAccount(event.id); 41 | 42 | add(const _LoadData()); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /lib/nauta/bloc/accounts/accounts_event.dart: -------------------------------------------------------------------------------- 1 | part of 'accounts_bloc.dart'; 2 | 3 | @freezed 4 | class AccountsEvent with _$AccountsEvent { 5 | const factory AccountsEvent.loadData() = _LoadData; 6 | const factory AccountsEvent.removeAccount(int id) = _RemoveAccount; 7 | } 8 | -------------------------------------------------------------------------------- /lib/nauta/bloc/accounts/accounts_state.dart: -------------------------------------------------------------------------------- 1 | part of 'accounts_bloc.dart'; 2 | 3 | @freezed 4 | class AccountsState with _$AccountsState { 5 | const factory AccountsState({ 6 | required bool loading, 7 | required List accounts, 8 | }) = _AccountsState; 9 | } 10 | -------------------------------------------------------------------------------- /lib/nauta/bloc/bloc.dart: -------------------------------------------------------------------------------- 1 | export 'accounts/accounts_bloc.dart'; 2 | export 'save_account/save_account_bloc.dart'; 3 | -------------------------------------------------------------------------------- /lib/nauta/bloc/save_account/save_account_bloc.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_form_bloc/flutter_form_bloc.dart'; 2 | import 'package:injectable/injectable.dart'; 3 | import 'package:todo/app/app.dart'; 4 | 5 | @injectable 6 | class SaveAccountBloc extends FormBloc { 7 | SaveAccountBloc(this._repository) { 8 | addFieldBlocs(fieldBlocs: [ 9 | username, 10 | password, 11 | ]); 12 | } 13 | 14 | final NautaRepository _repository; 15 | 16 | final username = TextFieldBloc( 17 | validators: [ 18 | FieldBlocValidators.required, 19 | ], 20 | ); 21 | 22 | final password = TextFieldBloc( 23 | validators: [ 24 | FieldBlocValidators.required, 25 | ], 26 | ); 27 | 28 | @override 29 | Future onSubmitting() async { 30 | final userName = username.value!.contains('@') 31 | ? username.value! 32 | : '${username.value}@nauta.com.cu'; 33 | 34 | final account = NautaAccount( 35 | username: userName, 36 | password: password.value!, 37 | ); 38 | 39 | await _repository.saveAccount(account); 40 | 41 | emitSuccess(); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /lib/nauta/nauta.dart: -------------------------------------------------------------------------------- 1 | export 'bloc/bloc.dart'; 2 | export 'router/router.dart'; 3 | export 'view/view.dart'; 4 | export 'widgets/widgets.dart'; 5 | -------------------------------------------------------------------------------- /lib/nauta/router/accounts_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:beamer/beamer.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:todo/nauta/nauta.dart'; 4 | 5 | class AccountsPage extends BeamPage { 6 | AccountsPage() 7 | : super( 8 | title: 'Cuentas', 9 | type: BeamPageType.cupertino, 10 | child: const AccountsView(), 11 | ); 12 | 13 | static String get pathBlueprint => '/nauta/accounts'; 14 | 15 | static String route() => '/nauta/accounts'; 16 | 17 | static void open(BuildContext context) => context.beamToNamed(route()); 18 | 19 | static bool checkBeamState(BeamState state) => 20 | state.pathBlueprintSegments.contains('accounts'); 21 | } 22 | -------------------------------------------------------------------------------- /lib/nauta/router/nauta_location.dart: -------------------------------------------------------------------------------- 1 | import 'package:beamer/beamer.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:todo/home/home.dart'; 4 | import 'package:todo/nauta/nauta.dart'; 5 | 6 | class NautaLocation extends BeamLocation { 7 | @override 8 | List get pathBlueprints => [ 9 | AccountsPage.pathBlueprint, 10 | SaveAccountPage.pathBlueprint, 11 | ]; 12 | 13 | @override 14 | List buildPages(BuildContext context, BeamState state) => [ 15 | HomePage(), 16 | if (AccountsPage.checkBeamState(state)) AccountsPage(), 17 | if (SaveAccountPage.checkBeamState(state)) SaveAccountPage(), 18 | ]; 19 | } 20 | -------------------------------------------------------------------------------- /lib/nauta/router/router.dart: -------------------------------------------------------------------------------- 1 | export 'accounts_page.dart'; 2 | export 'nauta_location.dart'; 3 | export 'save_account_page.dart'; 4 | -------------------------------------------------------------------------------- /lib/nauta/router/save_account_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:beamer/beamer.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:flutter_bloc/flutter_bloc.dart'; 4 | import 'package:todo/app/app.dart'; 5 | import 'package:todo/nauta/nauta.dart'; 6 | 7 | class SaveAccountPage extends BeamPage { 8 | SaveAccountPage() 9 | : super( 10 | title: 'Guardar Cuenta', 11 | type: BeamPageType.cupertino, 12 | child: BlocProvider( 13 | create: (context) => getIt(), 14 | child: const SaveAccountView(), 15 | ), 16 | ); 17 | 18 | static String get pathBlueprint => '/nauta/accounts/save'; 19 | 20 | static String route() => '/nauta/accounts/save'; 21 | 22 | static void open(BuildContext context) => context.beamToNamed(route()); 23 | 24 | static bool checkBeamState(BeamState state) => 25 | state.pathBlueprintSegments.contains('save'); 26 | } 27 | -------------------------------------------------------------------------------- /lib/nauta/view/view.dart: -------------------------------------------------------------------------------- 1 | export 'accounts_view.dart'; 2 | export 'save_account_view.dart'; 3 | -------------------------------------------------------------------------------- /lib/nauta/widgets/widgets.dart: -------------------------------------------------------------------------------- 1 | export 'account_tile.dart'; 2 | -------------------------------------------------------------------------------- /lib/settings/bloc/bloc.dart: -------------------------------------------------------------------------------- 1 | export 'settings/settings_bloc.dart'; 2 | export 'update_ussd/update_ussd_bloc.dart'; 3 | -------------------------------------------------------------------------------- /lib/settings/bloc/settings/settings_event.dart: -------------------------------------------------------------------------------- 1 | part of 'settings_bloc.dart'; 2 | 3 | @freezed 4 | class SettingsEvent with _$SettingsEvent { 5 | const factory SettingsEvent.loadData() = _LoadData; 6 | const factory SettingsEvent.showFloatWidget(bool value) = _ShowFloatWidget; 7 | const factory SettingsEvent.turnOffWifi(bool value) = _TurnOffWifi; 8 | } 9 | -------------------------------------------------------------------------------- /lib/settings/bloc/settings/settings_state.dart: -------------------------------------------------------------------------------- 1 | part of 'settings_bloc.dart'; 2 | 3 | @freezed 4 | class SettingsState with _$SettingsState { 5 | const factory SettingsState({ 6 | required String appVersion, 7 | required bool showFloatWidget, 8 | required bool turnOffWifi, 9 | required String disclaimerText, 10 | required String telegramGroupUrl, 11 | }) = _SettingsState; 12 | } 13 | -------------------------------------------------------------------------------- /lib/settings/bloc/update_ussd/update_ussd_bloc.dart: -------------------------------------------------------------------------------- 1 | import 'package:bloc/bloc.dart'; 2 | import 'package:freezed_annotation/freezed_annotation.dart'; 3 | import 'package:injectable/injectable.dart'; 4 | import 'package:todo/app/app.dart'; 5 | 6 | part 'update_ussd_event.dart'; 7 | part 'update_ussd_state.dart'; 8 | part 'update_ussd_bloc.freezed.dart'; 9 | 10 | @injectable 11 | class UpdateUssdBloc extends Bloc { 12 | UpdateUssdBloc(this._repository) 13 | : super( 14 | const _UpdateUssdState( 15 | loading: true, 16 | success: false, 17 | ), 18 | ) { 19 | on<_LoadData>(_loadData); 20 | 21 | add(const _LoadData()); 22 | } 23 | 24 | final UssdRepository _repository; 25 | 26 | Future _loadData(_LoadData event, Emitter emit) async { 27 | emit(state.copyWith(loading: true, success: false)); 28 | final result = await _repository.getUssdCodesRemote(); 29 | 30 | result.when( 31 | success: (data) { 32 | emit(state.copyWith( 33 | loading: false, 34 | success: true, 35 | )); 36 | }, 37 | error: (message) { 38 | emit(state.copyWith( 39 | loading: false, 40 | success: false, 41 | )); 42 | }, 43 | ); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /lib/settings/bloc/update_ussd/update_ussd_event.dart: -------------------------------------------------------------------------------- 1 | part of 'update_ussd_bloc.dart'; 2 | 3 | @freezed 4 | class UpdateUssdEvent with _$UpdateUssdEvent { 5 | const factory UpdateUssdEvent.loadData() = _LoadData; 6 | } 7 | -------------------------------------------------------------------------------- /lib/settings/bloc/update_ussd/update_ussd_state.dart: -------------------------------------------------------------------------------- 1 | part of 'update_ussd_bloc.dart'; 2 | 3 | @freezed 4 | class UpdateUssdState with _$UpdateUssdState { 5 | const factory UpdateUssdState({ 6 | required bool loading, 7 | required bool success, 8 | }) = _UpdateUssdState; 9 | } 10 | -------------------------------------------------------------------------------- /lib/settings/router/disclaimer_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:beamer/beamer.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:todo/settings/settings.dart'; 4 | 5 | class DisclaimerPage extends BeamPage { 6 | DisclaimerPage({ 7 | required String disclaimer, 8 | }) : super( 9 | title: 'Términos de uso', 10 | type: BeamPageType.cupertino, 11 | child: DisclaimerView( 12 | disclaimer: disclaimer, 13 | ), 14 | ); 15 | 16 | static String get pathBlueprint => '/settings/disclaimer'; 17 | 18 | static String route() => '/settings/disclaimer'; 19 | 20 | static void open( 21 | BuildContext context, { 22 | required String disclaimer, 23 | }) => 24 | context.beamToNamed( 25 | route(), 26 | data: {'disclaimer': disclaimer}, 27 | ); 28 | 29 | static bool checkBeamState(BeamState state) => 30 | state.pathBlueprintSegments.contains('disclaimer') && 31 | state.data.containsKey('disclaimer'); 32 | } 33 | -------------------------------------------------------------------------------- /lib/settings/router/router.dart: -------------------------------------------------------------------------------- 1 | export 'disclaimer_page.dart'; 2 | export 'settings_location.dart'; 3 | export 'settings_page.dart'; 4 | export 'update_ussd_page.dart'; 5 | -------------------------------------------------------------------------------- /lib/settings/router/settings_location.dart: -------------------------------------------------------------------------------- 1 | import 'package:beamer/beamer.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:todo/home/home.dart'; 4 | import 'package:todo/settings/settings.dart'; 5 | 6 | class SettingsLocation extends BeamLocation { 7 | @override 8 | List get pathBlueprints => [ 9 | SettingsPage.pathBlueprint, 10 | DisclaimerPage.pathBlueprint, 11 | UpdateUssdPage.pathBlueprint, 12 | ]; 13 | 14 | @override 15 | List buildPages(BuildContext context, BeamState state) => [ 16 | HomePage(), 17 | if (SettingsPage.checkBeamState(state)) SettingsPage(), 18 | if (DisclaimerPage.checkBeamState(state)) 19 | DisclaimerPage( 20 | disclaimer: state.data['disclaimer'] as String, 21 | ), 22 | if (UpdateUssdPage.checkBeamState(state)) UpdateUssdPage(), 23 | ]; 24 | } 25 | -------------------------------------------------------------------------------- /lib/settings/router/settings_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:beamer/beamer.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:flutter_bloc/flutter_bloc.dart'; 4 | import 'package:todo/app/app.dart'; 5 | import 'package:todo/settings/settings.dart'; 6 | 7 | class SettingsPage extends BeamPage { 8 | SettingsPage() 9 | : super( 10 | title: 'Ajustes', 11 | type: BeamPageType.cupertino, 12 | child: BlocProvider( 13 | create: (context) => getIt(), 14 | child: const SettingsView(), 15 | ), 16 | ); 17 | 18 | static String get pathBlueprint => '/settings'; 19 | 20 | static String route() => '/settings'; 21 | 22 | static void open(BuildContext context) => context.beamToNamed( 23 | route(), 24 | ); 25 | 26 | static bool checkBeamState(BeamState state) => 27 | state.pathBlueprintSegments.contains('settings'); 28 | } 29 | -------------------------------------------------------------------------------- /lib/settings/router/update_ussd_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:beamer/beamer.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:flutter_bloc/flutter_bloc.dart'; 4 | import 'package:todo/app/app.dart'; 5 | import 'package:todo/settings/bloc/update_ussd/update_ussd_bloc.dart'; 6 | import 'package:todo/settings/view/update_ussd_view.dart'; 7 | 8 | class UpdateUssdPage extends BeamPage { 9 | UpdateUssdPage() 10 | : super( 11 | title: 'Actualizar códigos', 12 | type: BeamPageType.cupertino, 13 | child: BlocProvider( 14 | create: (context) => getIt(), 15 | child: const UpdateUssdView(), 16 | ), 17 | ); 18 | 19 | static String get pathBlueprint => '/settings/update_codes'; 20 | 21 | static String route() => '/settings/update_codes'; 22 | 23 | static void open( 24 | BuildContext context, 25 | ) => 26 | context.beamToNamed( 27 | route(), 28 | ); 29 | 30 | static bool checkBeamState(BeamState state) => 31 | state.pathBlueprintSegments.contains('update_codes'); 32 | } 33 | -------------------------------------------------------------------------------- /lib/settings/settings.dart: -------------------------------------------------------------------------------- 1 | export 'bloc/bloc.dart'; 2 | export 'router/router.dart'; 3 | export 'view/view.dart'; 4 | export 'widgets/widgets.dart'; 5 | -------------------------------------------------------------------------------- /lib/settings/view/disclaimer_view.dart: -------------------------------------------------------------------------------- 1 | import 'package:beamer/beamer.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:todo/app/app.dart'; 4 | import 'package:todo/settings/settings.dart'; 5 | 6 | class DisclaimerView extends StatelessWidget { 7 | const DisclaimerView({ 8 | Key? key, 9 | required this.disclaimer, 10 | }) : super(key: key); 11 | 12 | final String disclaimer; 13 | 14 | @override 15 | Widget build(BuildContext context) { 16 | final l10n = context.l10n; 17 | 18 | return Scaffold( 19 | appBar: AppBar( 20 | title: AppBarTitle(l10n.termOfUse), 21 | ), 22 | body: ListView( 23 | physics: const BouncingScrollPhysics(), 24 | children: [ 25 | const SizedBox( 26 | height: 20, 27 | ), 28 | Container( 29 | margin: const EdgeInsets.all(20), 30 | child: Text(disclaimer), 31 | ), 32 | const SizedBox( 33 | height: 20, 34 | ), 35 | Padding( 36 | padding: const EdgeInsets.symmetric( 37 | horizontal: 30, 38 | ), 39 | child: SettingsButton( 40 | text: l10n.accept, 41 | icon: Icons.verified_user, 42 | onPressed: context.beamBack, 43 | ), 44 | ), 45 | const SizedBox( 46 | height: 20, 47 | ), 48 | ], 49 | ), 50 | ); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /lib/settings/view/view.dart: -------------------------------------------------------------------------------- 1 | export 'disclaimer_view.dart'; 2 | export 'settings_view.dart'; 3 | export 'update_ussd_view.dart'; 4 | -------------------------------------------------------------------------------- /lib/settings/widgets/settings_switch.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class SettingsSwitch extends StatelessWidget { 4 | const SettingsSwitch({ 5 | Key? key, 6 | required this.text, 7 | required this.value, 8 | required this.onChanged, 9 | }) : super(key: key); 10 | 11 | final String text; 12 | final bool value; 13 | final ValueChanged onChanged; 14 | 15 | @override 16 | Widget build(BuildContext context) { 17 | return Row( 18 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 19 | children: [ 20 | Expanded( 21 | child: Text( 22 | text, 23 | style: const TextStyle(fontWeight: FontWeight.bold), 24 | ), 25 | ), 26 | Switch( 27 | activeColor: Colors.blue, 28 | value: value, 29 | onChanged: onChanged, 30 | ), 31 | ], 32 | ); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /lib/settings/widgets/widgets.dart: -------------------------------------------------------------------------------- 1 | export 'settings_button.dart'; 2 | export 'settings_switch.dart'; 3 | -------------------------------------------------------------------------------- /lib/ussd_codes/bloc/bloc.dart: -------------------------------------------------------------------------------- 1 | export 'ussd_code/ussd_code_bloc.dart'; 2 | -------------------------------------------------------------------------------- /lib/ussd_codes/bloc/ussd_code/ussd_code_event.dart: -------------------------------------------------------------------------------- 1 | part of 'ussd_code_bloc.dart'; 2 | 3 | @freezed 4 | class UssdCodeEvent with _$UssdCodeEvent { 5 | const factory UssdCodeEvent.loadData() = _LoadData; 6 | const factory UssdCodeEvent.putItem(UssdItem item) = _PutItem; 7 | } 8 | -------------------------------------------------------------------------------- /lib/ussd_codes/bloc/ussd_code/ussd_code_state.dart: -------------------------------------------------------------------------------- 1 | part of 'ussd_code_bloc.dart'; 2 | 3 | @freezed 4 | class UssdCodeState with _$UssdCodeState { 5 | const factory UssdCodeState.loading() = _Loading; 6 | const factory UssdCodeState.ready({ 7 | required List items, 8 | required List recentItems, 9 | }) = _Ready; 10 | const factory UssdCodeState.error({required String message}) = _Error; 11 | } 12 | -------------------------------------------------------------------------------- /lib/ussd_codes/router/router.dart: -------------------------------------------------------------------------------- 1 | export 'ussd_category_page.dart'; 2 | export 'ussd_code_form_page.dart'; 3 | export 'ussd_codes_location.dart'; 4 | -------------------------------------------------------------------------------- /lib/ussd_codes/router/ussd_code_form_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:beamer/beamer.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:todo/app/app.dart'; 4 | import 'package:todo/ussd_codes/ussd_codes.dart'; 5 | 6 | class UssdCodeFormPage extends BeamPage { 7 | UssdCodeFormPage({ 8 | required UssdCode code, 9 | }) : super( 10 | title: code.name, 11 | type: BeamPageType.cupertino, 12 | child: UssdCodeFormView(code: code), 13 | ); 14 | 15 | static String get pathBlueprint => '/code_form'; 16 | 17 | static String route() => '/code_form'; 18 | 19 | static void open( 20 | BuildContext context, { 21 | required UssdCode code, 22 | }) => 23 | context.beamToNamed(route(), data: {'code': code}); 24 | 25 | static bool checkBeamState(BeamState state) => 26 | state.pathBlueprintSegments.contains('code_form') && 27 | state.data['code'] != null; 28 | } 29 | -------------------------------------------------------------------------------- /lib/ussd_codes/router/ussd_codes_location.dart: -------------------------------------------------------------------------------- 1 | import 'package:beamer/beamer.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:todo/app/app.dart'; 4 | import 'package:todo/home/home.dart'; 5 | import 'package:todo/ussd_codes/ussd_codes.dart'; 6 | 7 | class UssdCodesLocation extends BeamLocation { 8 | @override 9 | List get pathBlueprints => [ 10 | UssdCategoryPage.pathBlueprint, 11 | UssdCodeFormPage.pathBlueprint, 12 | ]; 13 | 14 | @override 15 | List buildPages(BuildContext context, BeamState state) => [ 16 | HomePage(), 17 | if (UssdCategoryPage.checkBeamState(state)) 18 | ...(state.data['categories'] as List).map( 19 | (category) => UssdCategoryPage( 20 | category: category, 21 | recent: state.data['recent'] as bool?, 22 | ), 23 | ), 24 | if (UssdCodeFormPage.checkBeamState(state)) 25 | UssdCodeFormPage(code: state.data['code'] as UssdCode), 26 | ]; 27 | } 28 | -------------------------------------------------------------------------------- /lib/ussd_codes/ussd_codes.dart: -------------------------------------------------------------------------------- 1 | export 'bloc/bloc.dart'; 2 | export 'router/router.dart'; 3 | export 'view/view.dart'; 4 | export 'widgets/widgets.dart'; 5 | -------------------------------------------------------------------------------- /lib/ussd_codes/view/ussd_code_form_view.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:todo/app/app.dart'; 3 | import 'package:todo/ussd_codes/ussd_codes.dart'; 4 | 5 | class UssdCodeFormView extends StatelessWidget { 6 | const UssdCodeFormView({ 7 | Key? key, 8 | required this.code, 9 | }) : super(key: key); 10 | 11 | final UssdCode code; 12 | 13 | @override 14 | Widget build(BuildContext context) { 15 | return Scaffold( 16 | appBar: AppBar( 17 | title: AppBarTitle(code.name), 18 | ), 19 | body: Center( 20 | child: Column( 21 | children: [ 22 | const SizedBox( 23 | height: 15, 24 | ), 25 | Expanded( 26 | child: Padding( 27 | padding: const EdgeInsets.all(15), 28 | child: UssdCodeForm( 29 | code: code.code, 30 | type: code.type, 31 | fields: code.fields, 32 | icon: Hero( 33 | tag: code.name + code.description, 34 | child: Icon( 35 | strIcons[code.icon], 36 | size: 82, 37 | color: Theme.of(context).brightness == Brightness.dark 38 | ? Colors.white 39 | : Colors.blue, 40 | ), 41 | ), 42 | ), 43 | ), 44 | ), 45 | const SizedBox( 46 | height: 5, 47 | ), 48 | ], 49 | ), 50 | ), 51 | ); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /lib/ussd_codes/view/ussd_code_view.dart: -------------------------------------------------------------------------------- 1 | import 'package:animate_do/animate_do.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:font_awesome_flutter/font_awesome_flutter.dart'; 4 | import 'package:todo/app/app.dart'; 5 | import 'package:todo/ussd_codes/ussd_codes.dart'; 6 | 7 | class UssdCodeView extends StatelessWidget { 8 | const UssdCodeView({ 9 | Key? key, 10 | required this.items, 11 | this.recent, 12 | }) : super(key: key); 13 | 14 | final List items; 15 | final bool? recent; 16 | 17 | @override 18 | Widget build(BuildContext context) { 19 | if (items.isEmpty) { 20 | return const Center( 21 | child: FaIcon( 22 | FontAwesomeIcons.history, 23 | size: 64, 24 | ), 25 | ); 26 | } 27 | 28 | return ListView( 29 | physics: const BouncingScrollPhysics(), 30 | children: [ 31 | ...items.map( 32 | (e) => FadeInUp( 33 | duration: const Duration(milliseconds: 400), 34 | child: UssdItemWidget( 35 | ussdItem: e, 36 | recent: recent, 37 | ), 38 | ), 39 | ) 40 | ], 41 | ); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /lib/ussd_codes/view/view.dart: -------------------------------------------------------------------------------- 1 | export 'ussd_category_view.dart'; 2 | export 'ussd_code_form_view.dart'; 3 | export 'ussd_code_view.dart'; 4 | -------------------------------------------------------------------------------- /lib/ussd_codes/widgets/widgets.dart: -------------------------------------------------------------------------------- 1 | export 'ussd_code_form.dart'; 2 | export 'ussd_item_widget.dart'; 3 | -------------------------------------------------------------------------------- /linux/.gitignore: -------------------------------------------------------------------------------- 1 | flutter/ephemeral 2 | -------------------------------------------------------------------------------- /linux/flutter/generated_plugin_registrant.cc: -------------------------------------------------------------------------------- 1 | // 2 | // Generated file. Do not edit. 3 | // 4 | 5 | // clang-format off 6 | 7 | #include "generated_plugin_registrant.h" 8 | 9 | #include 10 | 11 | void fl_register_plugins(FlPluginRegistry* registry) { 12 | g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar = 13 | fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin"); 14 | url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar); 15 | } 16 | -------------------------------------------------------------------------------- /linux/flutter/generated_plugin_registrant.h: -------------------------------------------------------------------------------- 1 | // 2 | // Generated file. Do not edit. 3 | // 4 | 5 | // clang-format off 6 | 7 | #ifndef GENERATED_PLUGIN_REGISTRANT_ 8 | #define GENERATED_PLUGIN_REGISTRANT_ 9 | 10 | #include 11 | 12 | // Registers Flutter plugins. 13 | void fl_register_plugins(FlPluginRegistry* registry); 14 | 15 | #endif // GENERATED_PLUGIN_REGISTRANT_ 16 | -------------------------------------------------------------------------------- /linux/flutter/generated_plugins.cmake: -------------------------------------------------------------------------------- 1 | # 2 | # Generated file, do not edit. 3 | # 4 | 5 | list(APPEND FLUTTER_PLUGIN_LIST 6 | url_launcher_linux 7 | ) 8 | 9 | set(PLUGIN_BUNDLED_LIBRARIES) 10 | 11 | foreach(plugin ${FLUTTER_PLUGIN_LIST}) 12 | add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) 13 | target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) 14 | list(APPEND PLUGIN_BUNDLED_LIBRARIES $) 15 | list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) 16 | endforeach(plugin) 17 | -------------------------------------------------------------------------------- /linux/main.cc: -------------------------------------------------------------------------------- 1 | #include "my_application.h" 2 | 3 | int main(int argc, char** argv) { 4 | g_autoptr(MyApplication) app = my_application_new(); 5 | return g_application_run(G_APPLICATION(app), argc, argv); 6 | } 7 | -------------------------------------------------------------------------------- /linux/my_application.h: -------------------------------------------------------------------------------- 1 | #ifndef FLUTTER_MY_APPLICATION_H_ 2 | #define FLUTTER_MY_APPLICATION_H_ 3 | 4 | #include 5 | 6 | G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, 7 | GtkApplication) 8 | 9 | /** 10 | * my_application_new: 11 | * 12 | * Creates a new Flutter-based application. 13 | * 14 | * Returns: a new #MyApplication. 15 | */ 16 | MyApplication* my_application_new(); 17 | 18 | #endif // FLUTTER_MY_APPLICATION_H_ 19 | -------------------------------------------------------------------------------- /logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/logo.png -------------------------------------------------------------------------------- /splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/splash.png -------------------------------------------------------------------------------- /test/datasources/ussd_remote_datasource_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_test/flutter_test.dart'; 3 | import 'package:todo/app/app.dart'; 4 | 5 | void main() { 6 | late UssdRemoteDatasource datasource; 7 | late HttpClient http; 8 | late AppEnvironment environment; 9 | 10 | setUp(() { 11 | environment = AppEnvironmentProd(); 12 | http = HttpClient(); 13 | datasource = UssdRemoteDatasource( 14 | environment, 15 | http, 16 | ); 17 | }); 18 | 19 | test('Get HASH', () async { 20 | final result = await datasource.getHash(); 21 | 22 | debugPrint(result.toString()); 23 | 24 | expect(result.isNotEmpty, true); 25 | }); 26 | 27 | test('Get Codes', () async { 28 | final result = await datasource.getUssdCodes(); 29 | 30 | debugPrint(result.toString()); 31 | 32 | expect(result.isNotEmpty, true); 33 | }); 34 | } 35 | -------------------------------------------------------------------------------- /test/fixtures/fixture_reader.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | import 'dart:io'; 3 | 4 | import 'package:todo/app/app.dart'; 5 | 6 | String fixture(String name) => File('test/fixtures/$name').readAsStringSync(); 7 | 8 | String fixtureUssdCodes() => File('config/ussd_codes.json').readAsStringSync(); 9 | 10 | List fixtureUssdCodesAsListUssdItem() { 11 | final jsonString = File('config/ussd_codes.json').readAsStringSync(); 12 | final parsedJson = json.decode(jsonString) as Map; 13 | 14 | parsedJson['name'] = ''; 15 | parsedJson['description'] = ''; 16 | parsedJson['icon'] = ''; 17 | parsedJson['type'] = 'category'; 18 | 19 | return UssdCategory.fromJson(parsedJson).items; 20 | } 21 | -------------------------------------------------------------------------------- /test/fixtures/ussd_category.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Adelantar Saldo", 3 | "description": "Recarga con un adelanto de saldo", 4 | "icon": "monetization_on", 5 | "type": "category", 6 | "items": [ 7 | { 8 | "name": "25 CUP", 9 | "description": "Adelanta con $1.00 CUC de saldo", 10 | "icon": "monetization_on", 11 | "type": "code", 12 | "fields": [], 13 | "code": "*234*3*1*1#" 14 | }, 15 | { 16 | "name": "50 CUP", 17 | "description": "Adelanta con $2.00 CUC de saldo", 18 | "icon": "monetization_on", 19 | "type": "code", 20 | "fields": [], 21 | "code": "*234*3*1*2#" 22 | } 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /test/fixtures/ussd_code.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Transferir Saldo", 3 | "description": "Transfiere tu saldo", 4 | "icon": "mobile_screen_share", 5 | "type": "code", 6 | "fields": [ 7 | { 8 | "name": "telefono", 9 | "type": "phone_number" 10 | }, 11 | { 12 | "name": "cantidad", 13 | "type": "money" 14 | }, 15 | { 16 | "name": "clave", 17 | "type": "key_number" 18 | } 19 | ], 20 | "code": "*234*1*{telefono}*{clave}*{cantidad}#" 21 | } 22 | -------------------------------------------------------------------------------- /test/fixtures/ussd_code_field.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "telefono", 3 | "type": "phone_number" 4 | } 5 | -------------------------------------------------------------------------------- /test/models/ussd/ussd_code_field_test.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | 3 | import 'package:flutter_test/flutter_test.dart'; 4 | import 'package:todo/app/app.dart'; 5 | 6 | import '../../fixtures/fixture_reader.dart'; 7 | 8 | void main() { 9 | const tUssdCodeFieldModel = UssdCodeField( 10 | name: 'telefono', 11 | type: 'phone_number', 12 | ); 13 | 14 | group( 15 | '+ fromJson"\n ', 16 | () { 17 | test( 18 | '- Should return a valid model from JSON', 19 | () { 20 | // arrange 21 | final jsonMap = json.decode( 22 | fixture('ussd_code_field.json'), 23 | ) as Map; 24 | 25 | // act 26 | final result = UssdCodeField.fromJson(jsonMap); 27 | 28 | // assert 29 | expect(result, tUssdCodeFieldModel); 30 | }, 31 | ); 32 | }, 33 | ); 34 | 35 | group( 36 | 'toJson', 37 | () { 38 | test( 39 | 'Should return a JSON map containing the poper data', 40 | () { 41 | // act 42 | final result = tUssdCodeFieldModel.toJson(); 43 | 44 | final expectedMap = { 45 | 'name': 'telefono', 46 | 'type': 'phone_number', 47 | }; 48 | 49 | // assert 50 | expect(result, expectedMap); 51 | }, 52 | ); 53 | }, 54 | ); 55 | } 56 | -------------------------------------------------------------------------------- /web/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/web/favicon.png -------------------------------------------------------------------------------- /web/icons/Icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/web/icons/Icon-192.png -------------------------------------------------------------------------------- /web/icons/Icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/web/icons/Icon-512.png -------------------------------------------------------------------------------- /web/icons/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/web/icons/favicon.png -------------------------------------------------------------------------------- /web/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Todo", 3 | "short_name": "Todo", 4 | "start_url": ".", 5 | "display": "standalone", 6 | "background_color": "#0175C2", 7 | "theme_color": "#0175C2", 8 | "description": "A Very Good Project created by Very Good CLI.", 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 | -------------------------------------------------------------------------------- /web/splash/img/dark-1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/web/splash/img/dark-1x.png -------------------------------------------------------------------------------- /web/splash/img/dark-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/web/splash/img/dark-2x.png -------------------------------------------------------------------------------- /web/splash/img/dark-3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/web/splash/img/dark-3x.png -------------------------------------------------------------------------------- /web/splash/img/dark-4x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/web/splash/img/dark-4x.png -------------------------------------------------------------------------------- /web/splash/img/light-1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/web/splash/img/light-1x.png -------------------------------------------------------------------------------- /web/splash/img/light-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/web/splash/img/light-2x.png -------------------------------------------------------------------------------- /web/splash/img/light-3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/web/splash/img/light-3x.png -------------------------------------------------------------------------------- /web/splash/img/light-4x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/todo-devs/todo/99338e5b16c66496a9810ca94fc89ae2dba816c9/web/splash/img/light-4x.png -------------------------------------------------------------------------------- /web/splash/style.css: -------------------------------------------------------------------------------- 1 | body, html { 2 | margin:0; 3 | height:100%; 4 | background: #163e72; 5 | background-image: url("img/light-background.png"); 6 | background-size: 100% 100%; 7 | } 8 | 9 | .center { 10 | margin: 0; 11 | position: absolute; 12 | top: 50%; 13 | left: 50%; 14 | -ms-transform: translate(-50%, -50%); 15 | transform: translate(-50%, -50%); 16 | } 17 | 18 | .contain { 19 | display:block; 20 | width:100%; height:100%; 21 | object-fit: contain; 22 | } 23 | 24 | .stretch { 25 | display:block; 26 | width:100%; height:100%; 27 | } 28 | 29 | .cover { 30 | display:block; 31 | width:100%; height:100%; 32 | object-fit: cover; 33 | } 34 | 35 | @media (prefers-color-scheme: dark) { 36 | body { 37 | margin:0; 38 | height:100%; 39 | background: #163e72; 40 | background-image: url("img/dark-background.png"); 41 | background-size: 100% 100%; 42 | } 43 | } 44 | --------------------------------------------------------------------------------