diff --git a/README.md b/README.md index d747db3..b2b07a3 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,15 @@ -# Values Sort +# Values Compass Flutter Android app for a guided personal-values card-sort practice. -Built with Flutter **3.47** (Dart **3.13**), Material 3, Provider, and local persistence. +Built with Flutter (Dart **3.13**), Material 3, Provider, and local persistence. -Package name: `com.example.myapp` +Package name: `com.valuesort.app` ## Practice flow 1. Welcome (+ how-it-works guide) 2. Sort each value into five reflective piles -3. Review / refine piles +3. Review piles and reorder cards as needed 4. Rank your most important values 5. Reflect with journal prompts @@ -23,13 +23,13 @@ lib/ ├── data/values_deck.dart ├── models/ ├── providers/ -├── screens/ # welcome → sort → overview → rank → reflect +├── screens/ # welcome → sort → hub → overview / rank / reflect ├── services/storage_service.dart ├── utils/ └── widgets/ assets/ ├── data/values_deck.json -└── images/emblem.png +└── images/emblem.png / app_icon.png stitch/ # exported Stitch HTML/PNG design references ``` diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index 00804d4..b89efd6 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -5,7 +5,7 @@ plugins { } android { - namespace = "com.example.myapp" + namespace = "com.valuesort.app" compileSdk = flutter.compileSdkVersion ndkVersion = flutter.ndkVersion @@ -15,8 +15,7 @@ android { } defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.myapp" + applicationId = "com.valuesort.app" // You can update the following values to match your application needs. // For more information, see: https://flutter.dev/to/review-gradle-config. minSdk = flutter.minSdkVersion diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index d8e2f52..f8afd15 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,7 +1,7 @@ toJson() => { - 'id': id, - 'title': title, - 'description': description, - 'domain': domain, - }; } diff --git a/lib/providers/values_sort_provider.dart b/lib/providers/values_sort_provider.dart index de71ce1..a59c52e 100644 --- a/lib/providers/values_sort_provider.dart +++ b/lib/providers/values_sort_provider.dart @@ -1,4 +1,4 @@ -/// Session state for the Values Sort practice: sorting, ranking, reflection. +/// Session state for the Values Compass practice: sorting, ranking, reflection. library; import 'dart:async'; @@ -25,14 +25,13 @@ enum SortStage { sorting, hub, overview, - pileReview, ranking, reflection, } /// ChangeNotifier that owns the deck, pile assignments, ranking, and journals. class ValuesSortController extends ChangeNotifier { - ValuesSortController({required StorageService this._storage}); + ValuesSortController({required this._storage}); final StorageService _storage; @@ -65,9 +64,6 @@ class ValuesSortController extends ChangeNotifier { /// Reflections keyed by `valueId|promptIndex`. final Map _reflections = {}; - ValuePile? _reviewPile; - ValuePile? get reviewPile => _reviewPile; - String? _activeReflectionValueId; String? get activeReflectionValueId => _activeReflectionValueId; @@ -112,7 +108,6 @@ class ValuesSortController extends ChangeNotifier { ..addAll(_deck); _rankedIds.clear(); _reflections.clear(); - _reviewPile = null; _activeReflectionValueId = null; _activePromptIndex = 0; } @@ -218,12 +213,6 @@ class ValuesSortController extends ChangeNotifier { _commit(); } - void openPileReview(ValuePile pile) { - _reviewPile = pile; - _stage = SortStage.pileReview; - _commit(); - } - void goToRanking() { _syncRankingWithMostImportant(); if (_rankedIds.isEmpty) { @@ -333,7 +322,6 @@ class ValuesSortController extends ChangeNotifier { 'version': 1, 'deckFingerprint': _deckFingerprint, 'stage': _stage.name, - 'reviewPile': _reviewPile?.name, 'assignments': { for (final e in _assignments.entries) e.key: e.value.name, }, @@ -414,7 +402,6 @@ class ValuesSortController extends ChangeNotifier { .where(knownIds.contains), ); - _reviewPile = ValuePileX.fromName(data['reviewPile'] as String?); _activeReflectionValueId = data['activeReflectionValueId'] as String?; if (_activeReflectionValueId != null && !knownIds.contains(_activeReflectionValueId)) { @@ -423,19 +410,21 @@ class ValuesSortController extends ChangeNotifier { _activePromptIndex = (data['activePromptIndex'] as num?)?.toInt() ?? 0; final stageName = data['stage'] as String? ?? SortStage.welcome.name; - _stage = SortStage.values.firstWhere( - (s) => s.name == stageName, - orElse: () => SortStage.welcome, - ); + // Remap removed refine stage onto the hub for older sessions. + if (stageName == 'pileReview') { + _stage = SortStage.hub; + } else { + _stage = SortStage.values.firstWhere( + (s) => s.name == stageName, + orElse: () => SortStage.welcome, + ); + } // If restored mid-sort but nothing left unsorted, land on the hub. if (_stage == SortStage.sorting && isSortComplete) { _seedRankingFromMostImportant(); _stage = SortStage.hub; } - if (_stage == SortStage.pileReview && _reviewPile == null) { - _stage = SortStage.hub; - } } catch (_) { await _storage.clearSortSession(); _resetSortState(); diff --git a/lib/screens/pile_review_screen.dart b/lib/screens/pile_review_screen.dart deleted file mode 100644 index e91ecfb..0000000 --- a/lib/screens/pile_review_screen.dart +++ /dev/null @@ -1,129 +0,0 @@ -/// Refine a single pile — promote / demote cards (Important Cards pattern). -library; - -import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; - -import '../models/value_pile.dart'; -import '../providers/values_sort_provider.dart'; -import '../widgets/practice_chrome.dart'; -import '../widgets/value_card_tile.dart'; -import '../utils/app_theme.dart'; - -class PileReviewScreen extends StatelessWidget { - const PileReviewScreen({super.key}); - - @override - Widget build(BuildContext context) { - final sort = context.watch(); - final pile = sort.reviewPile ?? ValuePile.important; - final cards = sort.cardsInPile(pile); - final text = Theme.of(context).textTheme; - final colors = Theme.of(context).colorScheme; - - return PracticeScaffold( - header: Padding( - padding: const EdgeInsets.fromLTRB(8, 4, 12, 0), - child: Row( - children: [ - IconButton( - onPressed: sort.goToOverview, - icon: const Icon(Icons.arrow_back), - ), - Expanded( - child: Text( - 'Reviewing · ${pile.label}', - style: text.labelMedium, - ), - ), - ], - ), - ), - footer: PrimaryPillButton( - label: 'Back to overview', - onPressed: sort.goToOverview, - ), - child: ListView( - children: [ - Text(pile.label, style: text.displaySmall), - const SizedBox(height: 6), - Text( - '${cards.length} values in this pile. Promote toward your core or demote when something feels less essential.', - style: text.bodyMedium, - ), - const SizedBox(height: 12), - SingleChildScrollView( - scrollDirection: Axis.horizontal, - child: Row( - children: ValuePile.values.map((p) { - return Padding( - padding: const EdgeInsets.only(right: 8), - child: ActionChip( - avatar: CircleAvatar( - backgroundColor: p.accent.withValues(alpha: 0.2), - radius: 8, - ), - label: Text('${p.shortLabel} ${sort.countInPile(p)}'), - onPressed: () => sort.openPileReview(p), - backgroundColor: p == pile - ? AppTheme.surfaceContainerHigh - : AppTheme.surfaceContainerLow, - ), - ); - }).toList(), - ), - ), - const SizedBox(height: 16), - if (cards.isEmpty) - Padding( - padding: const EdgeInsets.symmetric(vertical: 40), - child: Text( - 'No cards in this pile yet.', - style: text.bodyLarge?.copyWith(color: colors.onSurfaceVariant), - textAlign: TextAlign.center, - ), - ) - else - ...cards.map((card) { - return Padding( - padding: const EdgeInsets.only(bottom: 12), - child: ValueCardTile( - card: card, - compact: true, - trailing: Row( - mainAxisSize: MainAxisSize.min, - children: [ - IconButton( - tooltip: 'Promote', - onPressed: () => _shift(sort, card.id, pile, up: true), - icon: const Icon(Icons.arrow_upward), - ), - IconButton( - tooltip: 'Demote', - onPressed: () => - _shift(sort, card.id, pile, up: false), - icon: const Icon(Icons.arrow_downward), - ), - ], - ), - ), - ); - }), - ], - ), - ); - } - - void _shift( - ValuesSortController sort, - String id, - ValuePile current, { - required bool up, - }) { - final values = ValuePile.values; - final index = values.indexOf(current); - final next = up ? index - 1 : index + 1; - if (next < 0 || next >= values.length) return; - sort.moveCard(id, values[next]); - } -} diff --git a/lib/screens/practice_flow_screen.dart b/lib/screens/practice_flow_screen.dart index 3a70cd9..7f93f1b 100644 --- a/lib/screens/practice_flow_screen.dart +++ b/lib/screens/practice_flow_screen.dart @@ -6,7 +6,6 @@ import 'package:provider/provider.dart'; import '../providers/values_sort_provider.dart'; import 'card_sorting_screen.dart'; -import 'pile_review_screen.dart'; import 'practice_hub_screen.dart'; import 'rank_order_screen.dart'; import 'reflection_screen.dart'; @@ -56,7 +55,6 @@ class PracticeFlowScreen extends StatelessWidget { SortStage.sorting => const CardSortingScreen(), SortStage.hub => const PracticeHubScreen(), SortStage.overview => const SortedOverviewScreen(), - SortStage.pileReview => const PileReviewScreen(), SortStage.ranking => const RankOrderScreen(), SortStage.reflection => const ReflectionScreen(), }, diff --git a/lib/screens/rank_order_screen.dart b/lib/screens/rank_order_screen.dart index 25ba0d0..f837900 100644 --- a/lib/screens/rank_order_screen.dart +++ b/lib/screens/rank_order_screen.dart @@ -135,14 +135,6 @@ class RankOrderScreen extends StatelessWidget { color: colors.onSurfaceVariant, ), ), - const SizedBox(height: 4), - Text( - 'Pillar: ${card.domain}', - style: text.labelSmall?.copyWith( - color: colors.onSurfaceVariant, - ), - ), - ], ), ), diff --git a/lib/screens/sorted_overview_screen.dart b/lib/screens/sorted_overview_screen.dart index ceabdc7..c3341d8 100644 --- a/lib/screens/sorted_overview_screen.dart +++ b/lib/screens/sorted_overview_screen.dart @@ -1,4 +1,4 @@ -/// Bird's-eye overview of all five piles with demote / refine actions. +/// Bird's-eye overview of all five piles with reorder actions. library; import 'package:flutter/material.dart'; @@ -25,7 +25,6 @@ class _SortedOverviewScreenState extends State { Widget build(BuildContext context) { final sort = context.watch(); final text = Theme.of(context).textTheme; - final colors = Theme.of(context).colorScheme; return PracticeScaffold( header: Padding( @@ -47,8 +46,6 @@ class _SortedOverviewScreenState extends State { ), child: ListView( children: [ - Text('All Sorted Values', style: text.displaySmall), - const SizedBox(height: 16), TextField( onChanged: (v) => setState(() => _query = v.trim().toLowerCase()), decoration: const InputDecoration( @@ -93,12 +90,7 @@ class _SortedOverviewScreenState extends State { onDemote: (card) => _showDemoteSheet(context, sort, card), ); }), - const SizedBox(height: 12), - Text( - 'Tip: refine any pile before ranking your core values.', - style: text.bodySmall?.copyWith(color: colors.onSurfaceVariant), - textAlign: TextAlign.center, - ), + const SizedBox(height: 8), ], ), ); diff --git a/lib/screens/splash_screen.dart b/lib/screens/splash_screen.dart index e32bc98..6ecef00 100644 --- a/lib/screens/splash_screen.dart +++ b/lib/screens/splash_screen.dart @@ -89,20 +89,24 @@ class _SplashScreenState extends State child: Column( mainAxisSize: MainAxisSize.min, children: [ - ClipOval( + ClipRRect( + borderRadius: BorderRadius.circular(22), child: Image.asset( - 'assets/images/emblem.png', + 'assets/images/app_icon.png', width: 88, height: 88, fit: BoxFit.cover, errorBuilder: (_, _, _) => Container( width: 88, height: 88, - color: colors.primaryContainer, - child: const Icon( - Icons.spa, + decoration: BoxDecoration( + color: colors.primaryContainer, + borderRadius: BorderRadius.circular(22), + ), + child: Icon( + Icons.explore, size: 44, - color: Colors.white, + color: colors.onPrimary, ), ), ), diff --git a/lib/screens/welcome_screen.dart b/lib/screens/welcome_screen.dart index e380f4b..4655e33 100644 --- a/lib/screens/welcome_screen.dart +++ b/lib/screens/welcome_screen.dart @@ -5,7 +5,6 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import '../providers/values_sort_provider.dart'; -import '../utils/app_theme.dart'; import '../widgets/practice_chrome.dart'; class WelcomeScreen extends StatelessWidget { @@ -136,9 +135,9 @@ class WelcomeScreen extends StatelessWidget { Container( padding: const EdgeInsets.all(14), decoration: BoxDecoration( - color: AppTheme.surfaceContainerLow, + color: colors.surfaceContainerLow, borderRadius: BorderRadius.circular(16), - border: Border.all(color: AppTheme.outlineVariant), + border: Border.all(color: colors.outlineVariant), ), child: Row( children: [ @@ -214,7 +213,7 @@ class _GuideStep extends StatelessWidget { children: [ CircleAvatar( radius: 12, - backgroundColor: AppTheme.surfaceContainerHigh, + backgroundColor: colors.surfaceContainerHigh, child: Text( '$index', style: text.labelMedium?.copyWith( @@ -266,12 +265,12 @@ class _CardFan extends StatelessWidget { height: hero ? 155 : 135, padding: const EdgeInsets.all(14), decoration: BoxDecoration( - color: hero ? Colors.white : AppTheme.surfaceContainer, + color: hero ? colors.surface : colors.surfaceContainer, borderRadius: BorderRadius.circular(20), - border: Border.all(color: AppTheme.outlineVariant), + border: Border.all(color: colors.outlineVariant), boxShadow: [ BoxShadow( - color: const Color(0x142C2825), + color: colors.shadow.withValues(alpha: 0.08), blurRadius: hero ? 16 : 8, offset: const Offset(0, 4), ), diff --git a/lib/services/storage_service.dart b/lib/services/storage_service.dart index fef3955..c3e02ec 100644 --- a/lib/services/storage_service.dart +++ b/lib/services/storage_service.dart @@ -30,7 +30,7 @@ class StorageService { return _prefs.setString(StorageKeys.themeMode, value); } - /// Serialized Values Sort session JSON, or null when none saved. + /// Serialized Values Compass session JSON, or null when none saved. String? get sortSessionJson => _prefs.getString(StorageKeys.sortSession); Future setSortSessionJson(String json) { diff --git a/lib/utils/constants.dart b/lib/utils/constants.dart index 0a271ab..93e8d44 100644 --- a/lib/utils/constants.dart +++ b/lib/utils/constants.dart @@ -1,11 +1,8 @@ -/// Shared string keys, timings, and layout breakpoints used across the app. +/// Shared string keys, timings, and layout used across the app. library; /// Human-readable name shown in the splash screen and brand chrome. -const String kAppName = 'Values Sort'; - -/// Package / Android application id. -const String kPackageName = 'com.example.myapp'; +const String kAppName = 'Values Compass'; /// How long the splash screen stays visible before navigating onward. const Duration kSplashDuration = Duration(milliseconds: 1400); @@ -16,11 +13,5 @@ abstract final class StorageKeys { static const sortSession = 'values_sort_session_v1'; } -/// Width thresholds used to adapt padding and card density. -abstract final class Breakpoints { - static const compact = 600.0; - static const medium = 840.0; -} - /// Maximum content width on tablets so reflective flows stay readable. const double kMaxContentWidth = 600.0; diff --git a/lib/widgets/practice_chrome.dart b/lib/widgets/practice_chrome.dart index cb4ce43..828f661 100644 --- a/lib/widgets/practice_chrome.dart +++ b/lib/widgets/practice_chrome.dart @@ -1,4 +1,4 @@ -/// Shared layout chrome for Values Sort screens. +/// Shared layout chrome for Values Compass screens. library; import 'package:flutter/material.dart'; @@ -44,7 +44,7 @@ class PracticeScaffold extends StatelessWidget { child: ThemeToggleButton(), ), ), - if (header != null) header!, + ?header, Expanded( child: Padding( padding: pad, @@ -76,23 +76,27 @@ class BrandMark extends StatelessWidget { return Row( children: [ - ClipOval( + ClipRRect( + borderRadius: BorderRadius.circular(8), child: Image.asset( - 'assets/images/emblem.png', + 'assets/images/app_icon.png', width: 32, height: 32, fit: BoxFit.cover, errorBuilder: (_, _, _) => Container( width: 32, height: 32, - color: colors.primaryContainer, - child: Icon(Icons.spa, size: 18, color: colors.onPrimary), + decoration: BoxDecoration( + color: colors.primaryContainer, + borderRadius: BorderRadius.circular(8), + ), + child: Icon(Icons.explore, size: 18, color: colors.onPrimary), ), ), ), const SizedBox(width: 8), Text( - 'VALUES SORT', + 'VALUES COMPASS', style: labels.labelSmall?.copyWith( letterSpacing: 2.2, color: colors.onSurfaceVariant, diff --git a/pubspec.lock b/pubspec.lock index 4f18a1f..b3d3135 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -65,14 +65,6 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.7" - cupertino_icons: - dependency: "direct main" - description: - name: cupertino_icons - sha256: "41e005c33bd814be4d3096aff55b1908d419fde52ca656c8c47719ec745873cd" - url: "https://pub.dev" - source: hosted - version: "1.0.9" fake_async: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 3af2132..58e2f20 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,5 +1,5 @@ -name: myapp -description: Values Sort — a guided card-sort practice for clarifying personal values. +name: valuecards +description: Values Compass — a guided card-sort practice for clarifying personal values. # The following line prevents the package from being accidentally published to # pub.dev using `flutter pub publish`. This is preferred for private packages. publish_to: 'none' # Remove this line if you wish to publish to pub.dev @@ -21,19 +21,10 @@ version: 1.0.0+1 environment: sdk: ^3.13.2 -# Dependencies specify other packages that your package needs in order to work. -# To automatically upgrade your package dependencies to the latest versions -# consider running `flutter pub upgrade --major-versions`. Alternatively, -# dependencies can be manually updated by changing the version numbers below to -# the latest version available on pub.dev. To see which dependencies have newer -# versions available, run `flutter pub outdated`. dependencies: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. - # Use with the CupertinoIcons class for iOS style icons. - cupertino_icons: ^1.0.8 provider: ^6.1.5+1 shared_preferences: ^2.5.5 google_fonts: ^8.2.1 @@ -42,50 +33,13 @@ dev_dependencies: flutter_test: sdk: flutter - # The "flutter_lints" package below contains a set of recommended lints to - # encourage good coding practices. The lint set provided by the package is - # activated in the `analysis_options.yaml` file located at the root of your - # package. See that file for information about deactivating specific lint - # rules and activating additional ones. flutter_lints: ^6.0.0 -# For information on the generic Dart part of this file, see the -# following page: https://dart.dev/tools/pub/pubspec - -# The following section is specific to Flutter packages. flutter: - - # The following line ensures that the Material Icons font is - # included with your application, so that you can use the icons in - # the material Icons class. uses-material-design: true assets: - assets/data/values_deck.json - assets/images/emblem.png - - # An image asset can refer to one or more resolution-specific "variants", see - # https://flutter.dev/to/resolution-aware-images - - # For details regarding adding assets from package dependencies, see - # https://flutter.dev/to/asset-from-package - - # 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 - # example: - # fonts: - # - family: Schyler - # fonts: - # - asset: fonts/Schyler-Regular.ttf - # - asset: fonts/Schyler-Italic.ttf - # style: italic - # - family: Trajan Pro - # fonts: - # - asset: fonts/TrajanPro.ttf - # - asset: fonts/TrajanPro_Bold.ttf - # weight: 700 - # - # For details regarding fonts from package dependencies, - # see https://flutter.dev/to/font-from-package + - assets/images/app_icon.png + - assets/images/app_icon_1024.png diff --git a/stitch/manifest.json b/stitch/manifest.json index f8a1a8a..04e85c9 100644 --- a/stitch/manifest.json +++ b/stitch/manifest.json @@ -106,5 +106,17 @@ "deviceType": "MOBILE", "htmlFile": "practice-hub.html", "screenshotFile": "practice-hub.png" + }, + { + "id": "2ff051bf1fe5482699a5f1bb9a5e980d", + "slug": "app-icon", + "title": "Values Compass App Icon (Values Top / Compass Bottom)", + "width": "512", + "height": "512", + "deviceType": "ICON", + "htmlFile": "app-icon.svg", + "screenshotFile": "app-icon.png", + "htmlBytes": 6549, + "screenshotBytes": 85489 } ] \ No newline at end of file diff --git a/stitch/screens/app-icon.html b/stitch/screens/app-icon.html new file mode 100644 index 0000000..16b7402 --- /dev/null +++ b/stitch/screens/app-icon.html @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Values + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Compass + \ No newline at end of file diff --git a/stitch/screens/app-icon.json b/stitch/screens/app-icon.json new file mode 100644 index 0000000..8cbb841 --- /dev/null +++ b/stitch/screens/app-icon.json @@ -0,0 +1,15 @@ +{ + "name": "projects/9343387512370733994/screens/2ff051bf1fe5482699a5f1bb9a5e980d", + "title": "Values Compass App Icon (Values Top / Compass Bottom)", + "screenshot": { + "name": "projects/9343387512370733994/screens/37733e82516730535cc8c45d50f9c83977990ea75683fd3b9c5aae43deb599ac/fileEntries/screenshot", + "downloadUrl": "https://lh3.googleusercontent.com/aida/AEtjO1V7dhzWlGzADkZJ8s9ld_l4GvEdZrbr95uqltFAiNz4A3amMuVlieFKXgEeSbXi9JXw5EKVu9kizHY2o62tAWpZ81-RddVCw_8KXWcvWjEwOxPzALUFySqbtXkuW2ghbCe9-Ne-L9KTjubvBLv9MSOaPyEpIKNrbfqlh53CoYtCc9g1UunfdGYMPYXefoJ6BHDS2eERw2Y1JZdS5lW-s65D_qWCwZ4zBjMaDa66GOcTexVMKFo7DA-kt4s" + }, + "htmlCode": { + "name": "projects/9343387512370733994/screens/2ff051bf1fe5482699a5f1bb9a5e980d/fileEntries/html", + "downloadUrl": "https://contribution.usercontent.google.com/download?c=CgthaWRhX2NvZGVmeBJ7Eh1hcHBfY29tcGFuaW9uX2dlbmVyYXRlZF9maWxlcxpaCiVodG1sXzAwMDY1YmI1MTMzNzJjM2YwNDRmNDUwZGQ3M2RhNGY3EgsSBxD_iY311x0YAZIBIwoKcHJvamVjdF9pZBIVQhM5MzQzMzg3NTEyMzcwNzMzOTk0&filename=&opi=89354086", + "mimeType": "image/svg+xml" + }, + "width": "512", + "height": "512" +} \ No newline at end of file diff --git a/stitch/screens/app-icon.png b/stitch/screens/app-icon.png new file mode 100644 index 0000000..6eb55b1 Binary files /dev/null and b/stitch/screens/app-icon.png differ diff --git a/stitch/screens/app-icon.svg b/stitch/screens/app-icon.svg new file mode 100644 index 0000000..16b7402 --- /dev/null +++ b/stitch/screens/app-icon.svg @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Values + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Compass + \ No newline at end of file diff --git a/test/widget_test.dart b/test/widget_test.dart index 0992d73..7039fa5 100644 --- a/test/widget_test.dart +++ b/test/widget_test.dart @@ -1,18 +1,18 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:google_fonts/google_fonts.dart'; -import 'package:myapp/main.dart'; -import 'package:myapp/models/value_card.dart'; -import 'package:myapp/models/value_pile.dart'; -import 'package:myapp/providers/values_sort_provider.dart'; -import 'package:myapp/services/storage_service.dart'; -import 'package:myapp/utils/constants.dart'; import 'package:shared_preferences/shared_preferences.dart'; +import 'package:valuecards/main.dart'; +import 'package:valuecards/models/value_card.dart'; +import 'package:valuecards/models/value_pile.dart'; +import 'package:valuecards/providers/values_sort_provider.dart'; +import 'package:valuecards/services/storage_service.dart'; +import 'package:valuecards/utils/constants.dart'; void main() { TestWidgetsFlutterBinding.ensureInitialized(); GoogleFonts.config.allowRuntimeFetching = false; - testWidgets('splash shows Values Sort then opens welcome', (tester) async { + testWidgets('splash shows Values Compass then opens welcome', (tester) async { SharedPreferences.setMockInitialValues({}); final storage = StorageService(); await storage.init();