diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json deleted file mode 100644 index a0cda6a3..00000000 --- a/.devcontainer/devcontainer.json +++ /dev/null @@ -1,42 +0,0 @@ -// For format details, see https://aka.ms/devcontainer.json. For config options, see the -// README at: https://github.com/devcontainers/templates/tree/main/src/universal -{ - "name": "Flutter", - // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile - "image": "mcr.microsoft.com/devcontainers/universal:2-linux", - - // Features to add to the dev container. More info: https://containers.dev/features. - "features": { - "ghcr.io/jarrodcolburn/features/flutter-sdk": {}, - "ghcr.io/jarrodcolburn/features/android-sdk": {} - }, - - // Use 'forwardPorts' to make a list of ports inside the container available locally. - // "forwardPorts": [], - - // Configure tool-specific properties. - "customizations": { - "codespaces": { - "openFiles": ["README.md", "lib/main.dart", "server/src/main.py"] - }, - "vscode": { - "extensions": [ - "Dart-Code.dart-code", - "Dart-Code.flutter", - "eamodio.gitlens", - "tamasfe.even-better-toml", - "ms-vsliveshare.vsliveshare", - "ms-vscode-remote.remote-containers", - "GitHub.codespaces", - "joshbolduc.commitlint", - "redhat.vscode-yaml", - "DavidAnson.vscode-markdownlint", - "streetsidesoftware.code-spell-checker", - "ms-vscode-remote.vscode-remote-extensionpack", - "GitHub.remotehub", - "ms-vscode.azure-repos", - "esbenp.prettier-vscode" - ] - } - } -} diff --git a/.github/workflows/dart.yaml b/.github/workflows/dart.yaml index 5c43c6f4..255c94f1 100644 --- a/.github/workflows/dart.yaml +++ b/.github/workflows/dart.yaml @@ -59,33 +59,19 @@ jobs: path: | .dart_tool/ lib/gen/*.gen.dart - lib/**/*.g.dart - lib/**/*.gr.dart - lib/**/*.gm.dart - lib/**/*.freezed.dart + lib/features/**/*.g.dart + lib/features/**/*.freezed.dart + lib/utils/*.g.dart + lib/utils/*.freezed.dart + lib/app/*.gr.dart + lib/app/*.gm.dart lib/l10n/app_localizations.dart lib/l10n/app_localizations_*.dart - lib/widgetbook.generator.*.dart key: ${{ runner.os }}-${{ env.FLUTTER_CHANNEL }}-dart-${{ hashFiles('**/build.yaml') }} - name: πŸ”Œ Generate files run: | flutter gen-l10n - dart run dart_define generate dart run build_runner build -d - - name: βš™οΈ Upload generated files - uses: actions/upload-artifact@694cdabd8bdb0f10b2cea11669e1bf5453eed0a6 # v4.2.0 - with: - name: generated-files - path: | - lib/gen/*.gen.dart - lib/**/*.g.dart - lib/**/*.gr.dart - lib/**/*.gm.dart - lib/**/*.freezed.dart - lib/l10n/app_localizations.dart - lib/l10n/app_localizations_*.dart - lib/widgetbook.generator.*.dart - if-no-files-found: error build: name: Build @@ -137,16 +123,28 @@ jobs: run: flutter --disable-analytics - name: πŸ“¦ Install dependencies run: flutter pub get - - name: βš™οΈ Download generated code - uses: actions/download-artifact@6b208ae046db98c579e8a3aa621ab581ff575935 # v4.1.1 + - name: βš™οΈ Cache generated files + uses: actions/cache@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0 with: - name: generated-files - path: lib - - name: πŸ”Œ Generate dart-defines - run: dart run dart_define generate + path: | + .dart_tool/ + lib/gen/*.gen.dart + lib/features/**/*.g.dart + lib/features/**/*.freezed.dart + lib/utils/*.g.dart + lib/utils/*.freezed.dart + lib/app/*.gr.dart + lib/app/*.gm.dart + lib/l10n/app_localizations.dart + lib/l10n/app_localizations_*.dart + key: ${{ runner.os }}-${{ env.FLUTTER_CHANNEL }}-dart-${{ hashFiles('**/build.yaml') }} + - name: πŸ”Œ Generate files + run: | + flutter gen-l10n + dart run build_runner build -d - name: πŸ”§ Build run: | - flutter build ${{ matrix.target }} ${{ matrix.flutter-flags }} --dart-define-from-file=dart_define.json + flutter build ${{ matrix.target }} ${{ matrix.flutter-flags }} # - name: βš™οΈ Upload build # if: matrix.target == 'web' # uses: actions/upload-artifact@694cdabd8bdb0f10b2cea11669e1bf5453eed0a6 # v4.2.0 @@ -179,17 +177,29 @@ jobs: run: flutter --disable-analytics - name: πŸ“¦ Install dependencies run: flutter pub get - - name: βš™οΈ Download generated code - uses: actions/download-artifact@6b208ae046db98c579e8a3aa621ab581ff575935 # v4.1.1 + - name: βš™οΈ Cache generated files + uses: actions/cache@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0 with: - name: generated-files - path: lib - - name: πŸ”Œ Generate dart-defines - run: dart run dart_define generate + path: | + .dart_tool/ + lib/gen/*.gen.dart + lib/features/**/*.g.dart + lib/features/**/*.freezed.dart + lib/utils/*.g.dart + lib/utils/*.freezed.dart + lib/app/*.gr.dart + lib/app/*.gm.dart + lib/l10n/app_localizations.dart + lib/l10n/app_localizations_*.dart + key: ${{ runner.os }}-${{ env.FLUTTER_CHANNEL }}-dart-${{ hashFiles('**/build.yaml') }} + - name: πŸ”Œ Generate files + run: | + flutter gen-l10n + dart run build_runner build -d - name: πŸ•΅οΈ Analyze project source run: flutter analyze --fatal-infos - - name: πŸ•΅οΈ Lint Riverpod - run: dart run custom_lint + - name: πŸ•΅οΈ Run Custom Lint Rules + run: dart run custom_lint --fatal-infos test: name: Testing @@ -215,13 +225,25 @@ jobs: run: flutter --disable-analytics - name: πŸ“¦ Install dependencies run: flutter pub get - - name: βš™οΈ Download generated code - uses: actions/download-artifact@6b208ae046db98c579e8a3aa621ab581ff575935 # v4.1.1 + - name: βš™οΈ Cache generated files + uses: actions/cache@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0 with: - name: generated-files - path: lib - - name: πŸ”Œ Generate dart-defines - run: dart run dart_define generate + path: | + .dart_tool/ + lib/gen/*.gen.dart + lib/features/**/*.g.dart + lib/features/**/*.freezed.dart + lib/utils/*.g.dart + lib/utils/*.freezed.dart + lib/app/*.gr.dart + lib/app/*.gm.dart + lib/l10n/app_localizations.dart + lib/l10n/app_localizations_*.dart + key: ${{ runner.os }}-${{ env.FLUTTER_CHANNEL }}-dart-${{ hashFiles('**/build.yaml') }} + - name: πŸ”Œ Generate files + run: | + flutter gen-l10n + dart run build_runner build -d - name: πŸ§ͺ Run tests run: dart run very_good_cli:very_good test --coverage --test-randomize-ordering-seed random - name: πŸ“Š Check code coverage diff --git a/.github/workflows/markdown.yaml b/.github/workflows/markdown.yaml index 7655816d..d4587727 100644 --- a/.github/workflows/markdown.yaml +++ b/.github/workflows/markdown.yaml @@ -29,19 +29,29 @@ permissions: jobs: spell-check: - name: Check spelling + name: Check Spelling needs: [] - uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/spell_check.yml@b7d3a7d287a7ed1f996861a73d69eafdfd7ed60e # v1.14.0 + runs-on: ubuntu-latest - with: - includes: | - **/*.md - **/*.dart - **/*.yaml - **/*.toml - **/*.json - modified_files_only: false - config: cspell.json + steps: + - name: πŸ“š Git Checkout + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + with: + submodules: recursive + clean: true + persist-credentials: false + set-safe-directory: true + + - name: πŸͺ„ Spell Check + uses: streetsidesoftware/cspell-action@d4c3df16cdd0faebccb1711178a8a490966f61b9 # v5.0.1 + with: + files: | + **/*.md + **/*.dart + **/*.yaml + **/*.toml + **/*.json + incremental_files_only: false link-check: name: Check Links @@ -64,11 +74,14 @@ jobs: runs-on: ubuntu-latest steps: - - name: πŸ“š Git checkout + - name: πŸ“š Git Checkout uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 with: - submodules: true - - name: πŸͺ„ Markdown linting + submodules: recursive + clean: true + persist-credentials: false + set-safe-directory: true + - name: πŸ•΅οΈ Markdown linting uses: DavidAnson/markdownlint-cli2-action@510b996878fc0d1a46c8a04ec86b06dbfba09de7 # v15.0.0 id: markdownlint with: diff --git a/.replit b/.replit deleted file mode 100644 index e9e4be6d..00000000 --- a/.replit +++ /dev/null @@ -1,25 +0,0 @@ -run = "python3 server/src/server/main.py" -entrypoint = "server/src/server/main.py" - -[packager] -language = "dart-pub" - -[packager.features] -packageSearch = true - -[nix] -channel = "stable-22_05" - -[languages] - -[languages.dart] -pattern = "**/*.dart" - -[languages.dart.languageServer] -start = "dart language-server" - -[languages.python3] -pattern = "**/*.py" - -[languages.python3.languageServer] -# start = "" diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 8a98345c..0d68476f 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -7,16 +7,12 @@ "circlecodesolution.ccs-flutter-color", "lsaudon.l10nization", "google.arb-editor", - "tamasfe.even-better-toml", "redhat.vscode-yaml", "sndst00m.vscode-native-svg-preview", "ms-vsliveshare.vsliveshare", "eamodio.gitlens", - "bbenoist.nix", "streetsidesoftware.code-spell-checker", "esbenp.prettier-vscode", - "foam.foam-vscode", - "tyriar.luna-paint", "pflannery.vscode-versionlens", "streetsidesoftware.code-spell-checker-spanish", "joshbolduc.commitlint" diff --git a/.vscode/launch.json b/.vscode/launch.json index 873ab3a0..b83f07ac 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -9,16 +9,7 @@ "request": "launch", "type": "dart", "program": "lib/main.dart", - "args": ["--dart-define-from-file=dart_define.json"], "flutterMode": "debug" - }, - { - "name": "Launch widgetbook", - "request": "launch", - "type": "dart", - "program": "lib/widgetbook.generator.dart", - "args": ["--dart-define-from-file=dart_define.json"], - "flutterMode": "release" } ] } diff --git a/.vscode/settings.json b/.vscode/settings.json index 04448e35..3cbb9534 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -55,7 +55,7 @@ "*.dart": "${capture}.*.dart, ${capture}_*.dart", "*cspell.json": ".markdownlint*, project_words.txt, mlc_config.json", ".flutter-plugins": ".flutter-plugins-dependencies", - "dart_define.json": "*.log, untranslated.json", + "untranslated.json": "*.log", ".env": ".env.example", "app.iml": "*.iml" }, diff --git a/.vscode/tasks.json b/.vscode/tasks.json index ecd55ef5..d1f6cbd0 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -20,24 +20,7 @@ "color": "terminal.ansiCyan", "id": "gear" }, - "dependsOn": ["Dart: run dart_define", "Flutter: gen-l10n"] - }, - { - "type": "dart", - "command": "dart", - "cwd": ".", - "args": ["run", "dart_define", "generate"], - "problemMatcher": [], - "group": "build", - "label": "Dart: run dart_define", - "detail": "Generate dart-defines.", - "runOptions": { - "runOn": "folderOpen" - }, - "icon": { - "color": "terminal.ansiMagenta", - "id": "gear" - } + "dependsOn": ["Flutter: gen-l10n"] }, { "type": "dart", @@ -60,7 +43,6 @@ "build", "${input:target}", "--release", - "--dart-define-from-file=dart_define.json" ], "problemMatcher": [], "group": "build", @@ -91,7 +73,6 @@ "build", "${input:target}", "--release", - "--dart-define-from-file=dart_define.json" ], "problemMatcher": [], "group": "build", diff --git a/build.yaml b/build.yaml index 39cc251e..95f6a0e7 100644 --- a/build.yaml +++ b/build.yaml @@ -42,27 +42,18 @@ targets: # configs for the flutter.assets generator generate_for: - $package$ - source_gen:combining_builder: - # configs for the source_gen:combining_builder generator - generate_for: - - lib/**.dart json_serializable: # configs for the @JsonSerializable generator generate_for: - lib/features/*/domain/*_model.dart - lib/features/*/domain/*_entity.dart - widgetbook_generator:app_builder: - # configs for @App() generator... - generate_for: - - lib/widgetbook.generator.dart - widgetbook_generator:use_case_builder: - # configs for @UseCase() generator... - generate_for: - - lib/widgets/*/*.dart - widgetbook_generator:telemetry: - # disable widgetbook telemetry... - enabled: false build_version:build_version: # configs for the packageVersion generator... options: output: lib/gen/version.gen.dart + envied_generator:envied: + # configs for the @Envied generator + generate_for: + - lib/env/env.dart + options: + output: lib/gen/env.g.dart diff --git a/cspell.json b/cspell.json index a588cbce..cc380af8 100644 --- a/cspell.json +++ b/cspell.json @@ -13,16 +13,6 @@ "description": "Words used in this project.", "addWords": true }, - { - "name": "vgv_allowed", - "path": "https://raw.githubusercontent.com/verygoodopensource/very_good_dictionaries/main/allowed.txt", - "description": "Allowed VGV Spellings" - }, - { - "name": "vgv_forbidden", - "path": "https://raw.githubusercontent.com/verygoodopensource/very_good_dictionaries/main/forbidden.txt", - "description": "Forbidden VGV Spellings" - } ], "useGitignore": true, "globRoot": ".", diff --git a/doc/docker.md b/doc/docker.md index b8681821..a4115e04 100644 --- a/doc/docker.md +++ b/doc/docker.md @@ -39,7 +39,7 @@ docker run -it --rm --volume /var/run/docker.sock:/var/run/docker.sock --volume | ---- | ------ | ---- | ----- | ------ | | All | βœ… | βœ… | βœ… | ❌ | -1. Verify that `.env.example` was renamed to `.env`, and that `direnv` works. +1. Verify that `.env.example` was renamed to `.env`. 1. Run the "Dart: run build_runner" VS Code task. 1. Launch the app using the VS Code Run and Debug launcher. 1. See if the app works. diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md index 89c2725b..b5b843ad 100644 --- a/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md +++ b/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md @@ -2,4 +2,4 @@ You can customize the launch screen with your own desired assets by replacing the image files in this directory. -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. \ No newline at end of file +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. diff --git a/lib/app/app.dart b/lib/app/app.dart index 7d396adc..e88537a8 100644 --- a/lib/app/app.dart +++ b/lib/app/app.dart @@ -7,7 +7,6 @@ import "package:hooks_riverpod/hooks_riverpod.dart"; import "../../l10n/l10n.dart"; import "../features/auth/application/auth_service.dart"; import "../utils/design.dart"; -import "../utils/log.dart"; import "../utils/router.dart"; import "boostrap.dart"; @@ -24,11 +23,7 @@ class App extends ConsumerWidget with Bootstrap { Widget build(BuildContext context, WidgetRef ref) { return _EagerInitialization( child: MaterialApp.router( - routerConfig: ref.read(routerProvider).config( - navigatorObservers: () => [ - RouterLogger(), - ], - ), + routerConfig: ref.read(routerProvider).config(), onGenerateTitle: (context) => context.l10n.appTitle, theme: theme, locale: flutterLocale, diff --git a/lib/app/boostrap.dart b/lib/app/boostrap.dart index c8275bf5..2cd2140d 100644 --- a/lib/app/boostrap.dart +++ b/lib/app/boostrap.dart @@ -6,11 +6,9 @@ import "package:flutter/foundation.dart"; import "package:flutter/services.dart"; import "package:flutter/widgets.dart"; import "package:flutter_web_plugins/url_strategy.dart"; -import "package:google_fonts/google_fonts.dart"; import "package:hooks_riverpod/hooks_riverpod.dart"; import "../gen/assets.gen.dart"; -import "../utils/log.dart"; /// Turn any widget into a flow-blown app. mixin Bootstrap on Widget { @@ -22,10 +20,6 @@ mixin Bootstrap on Widget { /// - [runApp] will be called to run the app. /// - [ProviderScope] will be used to wrap the app. Future bootstrap() async { - await initLogging(); - - initFlutterErrors(); - // Set up font fetching and licenses. initGoogleFonts(); @@ -41,30 +35,13 @@ mixin Bootstrap on Widget { // Run the App using Riverpod. runApp( - ProviderScope( - observers: const [ - ProviderLogger(), - ], - child: this, - ), + ProviderScope(child: this), ); } } -/// Tell Flutter's logger to use our own. -void initFlutterErrors() { - FlutterError.onError = (details) { - log.shout( - "Uncaught Flutter error:", - details.exceptionAsString(), - details.stack, - ); - }; -} - /// Set up proper font fetching and licensing. void initGoogleFonts() { - GoogleFonts.config.allowRuntimeFetching = false; LicenseRegistry.addLicense(() async* { final license = await rootBundle.loadString( Assets.googleFonts.mrDafoe.ofl, diff --git a/lib/env/env.dart b/lib/env/env.dart new file mode 100644 index 00000000..da5fabd8 --- /dev/null +++ b/lib/env/env.dart @@ -0,0 +1,27 @@ +import "package:envied/envied.dart"; + +part "env.g.dart"; + +/// Environment variables. +@Envied(useConstantCase: true) +abstract class Env { + /// Appwrite project ID + @EnviedField(defaultValue: "pirate-code") + static const String projectId = _Env.projectId; + + /// Appwrite API endpoint + @EnviedField(defaultValue: "http://localhost:80/v1") + static const String apiEndpoint = _Env.apiEndpoint; + + /// Appwrite database ID + @EnviedField(defaultValue: "pirate-coins") + static const String databaseId = _Env.databaseId; + + /// Appwrite collection ID + @EnviedField(defaultValue: "coins") + static const String collectionId = _Env.collectionId; + + /// If the Appwrite Server uses self-signed certificates. + @EnviedField(defaultValue: false) + static const bool selfSigned = _Env.selfSigned; +} diff --git a/lib/features/auth/data/auth_repository.dart b/lib/features/auth/data/auth_repository.dart index 1565e2be..58cedf9c 100644 --- a/lib/features/auth/data/auth_repository.dart +++ b/lib/features/auth/data/auth_repository.dart @@ -1,6 +1,7 @@ /// This library contains the authentication feature's data fetchers. library; +import "dart:developer"; import "dart:typed_data"; import "package:appwrite/appwrite.dart"; @@ -8,9 +9,7 @@ import "package:appwrite/models.dart"; import "package:riverpod_annotation/riverpod_annotation.dart"; import "../../../utils/api.dart"; -import "../../../utils/log.dart"; -import "../../utils/data/device_repository.dart"; -import "../../utils/domain/device_model.dart"; +import "../../../utils/device_repository.dart"; import "../domain/account_type.dart"; import "../domain/pirate_user_entity.dart"; import "avatar_repository.dart"; @@ -49,12 +48,12 @@ base class _AppwriteAuthRepository implements AuthRepository { try { account = await _account.get(); } catch (e, s) { - log.warning("Failed to fetch session.", e, s); + log("Failed to fetch session.", error: e, stackTrace: s); if (anonymous) { try { await _account.createAnonymousSession(); } catch (e, s) { - log.warning("Failed to create anonymous session.", e, s); + log("Failed to create anonymous session.", error: e, stackTrace: s); } } else { try { @@ -69,7 +68,7 @@ base class _AppwriteAuthRepository implements AuthRepository { // TODO(lishaduck): The web needs different behavior than that of linux/mac/windows/fuchsia. case Device.web || Device.linux || - Device.macos || + Device.macOS || Device.windows || Device.other: await _account.createOAuth2Session( @@ -79,7 +78,7 @@ base class _AppwriteAuthRepository implements AuthRepository { ); } } catch (e, s) { - log.warning("Failed to create OAuth2 session.", e, s); + log("Failed to create OAuth2 session.", error: e, stackTrace: s); } } @@ -96,8 +95,8 @@ base class _AppwriteAuthRepository implements AuthRepository { accountType: accountType, avatar: avatar, ); - } catch (e) { - log.warning("Failed to fetch user data.", e); + } catch (e, s) { + log("Failed to fetch user data.", error: e, stackTrace: s); return fakeUser; } diff --git a/lib/features/dashboard/presentation/wrapper_page/wrapper_page.dart b/lib/features/dashboard/presentation/wrapper_page/wrapper_page.dart index d59f63b4..7bd15621 100644 --- a/lib/features/dashboard/presentation/wrapper_page/wrapper_page.dart +++ b/lib/features/dashboard/presentation/wrapper_page/wrapper_page.dart @@ -7,17 +7,15 @@ import "package:auto_route/auto_route.dart"; import "package:auto_size_text/auto_size_text.dart"; import "package:flutter/material.dart"; import "package:flutter_hooks/flutter_hooks.dart"; -import "package:google_fonts/google_fonts.dart"; import "package:hooks_riverpod/hooks_riverpod.dart"; import "package:url_launcher/link.dart"; import "../../../../app/app_router.dart"; import "../../../../gen/assets.gen.dart"; +import "../../../../gen/fonts.gen.dart"; import "../../../../gen/version.gen.dart"; -import "../../../../utils/fonts.dart"; import "../../../../utils/hooks.dart"; import "../../../auth/application/auth_service.dart"; -import "../../../utils/presentation/device_info/device_banner.dart"; /// Wrap the app, providing navigation and routing. /// It enforces that the app is under `/pirate-coins`. @@ -45,7 +43,7 @@ class WrapperPage extends StatelessWidget { : _ExpandedWrapper(constraints: constraints, child: child); return SafeArea( - child: DeviceBanner(child: page), + child: page, ); }, ); @@ -72,10 +70,6 @@ class _ExpandedWrapper extends HookConsumerWidget { final name = ref.watch(usernameProvider).valueOrNull; final email = ref.watch(emailProvider).valueOrNull; final avatar = ref.watch(avatarProvider).valueOrNull; - final mrDafoe = GoogleFonts.mrDafoe(); - final isMrDafoeLoaded = ref.watch( - isFontLoadedProvider(Fonts(families: [mrDafoe])), - ); return Scaffold( appBar: AppBar( @@ -123,23 +117,21 @@ class _ExpandedWrapper extends HookConsumerWidget { color: theme.appBarTheme.backgroundColor, child: RotatedBox( quarterTurns: 1, - child: switch (isMrDafoeLoaded) { - AsyncData() => Text( - "Pattonville Pirates", - style: GoogleFonts.mrDafoe( - color: const Color.fromARGB(255, 9, 56, 19), - shadows: [ - Shadow( - color: theme.colorScheme.shadow.withOpacity(0.5), - blurRadius: 1, - ), - ], + child: Text( + "Pattonville Pirates", + style: TextStyle( + fontFamily: FontFamily.mrDafoe, + color: const Color.fromARGB(255, 9, 56, 19), + shadows: [ + Shadow( + color: theme.colorScheme.shadow.withOpacity(0.5), + blurRadius: 1, ), - textScaler: const TextScaler.linear(4), - textAlign: TextAlign.center, - ), - AsyncError() || AsyncLoading() => const SizedBox(), - }, + ], + ), + textScaler: const TextScaler.linear(4), + textAlign: TextAlign.center, + ), ), ), Expanded( diff --git a/lib/features/utils/application/banner_service.dart b/lib/features/utils/application/banner_service.dart deleted file mode 100644 index 6cd864d0..00000000 --- a/lib/features/utils/application/banner_service.dart +++ /dev/null @@ -1,16 +0,0 @@ -/// This library contains the utilities feature's development banner's business logic. -library; - -import "package:riverpod_annotation/riverpod_annotation.dart"; - -import "../../../utils/constants.dart"; -import "../domain/banner_model.dart"; - -part "banner_service.g.dart"; - -/// Get the banner's current state. -@riverpod -BannerConfig bannerConfig(BannerConfigRef ref) => BannerConfig( - name: buildMode.name, - color: buildMode.color, - ); diff --git a/lib/features/utils/application/device_service.dart b/lib/features/utils/application/device_service.dart deleted file mode 100644 index dc7b33dd..00000000 --- a/lib/features/utils/application/device_service.dart +++ /dev/null @@ -1,19 +0,0 @@ -/// This library contains the utilities feature's device business logic. -library; - -import "package:riverpod_annotation/riverpod_annotation.dart"; - -import "../data/device_repository.dart"; -import "../domain/device_model.dart"; - -part "device_service.g.dart"; - -/// Get the [currentPlatform]'s information. -@riverpod -Future deviceInfo(DeviceInfoRef ref) async { - final deviceInfo = ref.watch( - deviceUtilsProvider.select((value) => value.deviceInfo), - ); - - return deviceInfo(); -} diff --git a/lib/features/utils/data/device_repository.dart b/lib/features/utils/data/device_repository.dart deleted file mode 100644 index ddaac29e..00000000 --- a/lib/features/utils/data/device_repository.dart +++ /dev/null @@ -1,93 +0,0 @@ -/// This library contains the utilities feature's device data fetchers. -library; - -import "package:device_info_plus/device_info_plus.dart"; -import "package:os_detect/os_detect.dart"; -import "package:riverpod_annotation/riverpod_annotation.dart"; - -import "../domain/device_model.dart"; - -part "device_repository.g.dart"; - -/// A repository for device information. -abstract interface class DeviceRepository { - /// Get information about the [currentPlatform]. - Future deviceInfo(); -} - -/// The default implementation of [DeviceRepository], using [DeviceInfoPlugin] from [`device_info_plus`](https://pub.dev/packages/device_info_plus). -/// This implementation will return the device information for the [currentPlatform]. -/// If the platform is not supported, it will return a default value. -base class _DeviceUtilsRepository implements DeviceRepository { - /// Create a new instance of [_DeviceUtilsRepository]. - const _DeviceUtilsRepository({ - required DeviceInfoPlugin plugin, - required Device platform, - }) : _plugin = plugin, - _platform = platform; - - final DeviceInfoPlugin _plugin; - final Device _platform; - - @override - Future deviceInfo() async { - switch (_platform) { - case Device.android: - final androidInfo = await _plugin.androidInfo; - final version = androidInfo.version; - final info = DeviceData.android( - device: _platform, - isPhysicalDevice: androidInfo.isPhysicalDevice, - model: androidInfo.model, - manufacturer: androidInfo.manufacturer, - release: version.release, - sdkInt: version.sdkInt, - ); - - return info; - - case Device.ios: - final iosInfo = await _plugin.iosInfo; - final info = DeviceData.iOS( - device: _platform, - isPhysicalDevice: iosInfo.isPhysicalDevice, - model: iosInfo.model, - name: iosInfo.name, - systemName: iosInfo.systemName, - systemVersion: iosInfo.systemVersion, - ); - - return info; - - case Device.web || - Device.linux || - Device.macos || - Device.windows || - Device.other: - return DeviceData.other( - device: _platform, - isPhysicalDevice: false, - model: "Unknown", - ); - } - } -} - -/// Get the information about the [currentPlatform] and build mode. -@riverpod -DeviceRepository deviceUtils(DeviceUtilsRef ref) { - final device = ref.watch(currentPlatformProvider); - final plugin = DeviceInfoPlugin(); - - return _DeviceUtilsRepository(plugin: plugin, platform: device); -} - -/// Get the current device platform as an enum. -@Riverpod(keepAlive: true) -Device currentPlatform(CurrentPlatformRef ref) { - return switch (operatingSystem) { - "android" => Device.android, - "ios" => Device.ios, - String() => Device.other, - }; -} diff --git a/lib/features/utils/domain/banner_model.dart b/lib/features/utils/domain/banner_model.dart deleted file mode 100644 index 8c6575f3..00000000 --- a/lib/features/utils/domain/banner_model.dart +++ /dev/null @@ -1,24 +0,0 @@ -/// This library contains the utilities feature's development banner's [Model]. -library; - -import "package:flutter/foundation.dart"; -import "package:flutter/material.dart"; -import "package:freezed_annotation/freezed_annotation.dart"; - -import "../../../utils/models.dart"; - -part "banner_model.freezed.dart"; - -/// Represent the development banner's configuration. -@freezed -@immutable -sealed class BannerConfig with _$BannerConfig { - /// Create a new, immutable instance of [BannerConfig]. - const factory BannerConfig({ - /// The name to display on the banner. - required String name, - - /// The color of the banner. - required Color color, - }) = _BannerConfig; -} diff --git a/lib/features/utils/domain/device_model.dart b/lib/features/utils/domain/device_model.dart deleted file mode 100644 index 52d8e6f7..00000000 --- a/lib/features/utils/domain/device_model.dart +++ /dev/null @@ -1,123 +0,0 @@ -/// This library contains the utilities feature's device [Model]. -library; - -import "package:flutter/foundation.dart"; -import "package:flutter/material.dart"; -import "package:freezed_annotation/freezed_annotation.dart"; - -import "../../../utils/models.dart"; -import "../data/device_repository.dart"; - -part "device_model.freezed.dart"; - -/// Represent modeled information about the [currentPlatform]. -@freezed -@immutable -sealed class DeviceData with _$DeviceData { - /// Create a new, immutable instance of iOS's [DeviceData]. - const factory DeviceData.iOS({ - /// The current [Device]. - required Device device, - - /// If the current [Device] is a physical device. - required bool isPhysicalDevice, - - /// The current [Device]'s model. - required String model, - - /// The current [Device]'s name. - required String name, - - /// The current [Device]'s operating system. - required String systemName, - - /// The current [Device]'s operating system version. - required String systemVersion, - }) = IOSDeviceData; - - /// Create a new, immutable instance of Android's [DeviceData]. - const factory DeviceData.android({ - /// The current [Device]. - required Device device, - - /// If the current [Device] is a physical device. - required bool isPhysicalDevice, - - /// The current [Device]'s model. - required String model, - - /// The current [Device]'s manufacturer. - required String manufacturer, - - /// The current [Device]'s release. - required String release, - - /// The current [Device]'s SDK number. - required int sdkInt, - }) = AndroidDeviceData; - - /// Create a new, immutable instance of all other platforms' [DeviceData]. - const factory DeviceData.other({ - /// The current [Device]. - required Device device, - - /// If the current [Device] is a physical device. - required bool isPhysicalDevice, - - /// The current [Device]'s model. - required String model, - }) = OtherDeviceData; -} - -/// An enum containing the supported devices. -enum Device { - /// The Android platform. - android, - - /// The iOS platform. - ios, - - /// Browsers. - web, - - /// Linux/UNIX/POSIX platforms. - linux, - - /// The OS X, etc. platform. - macos, - - /// The windows platform. - windows, - - /// Other platforms, like Fuchsia. - other; -} - -/// An enum containing the possible build modes. -enum BuildMode { - /// The debug build mode. - /// This is the only mode that can run on emulators. - debug(Colors.blue), - - /// The profile build mode. - /// This is the mode that can be used to profile the app. - profile(Colors.red), - - /// The release build mode. - /// This is the only mode that should be published to the app store. - release(Colors.green); - - const BuildMode(this.color); - - /// The color associated with the build mode. - final Color color; - - /// Check if the current build mode is [debug]. - bool get isDebug => this == BuildMode.debug; - - /// Check if the current build mode is [profile]. - bool get isProfile => this == BuildMode.profile; - - /// Check if the current build mode is [release]. - bool get isRelease => this == BuildMode.release; -} diff --git a/lib/features/utils/presentation/device_info/device_banner.dart b/lib/features/utils/presentation/device_info/device_banner.dart deleted file mode 100644 index 218d05ec..00000000 --- a/lib/features/utils/presentation/device_info/device_banner.dart +++ /dev/null @@ -1,46 +0,0 @@ -/// This library contains the utilities feature's development banner. -library; - -import "package:flutter/material.dart"; -import "package:hooks_riverpod/hooks_riverpod.dart"; - -import "../../../../utils/constants.dart"; -import "../../application/banner_service.dart"; -import "device_info_dialog.dart"; - -/// A widget that displays a banner at the top of the screen. -class DeviceBanner extends ConsumerWidget { - /// Create a new instance of [DeviceBanner]. - const DeviceBanner({ - required this.child, - super.key, - }); - - /// The content under the banner. - final Widget child; - - @override - Widget build(BuildContext context, WidgetRef ref) { - if (buildMode.isRelease) return child; - - final banner = ref.watch(bannerConfigProvider); - final direction = Directionality.of(context); - - return Material( - child: InkWell( - onLongPress: () async => showDialog( - context: context, - builder: (BuildContext context) => const DeviceInfoDialog(), - ), - child: Banner( - message: banner.name, - location: BannerLocation.topStart, - color: banner.color, - textDirection: direction, - layoutDirection: direction, - child: child, - ), - ), - ); - } -} diff --git a/lib/features/utils/presentation/device_info/device_info_dialog.dart b/lib/features/utils/presentation/device_info/device_info_dialog.dart deleted file mode 100644 index 2e7de490..00000000 --- a/lib/features/utils/presentation/device_info/device_info_dialog.dart +++ /dev/null @@ -1,143 +0,0 @@ -/// This library contains the utilities feature's device info dialog. -library; - -import "package:auto_size_text/auto_size_text.dart"; -import "package:flutter/material.dart"; -import "package:hooks_riverpod/hooks_riverpod.dart"; - -import "../../../../l10n/l10n.dart"; -import "../../../../utils/constants.dart"; -import "../../application/device_service.dart"; -import "../../domain/device_model.dart"; - -/// A dialog that displays information about the device. -class DeviceInfoDialog extends StatelessWidget { - /// Create a new instance of [DeviceInfoDialog]. - const DeviceInfoDialog({super.key}); - - @override - Widget build(BuildContext context) { - final theme = Theme.of(context); - - return AlertDialog( - title: Container( - padding: const EdgeInsets.all(15), - color: buildMode.color, - child: AutoSizeText( - "Device Information", - style: theme.textTheme.titleMedium, - ), - ), - titlePadding: EdgeInsets.zero, - content: const _GetContent(), - contentPadding: const EdgeInsets.only(bottom: 10), - ); - } -} - -class _BuildTile extends StatelessWidget { - const _BuildTile( - this.text, - this.value, { - // Temporary ignore, see . - // ignore: unused_element - super.key, - }); - - final String text; - final String value; - - @override - Widget build(BuildContext context) { - return Padding( - padding: const EdgeInsets.all(5), - child: ListTile( - leading: AutoSizeText( - text, - style: const TextStyle(fontWeight: FontWeight.bold), - ), - subtitle: AutoSizeText( - value, - ), - ), - ); - } -} - -class _GetContent extends ConsumerWidget { - const _GetContent({ - // Temporary ignore, see . - // ignore: unused_element - super.key, - }); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final deviceInfo = ref.watch(deviceInfoProvider); - final l10n = context.l10n; - - return switch (deviceInfo) { - AsyncData(:final value) => _View(value: value), - AsyncLoading() => Center( - child: Column( - children: [ - const CircularProgressIndicator(), - AutoSizeText(l10n.loading), - ], - ), - ), - AsyncError(:final error, :final stackTrace) => - AutoSizeText(l10n.error("$error, $stackTrace.")), - }; - } -} - -class _View extends StatelessWidget { - const _View({ - required this.value, - // Temporary ignore, see . - // ignore: unused_element - super.key, - }); - - final DeviceData value; - - @override - Widget build(BuildContext context) { - return ListView( - children: [ - _BuildTile("Build mode:", buildMode.name), - _BuildTile("Physical device?:", "${value.isPhysicalDevice}"), - _BuildTile("Model:", value.model), - ...switch (value) { - AndroidDeviceData( - :final manufacturer, - :final release, - :final sdkInt, - ) => - [ - _BuildTile("Manufacturer:", manufacturer), - _BuildTile("Android version:", release), - _BuildTile("Android SDK:", "$sdkInt"), - ], - IOSDeviceData( - :final name, - :final systemName, - :final systemVersion, - ) => - [ - _BuildTile("Device:", name), - _BuildTile("System name:", systemName), - _BuildTile("System version:", systemVersion), - ], - OtherDeviceData() => [ - const _BuildTile( - "Oops.", - "Chances are, you're neither on Android nor iOS.", - ), - ] - }, - ], - ); - } -} diff --git a/lib/utils/api.dart b/lib/utils/api.dart index 424a155a..594c0eb3 100644 --- a/lib/utils/api.dart +++ b/lib/utils/api.dart @@ -10,7 +10,7 @@ import "package:flutter/foundation.dart"; import "package:freezed_annotation/freezed_annotation.dart"; import "package:riverpod_annotation/riverpod_annotation.dart"; -import "constants.dart"; +import "../env/env.dart"; part "api.freezed.dart"; part "api.g.dart"; @@ -49,11 +49,11 @@ abstract interface class ApiRepository { /// The Appwrite API information, gotten via passed in environment variables. const ApiRepository apiInfo = Api( - projectId: DartDefine.projectId, - url: DartDefine.apiEndpoint, - databaseId: DartDefine.databaseId, - collectionId: DartDefine.collectionId, - isSelfSigned: DartDefine.selfSigned, + projectId: Env.projectId, + url: Env.apiEndpoint, + databaseId: Env.databaseId, + collectionId: Env.collectionId, + isSelfSigned: Env.selfSigned, ); /// Get the Appwrite client. diff --git a/lib/utils/constants.dart b/lib/utils/constants.dart deleted file mode 100644 index e9bf9392..00000000 --- a/lib/utils/constants.dart +++ /dev/null @@ -1,15 +0,0 @@ -/// This library contains the constants used throughout the app. -library; - -import "package:flutter/foundation.dart"; - -import "../features/utils/domain/device_model.dart"; - -export "../../dart_define.gen.dart"; - -/// The current build mode. -const BuildMode buildMode = kReleaseMode - ? BuildMode.release - : kProfileMode - ? BuildMode.profile - : BuildMode.debug; diff --git a/lib/utils/device_repository.dart b/lib/utils/device_repository.dart new file mode 100644 index 00000000..22d4c287 --- /dev/null +++ b/lib/utils/device_repository.dart @@ -0,0 +1,41 @@ +/// This library contains the utilities feature's device data fetchers. +library; + +import "package:os_detect/os_detect.dart"; +import "package:riverpod_annotation/riverpod_annotation.dart"; + +part "device_repository.g.dart"; + +/// Get the current device platform as an enum. +@Riverpod(keepAlive: true) +Device currentPlatform(CurrentPlatformRef ref) { + return switch (operatingSystem) { + "android" => Device.android, + "ios" => Device.ios, + String() => Device.other, + }; +} + +/// An enum containing the supported devices. +enum Device { + /// The Android platform. + android, + + /// The iOS platform. + ios, + + /// Browsers. + web, + + /// Linux/UNIX/POSIX platforms. + linux, + + /// The OS X, etc. platform. + macOS, + + /// The windows platform. + windows, + + /// Other platforms, like Fuchsia. + other; +} diff --git a/lib/utils/fonts.dart b/lib/utils/fonts.dart deleted file mode 100644 index 34063ccc..00000000 --- a/lib/utils/fonts.dart +++ /dev/null @@ -1,22 +0,0 @@ -import "package:flutter/material.dart"; -import "package:freezed_annotation/freezed_annotation.dart"; -import "package:google_fonts/google_fonts.dart"; -import "package:riverpod_annotation/riverpod_annotation.dart"; - -part "fonts.freezed.dart"; -part "fonts.g.dart"; - -/// Check if a font's been loaded yet. -@riverpod -Future isFontLoaded(IsFontLoadedRef ref, Fonts fonts) async => - GoogleFonts.pendingFonts(fonts.families); - -/// A list of fonts to load, for use with [GoogleFonts]. -@freezed -class Fonts with _$Fonts { - /// Create a new, immutable [Fonts]. - const factory Fonts({ - /// The list of font families to load. - required List families, - }) = _Font; -} diff --git a/lib/utils/log.dart b/lib/utils/log.dart deleted file mode 100644 index 3467a603..00000000 --- a/lib/utils/log.dart +++ /dev/null @@ -1,142 +0,0 @@ -/// This library contains utilities for logging. -library; - -import "dart:developer" as developer; - -import "package:auto_route/auto_route.dart"; -import "package:flutter/material.dart"; -import "package:hooks_riverpod/hooks_riverpod.dart"; -import "package:io/ansi.dart"; -import "package:logging/logging.dart"; -import "package:os_detect/os_detect.dart"; - -export "package:logging/logging.dart" show Logger; - -/// Utility methods for logging. -extension LoggingUtils on Logger { - /// Debug code when a value is still needed. - /// - /// WARNING: THIS METHOD IS CURRENTLY BROKEN. - T debug(T value, [Object? message, Level level = Level.FINE]) { - this.log(level, message ?? value); - - return value; - } -} - -/// Initialize the logger. -Future initLogging([Level level = Level.INFO]) async { - Logger.root.level = level; - hierarchicalLoggingEnabled = true; - Logger.root.onRecord.listen((record) async { - // Don't use ansi output in the browser. - final prefix = overrideAnsiOutput( - !isBrowser && ansiOutputEnabled, - () { - final color = switch (record.level) { - >= Level.SEVERE => red, - >= Level.WARNING => yellow, - Level() => cyan, - }; - return color.wrap( - "[${record.sequenceNumber}: ${record.level.name}@${record.time}]", - ); - }, - ); - - developer.log( - "$prefix: ${record.message}", - error: record.error.toString(), - stackTrace: record.stackTrace, - level: record.level.value, - time: record.time, - name: record.loggerName, - ); - }); - Logger.root.onLevelChanged.listen((level) { - Logger.root.info("Log level changed to $level"); - }); -} - -/// The app's logger. -final log = Logger("App"); - -/// Log provider updates to the console. -class ProviderLogger extends ProviderObserver { - /// Create a new instance of [ProviderLogger]. - const ProviderLogger(); - - @override - void didUpdateProvider( - ProviderBase provider, - Object? previousValue, - Object? newValue, - ProviderContainer container, - ) { - log.finest("[${provider.name}] value: $newValue"); - } -} - -/// Log routing events to the console. -class RouterLogger extends AutoRouterObserver { - @override - void didPush( - Route route, - Route? previousRoute, - ) { - log.finest("New route pushed: ${route.settings.name}"); - } - - @override - void didPop( - Route route, - Route? previousRoute, - ) { - log.finest("Route popped: ${route.settings.name}"); - } - - @override - void didRemove( - Route route, - Route? previousRoute, - ) { - log.finest("Route removed: ${route.settings.name}"); - } - - @override - void didReplace({ - Route? newRoute, - Route? oldRoute, - }) { - log.finest("Route replaced: ${newRoute?.settings.name}"); - } - - @override - void didStartUserGesture( - Route route, - Route? previousRoute, - ) { - log.finest("User gesture started: ${route.settings.name}"); - } - - @override - void didStopUserGesture() { - log.finest("User gesture stopped"); - } - - @override - void didInitTabRoute( - TabPageRoute route, - TabPageRoute? previousRoute, - ) { - log.finest("Tab route visited: ${route.name}"); - } - - @override - void didChangeTabRoute( - TabPageRoute route, - TabPageRoute previousRoute, - ) { - log.finest("Tab route re-visited: ${route.name}"); - } -} diff --git a/lib/widgetbook.generator.dart b/lib/widgetbook.generator.dart deleted file mode 100644 index f9c37276..00000000 --- a/lib/widgetbook.generator.dart +++ /dev/null @@ -1,46 +0,0 @@ -/// This library contains the widget preview. -library; - -import "package:flutter/material.dart"; -import "package:hooks_riverpod/hooks_riverpod.dart"; -import "package:widgetbook/widgetbook.dart"; -import "package:widgetbook_annotation/widgetbook_annotation.dart"; - -import "app/app.dart" hide App; -import "l10n/app_localizations.dart"; -import "utils/design.dart"; -import "widgetbook.generator.directories.g.dart"; - -void main() { - runApp(const ProviderScope(child: WidgetbookApp())); -} - -/// The main Widgetbook app. -@App() -class WidgetbookApp extends StatelessWidget { - /// Create a new instance of [WidgetbookApp]. - const WidgetbookApp({super.key}); - - @override - Widget build(BuildContext context) { - return Widgetbook.material( - // Use the generated directories variable - directories: directories, - addons: [ - MaterialThemeAddon( - themes: [ - WidgetbookTheme( - name: "Light", - data: ThemeData(colorScheme: scheme), - ), - ], - ), - LocalizationAddon( - locales: AppLocalizations.supportedLocales, - localizationsDelegates: AppLocalizations.localizationsDelegates, - initialLocale: flutterLocale, - ), - ], - ); - } -} diff --git a/lib/widgets/big_card/big_card.dart b/lib/widgets/big_card/big_card.dart index 2e5624a3..ad15f233 100644 --- a/lib/widgets/big_card/big_card.dart +++ b/lib/widgets/big_card/big_card.dart @@ -3,8 +3,6 @@ library; import "package:auto_size_text/auto_size_text.dart"; import "package:flutter/material.dart"; -import "package:widgetbook/widgetbook.dart"; -import "package:widgetbook_annotation/widgetbook_annotation.dart"; /// A, well, big card! class BigCard extends StatelessWidget { @@ -45,18 +43,3 @@ class BigCard extends StatelessWidget { ); } } - -/// A [UseCase] for a [BigCard]. -@UseCase(name: "name", type: BigCard) -Widget bigCardUseCase(BuildContext context) { - return Column( - children: [ - BigCard( - context.knobs.string( - label: "What the text says.", - initialValue: "This is a big card!", - ), - ), - ], - ); -} diff --git a/netlify.toml b/netlify.toml index b26fb034..a20a8b32 100644 --- a/netlify.toml +++ b/netlify.toml @@ -1,7 +1,6 @@ collections = [] # only needed for DecapCMS media_folder = "" # unneeded, but required by the schema - [build] # The relative path to the directory to be published publish = "build/web" @@ -16,11 +15,9 @@ command = """ && flutter/bin/flutter pub get \ && flutter/bin/flutter gen-l10n \ && flutter/bin/cache/dart-sdk/bin/dart run build_runner build \ - && flutter/bin/cache/dart-sdk/bin/dart run dart_define generate \ - && flutter/bin/flutter build web --release --dart-define-from-file=dart_define.json + && flutter/bin/flutter build web --release """ - # The following redirect is intended for use with most SPAs # that handle routing internally. [[redirects]] @@ -28,5 +25,4 @@ from = "/*" status = 200 to = "/index.html" - [backend] diff --git a/project_words.txt b/project_words.txt index 4671bf89..9e1cdc77 100644 --- a/project_words.txt +++ b/project_words.txt @@ -1,31 +1,88 @@ +!appWrite !AppWrite +!back-end +!cell-phone +!commandline +!compiletime +!data-store +!data-type +!deep-linking +!e-commerce +!end-point +!file-name +!fill-in +!fill-out +!front-end +!Github +!hard-code +!iot +!life-cycle +!live-stream +!log-in +!mac-os +!Macos +!mark-up +!micro-services +!mix-in +!name-space +!o-auth !pattonville +!plaintext +!plug-in +!screen-shot +!set-up +!standup +!start-up +!sub-tree +!time-frame +!time-out +!time-stamp +!touch-screen +!user-name +!userbase +!walk-through +!web-page +!webpage +!white-space +!wild-card ansi Appwrite ARGB AutentΓ­cate +codegen cupertino dafoe Dafoe dartdoc +data Decap dhttpd -direnv +endtemplate fullscreen gbaccetta +genhtml Gmail Immich Instructure ipad iphone l10nization +lcov linux lishaduck localizable +mocktail Pattonville +pbxproj POSIX psdr3 +pubspec riverpod +roadmap Texto +unawaited WCAG -Widgetbook +xcassets +xcode +xcodeproj +xcworkspace diff --git a/pubspec.lock b/pubspec.lock index 28ba5526..2f33572d 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -9,14 +9,6 @@ packages: url: "https://pub.dev" source: hosted version: "64.0.0" - accessibility_tools: - dependency: transitive - description: - name: accessibility_tools - sha256: "0a16adc8dfa3a7ebd38775135d86443011a65d4ecbb438913e4992b5d29135fe" - url: "https://pub.dev" - source: hosted - version: "1.0.0" analyzer: dependency: transitive description: @@ -53,10 +45,10 @@ packages: dependency: transitive description: name: archive - sha256: "06a96f1249f38a00435b3b0c9a3246d934d7dbc8183fc7c9e56989860edb99d4" + sha256: "22600aa1e926be775fa5fe7e6894e7fb3df9efda8891c73f70fb3262399a432d" url: "https://pub.dev" source: hosted - version: "3.4.4" + version: "3.4.10" args: dependency: transitive description: @@ -141,26 +133,26 @@ packages: dependency: transitive description: name: build_daemon - sha256: "5f02d73eb2ba16483e693f80bee4f088563a820e47d1027d4cdfe62b5bb43e65" + sha256: "0343061a33da9c5810b2d6cee51945127d8f4c060b7fbdd9d54917f0a3feaaa1" url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "4.0.1" build_modules: dependency: transitive description: name: build_modules - sha256: "14a8e9bf4b1ae3f5d6c925c1386da59e818c68cc6f1f6fda991f7c6b74c6ebb9" + sha256: "66f0f746a239ff6cceba9d235a679ec70a6d9037ddddb36a24a0791a639a8486" url: "https://pub.dev" source: hosted - version: "5.0.4" + version: "5.0.7" build_resolvers: dependency: transitive description: name: build_resolvers - sha256: d912852cce27c9e80a93603db721c267716894462e7033165178b91138587972 + sha256: "339086358431fa15d7eca8b6a36e5d783728cf025e559b834f4609a1fcfb7b0a" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.4.2" build_runner: dependency: "direct dev" description: @@ -173,10 +165,10 @@ packages: dependency: transitive description: name: build_runner_core - sha256: "6d6ee4276b1c5f34f21fdf39425202712d2be82019983d52f351c94aafbc2c41" + sha256: "4ae8ffe5ac758da294ecf1802f2aff01558d8b1b00616aa7538ea9a8a5d50799" url: "https://pub.dev" source: hosted - version: "7.2.10" + version: "7.3.0" build_version: dependency: "direct main" description: @@ -205,10 +197,10 @@ packages: dependency: transitive description: name: built_value - sha256: a8de5955205b4d1dbbbc267daddf2178bd737e4bab8987c04a500478c9651e74 + sha256: a3ec2e0f967bc47f69f95009bb93db936288d61d5343b9436e378b28a2f830c6 url: "https://pub.dev" source: hosted - version: "8.6.3" + version: "8.9.0" characters: dependency: transitive description: @@ -245,18 +237,18 @@ packages: dependency: transitive description: name: cli_completion - sha256: "595b192451285749369e99b3c2fd9a9aea7d74ed1aba61cddeb9ad8c84a44812" + sha256: "1e87700c029c77041d836e57f9016b5c90d353151c43c2ca0c36deaadc05aa3a" url: "https://pub.dev" source: hosted - version: "0.3.0" + version: "0.4.0" cli_util: dependency: transitive description: name: cli_util - sha256: b8db3080e59b2503ca9e7922c3df2072cf13992354d5e944074ffa836fba43b7 + sha256: c05b7406fdabc7a49a3929d4af76bcaccbbffcbcdcf185b082e1ae07da323d19 url: "https://pub.dev" source: hosted - version: "0.4.0" + version: "0.4.1" clock: dependency: transitive description: @@ -265,22 +257,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.1" - cmd_plus: - dependency: transitive - description: - name: cmd_plus - sha256: "270ff868ef27cbb50fea7c43e782a68cf77de47a6d3516ac71654dde0e372f0a" - url: "https://pub.dev" - source: hosted - version: "1.3.3" code_builder: dependency: transitive description: name: code_builder - sha256: "315a598c7fbe77f22de1c9da7cfd6fd21816312f16ffa124453b4fc679e540f1" + sha256: f692079e25e7869c14132d39f223f8eec9830eb76131925143b2129c4bb01b37 url: "https://pub.dev" source: hosted - version: "4.6.0" + version: "4.10.0" collection: dependency: transitive description: @@ -313,6 +297,14 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.8" + coverage: + dependency: transitive + description: + name: coverage + sha256: "8acabb8306b57a409bf4c83522065672ee13179297a6bb0cb9ead73948df7c76" + url: "https://pub.dev" + source: hosted + version: "1.7.2" crypto: dependency: transitive description: @@ -341,42 +333,34 @@ packages: dependency: "direct dev" description: name: custom_lint - sha256: dfb893ff17c83cf08676c6b64df11d3e53d80590978d7c1fb242afff3ba6dedb + sha256: "22bd87a362f433ba6aae127a7bac2838645270737f3721b180916d7c5946cb5d" url: "https://pub.dev" source: hosted - version: "0.5.8" + version: "0.5.11" custom_lint_builder: dependency: transitive description: name: custom_lint_builder - sha256: "8df6634b38a36a6c6cb74a9c0eb02e9ba0b0ab89b29e38e6daa86e8ed2c6288d" + sha256: "7d0b094266b5c357769fffb920826b1a08373290f3c5c44b86253aae6873d5fc" url: "https://pub.dev" source: hosted - version: "0.5.8" + version: "0.5.11" custom_lint_core: dependency: transitive description: name: custom_lint_core - sha256: "2b235be098d157e244f18ea905a15a18c16a205e30553888fac6544bbf52f03f" - url: "https://pub.dev" - source: hosted - version: "0.5.8" - dart_define: - dependency: "direct dev" - description: - name: dart_define - sha256: d8f7e28c252d625d4de4e3bbc7ba13cb974959561a1da384e65088d1b9a13d55 + sha256: "77dd37e9afe5ed86fc75de22ed3dfae5afb75303111358766550af23e7de53cd" url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "0.5.11" dart_style: dependency: transitive description: name: dart_style - sha256: abd7625e16f51f554ea244d090292945ec4d4be7bfbaf2ec8cccea568919d334 + sha256: "40ae61a5d43feea6d24bd22c0537a6629db858963b99b4bc1c3db80676f32368" url: "https://pub.dev" source: hosted - version: "2.3.3" + version: "2.3.4" dartx: dependency: transitive description: @@ -385,22 +369,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.0" - device_frame: - dependency: transitive - description: - name: device_frame - sha256: afe76182aec178d171953d9b4a50a43c57c7cf3c77d8b09a48bf30c8fa04dd9d - url: "https://pub.dev" - source: hosted - version: "1.1.0" device_info_plus: - dependency: "direct main" + dependency: transitive description: name: device_info_plus - sha256: "0042cb3b2a76413ea5f8a2b40cec2a33e01d0c937e91f0f7c211fde4f7739ba6" + sha256: "77f757b789ff68e4eaf9c56d1752309bd9f7ad557cb105b938a7f8eb89e59110" url: "https://pub.dev" source: hosted - version: "9.1.1" + version: "9.1.2" device_info_plus_platform_interface: dependency: transitive description: @@ -417,6 +393,22 @@ packages: url: "https://pub.dev" source: hosted version: "4.1.0" + envied: + dependency: "direct main" + description: + name: envied + sha256: dab29e21452c3d57ec10889d96b06b4a006b01375d4df10b33c9704800c208c4 + url: "https://pub.dev" + source: hosted + version: "0.5.3" + envied_generator: + dependency: "direct dev" + description: + name: envied_generator + sha256: b8655d5cb39b4d1d449a79ff6f1367b252c23955ff17ec7c03aacdff938598bd + url: "https://pub.dev" + source: hosted + version: "0.5.3" equatable: dependency: transitive description: @@ -445,10 +437,10 @@ packages: dependency: transitive description: name: file - sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" + sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" url: "https://pub.dev" source: hosted - version: "6.1.4" + version: "7.0.0" fixnum: dependency: transitive description: @@ -482,10 +474,10 @@ packages: dependency: "direct main" description: name: flutter_hooks - sha256: "7c8db779c2d1010aa7f9ea3fbefe8f86524fcb87b69e8b0af31e1a4b55422dec" + sha256: "09f64db63fee3b2ab8b9038a1346be7d8986977fae3fec601275bf32455ccfc0" url: "https://pub.dev" source: hosted - version: "0.20.3" + version: "0.20.4" flutter_launcher_icons: dependency: "direct dev" description: @@ -503,10 +495,10 @@ packages: dependency: "direct dev" description: name: flutter_native_splash - sha256: "141b20f15a2c4fe6e33c49257ca1bc114fc5c500b04fcbc8d75016bb86af672f" + sha256: "558f10070f03ee71f850a78f7136ab239a67636a294a44a06b6b7345178edb1e" url: "https://pub.dev" source: hosted - version: "2.3.8" + version: "2.3.10" flutter_riverpod: dependency: transitive description: @@ -581,14 +573,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.2" - google_fonts: - dependency: "direct main" - description: - name: google_fonts - sha256: f0b8d115a13ecf827013ec9fc883390ccc0e87a96ed5347a3114cac177ef18e8 - url: "https://pub.dev" - source: hosted - version: "6.1.0" graphs: dependency: transitive description: @@ -649,18 +633,10 @@ packages: dependency: transitive description: name: image - sha256: "028f61960d56f26414eb616b48b04eb37d700cbe477b7fb09bf1d7ce57fd9271" - url: "https://pub.dev" - source: hosted - version: "4.1.3" - inspector: - dependency: transitive - description: - name: inspector - sha256: "40ba0ac1c819c85139bfec9d1e283804581a8985c91f19d00e93212cf29226b1" + sha256: "49a0d4b0c12402853d3f227fe7c315601b238d126aa4caa5dbb2dcf99421aa4a" url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "4.1.6" intl: dependency: "direct main" description: @@ -670,7 +646,7 @@ packages: source: hosted version: "0.18.1" io: - dependency: "direct main" + dependency: transitive description: name: io sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" @@ -709,46 +685,46 @@ packages: url: "https://pub.dev" source: hosted version: "0.1.2" - logger: + lints: dependency: transitive description: - name: logger - sha256: "7ad7215c15420a102ec687bb320a7312afd449bac63bfb1c60d9787c27b9767f" + name: lints + sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290 url: "https://pub.dev" source: hosted - version: "1.4.0" + version: "3.0.0" logging: - dependency: "direct main" + dependency: transitive description: name: logging sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340" url: "https://pub.dev" source: hosted version: "1.2.0" - mankeli_core: + markdown: dependency: transitive description: - name: mankeli_core - sha256: ac834e86c7d2c66686f1af95cea7d61d516fb56daa8eaec83e4ce31f8df3cbe3 + name: markdown + sha256: "1b134d9f8ff2da15cb298efe6cd8b7d2a78958c1b00384ebcbdf13fe340a6c90" url: "https://pub.dev" source: hosted - version: "0.0.5" + version: "7.2.1" mason: dependency: transitive description: name: mason - sha256: fdc9ea905e7c690fe39d2f9946b7aead86fd976f8edf97d2521a65d260bbf509 + sha256: c036d801a53bba2eb70deb5ed0cce8adc6cd11bed597aaffa8d4f011d7037976 url: "https://pub.dev" source: hosted - version: "0.1.0-dev.50" + version: "0.1.0-dev.51" mason_logger: dependency: transitive description: name: mason_logger - sha256: "5d2819827d53bf0178637b64c090be546b1801550fa0af7b2780fa7e3ad7b4b7" + sha256: "3e68a3548e7b30d3c6066ac0f94c3392cc2c778d60a0f6909741896b19ac9ae4" url: "https://pub.dev" source: hosted - version: "0.2.9" + version: "0.2.11" matcher: dependency: transitive description: @@ -777,10 +753,10 @@ packages: dependency: transitive description: name: mime - sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e + sha256: "2e123074287cc9fd6c09de8336dae606d1ddb88d9ac47358826db698c176a1f2" url: "https://pub.dev" source: hosted - version: "1.0.4" + version: "1.0.5" mocktail: dependency: "direct dev" description: @@ -797,14 +773,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.0" - nested: + node_preamble: dependency: transitive description: - name: nested - sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20" + name: node_preamble + sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db" url: "https://pub.dev" source: hosted - version: "1.0.0" + version: "2.0.2" os_detect: dependency: "direct main" description: @@ -837,6 +813,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.1" + pana: + dependency: transitive + description: + name: pana + sha256: "3fc3fe8e7a9fd4827fa4d625a423eec95d305b2bc3538a3adf7fd6c49217af97" + url: "https://pub.dev" + source: hosted + version: "0.21.45" path: dependency: transitive description: @@ -849,26 +833,26 @@ packages: dependency: transitive description: name: path_provider - sha256: a1aa8aaa2542a6bc57e381f132af822420216c80d4781f7aa085ca3229208aaa + sha256: b27217933eeeba8ff24845c34003b003b2b22151de3c908d0e679e8fe1aa078b url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" path_provider_android: dependency: transitive description: name: path_provider_android - sha256: "6b8b19bd80da4f11ce91b2d1fb931f3006911477cec227cce23d3253d80df3f1" + sha256: "477184d672607c0a3bf68fbbf601805f92ef79c82b64b4d6eb318cbca4c48668" url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.2.2" path_provider_foundation: dependency: transitive description: name: path_provider_foundation - sha256: "19314d595120f82aca0ba62787d58dde2cc6b5df7d2f0daf72489e38d1b57f2d" + sha256: "5a7999be66e000916500be4f15a3633ebceb8302719b47b9cc49ce924125350f" url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.3.2" path_provider_linux: dependency: transitive description: @@ -881,10 +865,10 @@ packages: dependency: transitive description: name: path_provider_platform_interface - sha256: "94b1e0dd80970c1ce43d5d4e050a9918fce4f4a775e6142424c30a29a363265c" + sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" path_provider_windows: dependency: transitive description: @@ -897,34 +881,34 @@ packages: dependency: transitive description: name: petitparser - sha256: eeb2d1428ee7f4170e2bd498827296a18d4e7fc462b71727d111c0ac7707cfa6 + sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27 url: "https://pub.dev" source: hosted - version: "6.0.1" + version: "6.0.2" platform: dependency: transitive description: name: platform - sha256: "0a279f0707af40c890e80b1e9df8bb761694c074ba7e1d4ab1bc4b728e200b59" + sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec" url: "https://pub.dev" source: hosted - version: "3.1.3" + version: "3.1.4" plugin_platform_interface: dependency: transitive description: name: plugin_platform_interface - sha256: f4f88d4a900933e7267e2b353594774fc0d07fb072b47eedcd5b54e1ea3269f8 + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" url: "https://pub.dev" source: hosted - version: "2.1.7" + version: "2.1.8" pointycastle: dependency: transitive description: name: pointycastle - sha256: "7c1e5f0d23c9016c5bbd8b1473d0d3fb3fc851b876046039509e18e0c7485f2c" + sha256: "43ac87de6e10afabc85c445745a7b799e04de84cebaa4fd7bf55a5e1e9604d29" url: "https://pub.dev" source: hosted - version: "3.7.3" + version: "3.7.4" pool: dependency: transitive description: @@ -937,10 +921,10 @@ packages: dependency: transitive description: name: process - sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" + sha256: "21e54fd2faf1b5bdd5102afd25012184a6793927648ea81eea80552ac9405b32" url: "https://pub.dev" source: hosted - version: "4.2.4" + version: "5.0.2" protobuf: dependency: transitive description: @@ -961,10 +945,10 @@ packages: dependency: transitive description: name: pub_updater - sha256: b06600619c8c219065a548f8f7c192b3e080beff95488ed692780f48f69c0625 + sha256: "54e8dc865349059ebe7f163d6acce7c89eb958b8047e6d6e80ce93b13d7c9e60" url: "https://pub.dev" source: hosted - version: "0.3.1" + version: "0.4.0" pubspec_parse: dependency: transitive description: @@ -973,14 +957,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.3" - resizable_widget: + recase: dependency: transitive description: - name: resizable_widget - sha256: db2919754b93f386b9b3fb15e9f48f6c9d6d41f00a24397629133c99df86606a + name: recase + sha256: e4eb4ec2dcdee52dcf99cb4ceabaffc631d7424ee55e56f280bc039737f89213 url: "https://pub.dev" source: hosted - version: "1.0.5" + version: "4.1.0" + retry: + dependency: transitive + description: + name: retry + sha256: "822e118d5b3aafed083109c72d5f484c6dc66707885e07c0fbcb8b986bba7efc" + url: "https://pub.dev" + source: hosted + version: "3.1.2" riverpod: dependency: transitive description: @@ -1029,6 +1021,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.27.7" + safe_url_check: + dependency: transitive + description: + name: safe_url_check + sha256: b85685b48d74dcd9659e1f2228f900b9fb37cd3b4ba085ca4f593d06c00c36a6 + url: "https://pub.dev" + source: hosted + version: "1.1.1" scratch_space: dependency: transitive description: @@ -1045,6 +1045,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.4.1" + shelf_packages_handler: + dependency: transitive + description: + name: shelf_packages_handler + sha256: "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e" + url: "https://pub.dev" + source: hosted + version: "3.0.2" shelf_static: dependency: transitive description: @@ -1070,10 +1078,10 @@ packages: dependency: transitive description: name: source_gen - sha256: fc0da689e5302edb6177fdd964efcb7f58912f43c28c2047a808f5bfff643d16 + sha256: "14658ba5f669685cd3d63701d01b31ea748310f7ab854e471962670abcf57832" url: "https://pub.dev" source: hosted - version: "1.4.0" + version: "1.5.0" source_helper: dependency: transitive description: @@ -1082,6 +1090,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.4" + source_map_stack_trace: + dependency: transitive + description: + name: source_map_stack_trace + sha256: "84cf769ad83aa6bb61e0aa5a18e53aea683395f196a6f39c4c881fb90ed4f7ae" + url: "https://pub.dev" + source: hosted + version: "2.1.1" source_maps: dependency: transitive description: @@ -1098,6 +1114,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.0" + sprintf: + dependency: transitive + description: + name: sprintf + sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" + url: "https://pub.dev" + source: hosted + version: "7.0.0" stack_trace: dependency: transitive description: @@ -1138,6 +1162,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.0" + tar: + dependency: transitive + description: + name: tar + sha256: "1680219f82dfa81c8d0e76e849b7b34ea969c721f55a8ebd294a9a95e740dd42" + url: "https://pub.dev" + source: hosted + version: "1.0.3" term_glyph: dependency: transitive description: @@ -1146,6 +1178,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.1" + test: + dependency: transitive + description: + name: test + sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f + url: "https://pub.dev" + source: hosted + version: "1.24.9" test_api: dependency: transitive description: @@ -1154,14 +1194,22 @@ packages: url: "https://pub.dev" source: hosted version: "0.6.1" + test_core: + dependency: transitive + description: + name: test_core + sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a + url: "https://pub.dev" + source: hosted + version: "0.5.9" time: dependency: transitive description: name: time - sha256: "83427e11d9072e038364a5e4da559e85869b227cf699a541be0da74f14140124" + sha256: ad8e018a6c9db36cb917a031853a1aae49467a93e0d464683e029537d848c221 url: "https://pub.dev" source: hosted - version: "2.1.3" + version: "2.1.4" timing: dependency: transitive description: @@ -1206,26 +1254,26 @@ packages: dependency: transitive description: name: url_launcher_android - sha256: "31222ffb0063171b526d3e569079cf1f8b294075ba323443fdc690842bfd4def" + sha256: "507dc655b1d9cb5ebc756032eb785f114e415f91557b73bf60b7e201dfedeb2f" url: "https://pub.dev" source: hosted - version: "6.2.0" + version: "6.2.2" url_launcher_ios: dependency: transitive description: name: url_launcher_ios - sha256: bba3373219b7abb6b5e0d071b0fe66dfbe005d07517a68e38d4fc3638f35c6d3 + sha256: "75bb6fe3f60070407704282a2d295630cab232991eb52542b18347a8a941df03" url: "https://pub.dev" source: hosted - version: "6.2.1" + version: "6.2.4" url_launcher_linux: dependency: transitive description: name: url_launcher_linux - sha256: "9f2d390e096fdbe1e6e6256f97851e51afc2d9c423d3432f1d6a02a8a9a8b9fd" + sha256: ab360eb661f8879369acac07b6bb3ff09d9471155357da8443fd5d3cf7363811 url: "https://pub.dev" source: hosted - version: "3.1.0" + version: "3.1.1" url_launcher_macos: dependency: transitive description: @@ -1238,34 +1286,34 @@ packages: dependency: transitive description: name: url_launcher_platform_interface - sha256: "980e8d9af422f477be6948bdfb68df8433be71f5743a188968b0c1b887807e50" + sha256: a932c3a8082e118f80a475ce692fde89dc20fddb24c57360b96bc56f7035de1f url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.3.1" url_launcher_web: dependency: transitive description: name: url_launcher_web - sha256: "7fd2f55fe86cea2897b963e864dc01a7eb0719ecc65fcef4c1cc3d686d718bb2" + sha256: fff0932192afeedf63cdd50ecbb1bc825d31aed259f02bb8dba0f3b729a5e88b url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.2.3" url_launcher_windows: dependency: transitive description: name: url_launcher_windows - sha256: "7754a1ad30ee896b265f8d14078b0513a4dba28d358eabb9d5f339886f4a1adc" + sha256: ecf9725510600aa2bb6d7ddabe16357691b6d2805f66216a97d1b881e21beff7 url: "https://pub.dev" source: hosted - version: "3.1.0" + version: "3.1.1" uuid: dependency: transitive description: name: uuid - sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" + sha256: cd210a09f7c18cbe5a02511718e0334de6559871052c90a90c0cca46a4aa81c8 url: "https://pub.dev" source: hosted - version: "3.0.7" + version: "4.3.3" vector_math: dependency: transitive description: @@ -1286,10 +1334,10 @@ packages: dependency: "direct dev" description: name: very_good_cli - sha256: "42fd9c09fe8aab206459ab8d52710c1bfc56246817cb583c03e88cd6ccf84b50" + sha256: d8f5d77228009254930a7ff17998b5424071bd057f2716bef87d9caeaba565e5 url: "https://pub.dev" source: hosted - version: "0.16.0" + version: "0.19.1" very_good_test_runner: dependency: transitive description: @@ -1330,38 +1378,22 @@ packages: url: "https://pub.dev" source: hosted version: "2.4.0" - widgetbook: - dependency: "direct main" - description: - name: widgetbook - sha256: e3e4d710f0348da28209b8ec35617b0a425542a3c61889199dddf2b531b159bb - url: "https://pub.dev" - source: hosted - version: "3.4.1" - widgetbook_annotation: - dependency: "direct main" - description: - name: widgetbook_annotation - sha256: c2d881d0241525b36aa3777d0ac406d198528ed28b84ca73b7dd9f59189d6bb0 - url: "https://pub.dev" - source: hosted - version: "3.1.0" - widgetbook_generator: - dependency: "direct dev" + webkit_inspection_protocol: + dependency: transitive description: - name: widgetbook_generator - sha256: e60bb3ca46246bc8d5d3a0bed1994d90268b4913704a298093fcf7b6d781c6e0 + name: webkit_inspection_protocol + sha256: "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572" url: "https://pub.dev" source: hosted - version: "3.3.0" + version: "1.2.1" win32: dependency: transitive description: name: win32 - sha256: "7c99c0e1e2fa190b48d25c81ca5e42036d5cac81430ef249027d97b0935c553f" + sha256: "464f5674532865248444b4c3daca12bd9bf2d7c47f759ce2617986e7229494a8" url: "https://pub.dev" source: hosted - version: "5.1.0" + version: "5.2.0" win32_registry: dependency: transitive description: @@ -1382,10 +1414,10 @@ packages: dependency: transitive description: name: xdg_directories - sha256: "589ada45ba9e39405c198fe34eb0f607cddb2108527e658136120892beac46d2" + sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d url: "https://pub.dev" source: hosted - version: "1.0.3" + version: "1.0.4" xml: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 41b2a065..ded7078f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -37,41 +37,35 @@ dependencies: auto_route: 7.8.4 # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. - auto_size_text: ^3.0.0 - build_version: ^2.1.1 + auto_size_text: 3.0.0 + build_version: 2.1.1 cupertino_icons: 1.0.6 # Only required if you use Cupertino (iOS style) icons - device_info_plus: 9.1.1 + envied: 0.5.3 flutter: sdk: flutter - flutter_hooks: 0.20.3 + flutter_hooks: 0.20.4 flutter_localizations: # Required to enable localization sdk: flutter flutter_web_plugins: sdk: flutter freezed_annotation: 2.4.1 - google_fonts: 6.1.0 hooks_riverpod: 3.0.0-dev.3 intl: 0.18.1 - io: 1.0.4 json_annotation: 4.8.1 - logging: 1.2.0 os_detect: 2.0.1 riverpod_annotation: 3.0.0-dev.3 - url_launcher: ^6.2.4 - widgetbook: 3.4.1 - widgetbook_annotation: 3.1.0 + url_launcher: 6.2.4 dev_dependencies: auto_route_generator: 7.3.2 build_runner: 2.4.8 build_web_compilers: 4.0.9 - custom_lint: 0.5.8 - dart_define: 2.1.1 + custom_lint: 0.5.11 dhttpd: 4.1.0 - # flutter_gen_linter: 1.0.0+2 + envied_generator: 0.5.3 flutter_gen_runner: 5.4.0 flutter_launcher_icons: 0.13.1 - flutter_native_splash: 2.3.8 + flutter_native_splash: 2.3.10 flutter_test: # Required for a Flutter project that includes tests sdk: flutter freezed: 2.4.6 @@ -83,8 +77,7 @@ dev_dependencies: riverpod_generator: 3.0.0-dev.11 riverpod_lint: 3.0.0-dev.4 very_good_analysis: 5.1.0 - very_good_cli: 0.16.0 - widgetbook_generator: 3.3.0 + very_good_cli: 0.19.1 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec @@ -103,7 +96,7 @@ flutter: # To add assets to your application, add an assets section, like this: assets: # Lists assets, such as image files - assets/applets/ - - assets/google_fonts/mr_dafoe/ + - assets/google_fonts/mr_dafoe/OFL.txt - assets/icon/ # An image asset can refer to one or more resolution-specific "variants", see @@ -115,34 +108,13 @@ flutter: # To add custom fonts to your application, add a fonts section here, # in this "flutter" section. Each entry in this list should have a # "family" key with the font family name, and a "fonts" key with a - # list giving the asset and other descriptors for the font. For - # an example, see below: - # fonts: # Required if your app uses custom fonts - # For details regarding fonts from package dependencies, - # see https://flutter.dev/custom-fonts/#from-packages - -dart_define: - variables: - - name: PROJECT_ID - description: Appwrite project ID - default: pirate-code - required: false - - name: API_ENDPOINT - description: Appwrite API endpoint - default: http://localhost:80/v1 - required: false - - name: DATABASE_ID - description: Appwrite database ID - default: pirate-coins - required: false - - name: COLLECTION_ID - description: Appwrite collection ID - default: coins - required: false - - name: SELF_SIGNED - description: If the Appwrite Server uses self-signed certificates. - default: true - required: false + # list giving the asset and other descriptors for the font + fonts: # Required if your app uses custom fonts + - family: MrDafoe + fonts: + - asset: assets/google_fonts/mr_dafoe/MrDafoe-Regular.ttf + style: normal + weight: 400 # dart run flutter_launcher_icons flutter_launcher_icons: diff --git a/replit.nix b/replit.nix deleted file mode 100644 index 825e32e0..00000000 --- a/replit.nix +++ /dev/null @@ -1,5 +0,0 @@ -{ pkgs }: { - deps = [ - pkgs.dart - ]; -} \ No newline at end of file diff --git a/test/features/dashboard/presentation/wrapper_page/wrapper_page_test.dart b/test/features/dashboard/presentation/wrapper_page/wrapper_page_test.dart index f720f68d..490a8b6b 100644 --- a/test/features/dashboard/presentation/wrapper_page/wrapper_page_test.dart +++ b/test/features/dashboard/presentation/wrapper_page/wrapper_page_test.dart @@ -1,6 +1,5 @@ import "package:flutter/material.dart"; import "package:flutter_test/flutter_test.dart"; -import "package:google_fonts/google_fonts.dart"; import "package:hooks_riverpod/hooks_riverpod.dart"; import "package:pirate_code/app/app.dart"; import "package:pirate_code/app/app_router.dart"; @@ -62,10 +61,6 @@ extension _WidgetTesterX on WidgetTester { void main() { group("Wrapper page", () { group("is accessible", () { - setUp(() { - GoogleFonts.config.allowRuntimeFetching = false; - }); - testWidgets("on Android.", (tester) async { await tester.pumpWidgetPage(); await tester.testAcessabilityGuideline(androidTapTargetGuideline); @@ -83,10 +78,7 @@ void main() { }); testWidgets("with regard to labeling buttons.", (tester) async { await tester.pumpWidgetPage(); - await tester.testAcessabilityGuideline( - labeledTapTargetGuideline, - expectFail: true, - ); + await tester.testAcessabilityGuideline(labeledTapTargetGuideline); }); }); }); diff --git a/test/features/utils/presentation/device_banner_test.dart b/test/features/utils/presentation/device_banner_test.dart deleted file mode 100644 index fb619b2b..00000000 --- a/test/features/utils/presentation/device_banner_test.dart +++ /dev/null @@ -1,43 +0,0 @@ -import "package:flutter/material.dart"; -import "package:flutter_test/flutter_test.dart"; -import "package:pirate_code/features/utils/presentation/device_info/device_banner.dart"; - -import "../../../helpers/pump_app.dart"; - -void main() { - group("Device banner", () { - group("is accessible", () { - testWidgets("on Android.", (tester) async { - await tester.pumpApp(const DeviceBanner(child: Text(""))); - - final handle = tester.ensureSemantics(); - await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); - handle.dispose(); - }); - testWidgets("on iOS.", (tester) async { - await tester.pumpApp(const DeviceBanner(child: Text(""))); - - final handle = tester.ensureSemantics(); - await expectLater(tester, meetsGuideline(iOSTapTargetGuideline)); - handle.dispose(); - }); - testWidgets("according to the WCAG.", (tester) async { - await tester.pumpApp(const DeviceBanner(child: Text(""))); - - final handle = tester.ensureSemantics(); - await expectLater(tester, meetsGuideline(textContrastGuideline)); - handle.dispose(); - }); - testWidgets("with regard to labeling buttons.", (tester) async { - await tester.pumpApp(const DeviceBanner(child: Text(""))); - - final handle = tester.ensureSemantics(); - await expectLater( - tester, - doesNotMeetGuideline(labeledTapTargetGuideline), - ); - handle.dispose(); - }); - }); - }); -} diff --git a/test/features/utils/presentation/device_info_dialog_test.dart b/test/features/utils/presentation/device_info_dialog_test.dart deleted file mode 100644 index c574e1fc..00000000 --- a/test/features/utils/presentation/device_info_dialog_test.dart +++ /dev/null @@ -1,39 +0,0 @@ -import "package:flutter_test/flutter_test.dart"; -import "package:pirate_code/features/utils/presentation/device_info/device_info_dialog.dart"; - -import "../../../helpers/pump_app.dart"; - -void main() { - group("Device info dialog", skip: true, () { - group("is accessible", () { - testWidgets("on Android.", (tester) async { - await tester.pumpApp(const DeviceInfoDialog()); - - final handle = tester.ensureSemantics(); - await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); - handle.dispose(); - }); - testWidgets("on iOS.", (tester) async { - await tester.pumpApp(const DeviceInfoDialog()); - - final handle = tester.ensureSemantics(); - await expectLater(tester, meetsGuideline(iOSTapTargetGuideline)); - handle.dispose(); - }); - testWidgets("according to the WCAG.", (tester) async { - await tester.pumpApp(const DeviceInfoDialog()); - - final handle = tester.ensureSemantics(); - await expectLater(tester, meetsGuideline(textContrastGuideline)); - handle.dispose(); - }); - testWidgets("with regard to labeling buttons.", (tester) async { - await tester.pumpApp(const DeviceInfoDialog()); - - final handle = tester.ensureSemantics(); - await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); - handle.dispose(); - }); - }); - }); -}