diff --git a/assets/images/season_table.png b/assets/images/season_table.png new file mode 100644 index 0000000..44b9ee4 Binary files /dev/null and b/assets/images/season_table.png differ diff --git a/lib/farm_page/edit_farm_set/components/analysis_view/analysis_view.dart b/lib/farm_page/edit_farm_set/components/analysis_view/analysis_view.dart index 23c2655..7ecced8 100644 --- a/lib/farm_page/edit_farm_set/components/analysis_view/analysis_view.dart +++ b/lib/farm_page/edit_farm_set/components/analysis_view/analysis_view.dart @@ -6,7 +6,7 @@ import 'package:provider/provider.dart'; import '../../../../l10n/l10ns.dart'; import '../../../../utils/font_family.dart'; import '../../farm_group_edit_controller.dart'; -import 'family_condition/family_condition_box.dart'; +import 'family_condition_box.dart'; import 'nutrient_condition_box.dart'; import 'season_condition_box.dart'; diff --git a/lib/farm_page/edit_farm_set/components/analysis_view/analysis_view_controller.dart b/lib/farm_page/edit_farm_set/components/analysis_view/analysis_view_controller.dart index 048545d..3bdc2f8 100644 --- a/lib/farm_page/edit_farm_set/components/analysis_view/analysis_view_controller.dart +++ b/lib/farm_page/edit_farm_set/components/analysis_view/analysis_view_controller.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; -import 'family_condition/family_condition_box.dart'; +import 'family_condition_box.dart'; import 'nutrient_condition_box.dart'; import 'season_condition_box.dart'; diff --git a/lib/farm_page/edit_farm_set/components/analysis_view/family_condition/dense_farm_family_condition.dart b/lib/farm_page/edit_farm_set/components/analysis_view/family_condition.dart similarity index 55% rename from lib/farm_page/edit_farm_set/components/analysis_view/family_condition/dense_farm_family_condition.dart rename to lib/farm_page/edit_farm_set/components/analysis_view/family_condition.dart index f8063b4..da4b318 100644 --- a/lib/farm_page/edit_farm_set/components/analysis_view/family_condition/dense_farm_family_condition.dart +++ b/lib/farm_page/edit_farm_set/components/analysis_view/family_condition.dart @@ -1,15 +1,182 @@ -// ignore_for_file: public_member_api_docs, sort_constructors_first +import 'dart:math'; + import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; + +import '../../../../models/v2/item/categories.dart'; +import '../../../../utils/union_find.dart'; +import '../../../farm_grid/farm_group/farm_group_model.dart'; +import '../../../farm_grid/farm_view/farm_view_model.dart'; + +mixin _PlantData { + Plant? get plant; +} + +abstract class FamilyCondition { + const FamilyCondition._({ + required this.farmGroupModel, + }); + + factory FamilyCondition.withModel(FarmGroupModel model) { + final farmType = model.farmViewModels[0].farmType; + switch (farmType) { + case FarmType.basic: + return _BasicFarmFamilyCondition.withModel(model); + case FarmType.dense || FarmType.reverseDense: + return _DenseFarmFamilyCondition.withModel(model); + } + } + + static const _requiredCount = 4; + + final FarmGroupModel farmGroupModel; + + bool get isSatisfied; + + Map _countByRoot(List elements, UnionFind unionFind) { + final Map countByRoot = {}; + for (final element in elements) { + final root = unionFind.find(element); + if (root.plant != null) { + countByRoot.update(root, (value) => value + 1, ifAbsent: () => 1); + } + } + return countByRoot; + } +} + +class _PlantInfo with _PlantData { + _PlantInfo({ + this.plant, + required this.point, + }); + + @override + final Plant? plant; + + final Point point; +} + +class _BasicFarmFamilyCondition extends FamilyCondition { + _BasicFarmFamilyCondition.withModel( + FarmGroupModel farmGroupModel, + ) : assert(farmGroupModel.farmViewModels[0].farmType == FarmType.basic), + super._(farmGroupModel: farmGroupModel); + + @override + bool get isSatisfied { + final rowCount = switch (farmGroupModel.groupType) { + FarmGroupType.single => 3, + FarmGroupType.double || FarmGroupType.square => 6, + }; + + final colCount = switch (farmGroupModel.groupType) { + FarmGroupType.single || FarmGroupType.double => 3, + FarmGroupType.square => 6, + }; + + final List> plantArray2D = switch (farmGroupModel.groupType) { + FarmGroupType.single => List.generate( + colCount, + (col) => List.generate( + rowCount, + (row) => _PlantInfo( + plant: farmGroupModel.farmViewModels[0].plants[col * 3 + row], + point: Point(col, row), + ), + growable: false, + ), + growable: false, + ), + FarmGroupType.double => List.generate( + colCount, + (col) => List.generate( + rowCount, + (row) { + if (row < 3) { + return _PlantInfo( + plant: farmGroupModel.farmViewModels[0].plants[col * 3 + row], + point: Point(col, row), + ); + } else { + return _PlantInfo( + plant: farmGroupModel.farmViewModels[1].plants[col * 3 + row - 3], + point: Point(col, row), + ); + } + }, + growable: false, + ), + growable: false, + ), + FarmGroupType.square => List.generate( + colCount, + (col) => List.generate( + rowCount, + (row) { + if (col < 3) { + if (row < 3) { + return _PlantInfo( + plant: farmGroupModel.farmViewModels[0].plants[col * 3 + row], + point: Point(col, row), + ); + } else { + return _PlantInfo( + plant: farmGroupModel.farmViewModels[1].plants[col * 3 + row - 3], + point: Point(col, row), + ); + } + } else { + if (row < 3) { + return _PlantInfo( + plant: farmGroupModel.farmViewModels[2].plants[(col - 3) * 3 + row], + point: Point(col, row), + ); + } else { + return _PlantInfo( + plant: farmGroupModel.farmViewModels[3].plants[(col - 3) * 3 + row - 3], + point: Point(col, row), + ); + } + } + }, + growable: false, + ), + growable: false, + ), + }; + final flatPlantArray2D = plantArray2D.expand((e) => e).toList(); + final unionFind = UnionFind<_PlantInfo>(); + + unionFind.initialize(flatPlantArray2D.toList()); -import '../../../../../models/v2/item/categories.dart'; -import '../../../../../utils/union_find.dart'; -import '../../../../farm_grid/farm_group/farm_group_model.dart'; -import '../../../../farm_grid/farm_view/farm_view_model.dart'; -import 'family_condition.dart'; + for (int col = 0; col < colCount; col++) { + for (int row = 0; row < rowCount; row++) { + final currentPlant = plantArray2D[col][row]; + if (currentPlant.plant == null) continue; + + final nextPlant = plantArray2D.elementAtOrNull(col)?.elementAtOrNull(row + 1); + if (nextPlant != null && currentPlant.plant == nextPlant.plant) { + unionFind.union(currentPlant, nextPlant); + } + + final belowPlant = plantArray2D.elementAtOrNull(col + 1)?.elementAtOrNull(row); + if (belowPlant != null && currentPlant.plant == belowPlant.plant) { + unionFind.union(currentPlant, belowPlant); + } + } + } + + final countByRoot = super._countByRoot(flatPlantArray2D, unionFind); + + if (countByRoot.isEmpty) return false; + return countByRoot.entries.every((entry) => entry.value >= FamilyCondition._requiredCount); + } +} -typedef AdjacencyList = List>; +typedef _AdjacencyList = List>; -class _PlantNode with PlantData { +class _PlantNode with _PlantData { _PlantNode({ required this.id, this.plant, @@ -21,14 +188,14 @@ class _PlantNode with PlantData { final Plant? plant; } -class DenseFarmFamilyCondition extends FamilyCondition { - DenseFarmFamilyCondition.withModel( +class _DenseFarmFamilyCondition extends FamilyCondition { + _DenseFarmFamilyCondition.withModel( FarmGroupModel farmGroupModel, ) : assert((farmGroupModel.farmViewModels[0].farmType != FarmType.basic) && (farmGroupModel.groupType != FarmGroupType.square)), - super(farmGroupModel: farmGroupModel); + super._(farmGroupModel: farmGroupModel); - static const Map<(FarmGroupType, FarmType), AdjacencyList> adjacencyListByType = { + static const Map<(FarmGroupType, FarmType), _AdjacencyList> adjacencyListByType = { // single(normal) // ------------------- // | 0 | 1 | @@ -177,10 +344,10 @@ class DenseFarmFamilyCondition extends FamilyCondition { } } - final countByRoot = super.countByRoot(plantNodeList, unionFind); + final countByRoot = super._countByRoot(plantNodeList, unionFind); if (countByRoot.isEmpty) return false; - return countByRoot.entries.every((entry) => entry.value >= FamilyCondition.requiredCount); + return countByRoot.entries.every((entry) => entry.value >= FamilyCondition._requiredCount); } List<_PlantNode> _initPlantNodeList() { diff --git a/lib/farm_page/edit_farm_set/components/analysis_view/family_condition/basic_farm_family_condition.dart b/lib/farm_page/edit_farm_set/components/analysis_view/family_condition/basic_farm_family_condition.dart deleted file mode 100644 index 1f1ffcb..0000000 --- a/lib/farm_page/edit_farm_set/components/analysis_view/family_condition/basic_farm_family_condition.dart +++ /dev/null @@ -1,136 +0,0 @@ -import 'dart:math'; - -import '../../../../../../models/v2/item/categories.dart'; -import '../../../../../../utils/union_find.dart'; -import '../../../../farm_grid/farm_group/farm_group_model.dart'; -import '../../../../farm_grid/farm_view/farm_view_model.dart'; -import 'family_condition.dart'; - -class _PlantInfo with PlantData { - _PlantInfo({ - this.plant, - required this.point, - }); - - @override - final Plant? plant; - - final Point point; -} - -class BasicFarmFamilyCondition extends FamilyCondition { - BasicFarmFamilyCondition.withModel( - FarmGroupModel farmGroupModel, - ) : assert(farmGroupModel.farmViewModels[0].farmType == FarmType.basic), - super(farmGroupModel: farmGroupModel); - - @override - bool get isSatisfied { - final rowCount = switch (farmGroupModel.groupType) { - FarmGroupType.single => 3, - FarmGroupType.double || FarmGroupType.square => 6, - }; - - final colCount = switch (farmGroupModel.groupType) { - FarmGroupType.single || FarmGroupType.double => 3, - FarmGroupType.square => 6, - }; - - final List> plantArray2D = switch (farmGroupModel.groupType) { - FarmGroupType.single => List.generate( - colCount, - (col) => List.generate( - rowCount, - (row) => _PlantInfo( - plant: farmGroupModel.farmViewModels[0].plants[col * 3 + row], - point: Point(col, row), - ), - growable: false, - ), - growable: false, - ), - FarmGroupType.double => List.generate( - colCount, - (col) => List.generate( - rowCount, - (row) { - if (row < 3) { - return _PlantInfo( - plant: farmGroupModel.farmViewModels[0].plants[col * 3 + row], - point: Point(col, row), - ); - } else { - return _PlantInfo( - plant: farmGroupModel.farmViewModels[1].plants[col * 3 + row - 3], - point: Point(col, row), - ); - } - }, - growable: false, - ), - growable: false, - ), - FarmGroupType.square => List.generate( - colCount, - (col) => List.generate( - rowCount, - (row) { - if (col < 3) { - if (row < 3) { - return _PlantInfo( - plant: farmGroupModel.farmViewModels[0].plants[col * 3 + row], - point: Point(col, row), - ); - } else { - return _PlantInfo( - plant: farmGroupModel.farmViewModels[1].plants[col * 3 + row - 3], - point: Point(col, row), - ); - } - } else { - if (row < 3) { - return _PlantInfo( - plant: farmGroupModel.farmViewModels[2].plants[(col - 3) * 3 + row], - point: Point(col, row), - ); - } else { - return _PlantInfo( - plant: farmGroupModel.farmViewModels[3].plants[(col - 3) * 3 + row - 3], - point: Point(col, row), - ); - } - } - }, - growable: false, - ), - growable: false, - ), - }; - final flatPlantArray2D = plantArray2D.expand((e) => e).toList(); - final unionFind = UnionFind<_PlantInfo>(); - - unionFind.initialize(flatPlantArray2D.toList()); - - for (int col = 0; col < colCount; col++) { - for (int row = 0; row < rowCount; row++) { - final currentPlant = plantArray2D[col][row]; - if (currentPlant.plant == null) continue; - - final nextPlant = plantArray2D.elementAtOrNull(col)?.elementAtOrNull(row + 1); - if (nextPlant != null && currentPlant.plant == nextPlant.plant) { - unionFind.union(currentPlant, nextPlant); - } - - final belowPlant = plantArray2D.elementAtOrNull(col + 1)?.elementAtOrNull(row); - if (belowPlant != null && currentPlant.plant == belowPlant.plant) { - unionFind.union(currentPlant, belowPlant); - } - } - } - - final countByRoot = super.countByRoot(flatPlantArray2D, unionFind); - - if (countByRoot.isEmpty) return false; - return countByRoot.entries.every((entry) => entry.value >= FamilyCondition.requiredCount); - } -} diff --git a/lib/farm_page/edit_farm_set/components/analysis_view/family_condition/family_condition.dart b/lib/farm_page/edit_farm_set/components/analysis_view/family_condition/family_condition.dart deleted file mode 100644 index d2344b2..0000000 --- a/lib/farm_page/edit_farm_set/components/analysis_view/family_condition/family_condition.dart +++ /dev/null @@ -1,46 +0,0 @@ -import 'package:flutter/material.dart'; - -import '../../../../../models/v2/item/categories.dart'; -import '../../../../../utils/union_find.dart'; -import '../../../../farm_grid/farm_group/farm_group_model.dart'; -import '../../../../farm_grid/farm_view/farm_view_model.dart'; -import 'basic_farm_family_condition.dart'; -import 'dense_farm_family_condition.dart'; - -mixin PlantData { - Plant? get plant; -} - -abstract class FamilyCondition { - @visibleForTesting - const FamilyCondition({ - required this.farmGroupModel, - }); - - factory FamilyCondition.withModel(FarmGroupModel model) { - final farmType = model.farmViewModels[0].farmType; - switch (farmType) { - case FarmType.basic: - return BasicFarmFamilyCondition.withModel(model); - case FarmType.dense || FarmType.reverseDense: - return DenseFarmFamilyCondition.withModel(model); - } - } - - static const requiredCount = 4; - - final FarmGroupModel farmGroupModel; - - bool get isSatisfied; - - Map countByRoot(List elements, UnionFind unionFind) { - final Map countByRoot = {}; - for (final element in elements) { - final root = unionFind.find(element); - if (root.plant != null) { - countByRoot.update(root, (value) => value + 1, ifAbsent: () => 1); - } - } - return countByRoot; - } -} diff --git a/lib/farm_page/edit_farm_set/components/analysis_view/family_condition/family_condition_box.dart b/lib/farm_page/edit_farm_set/components/analysis_view/family_condition_box.dart similarity index 95% rename from lib/farm_page/edit_farm_set/components/analysis_view/family_condition/family_condition_box.dart rename to lib/farm_page/edit_farm_set/components/analysis_view/family_condition_box.dart index 1d15bba..91d21e1 100644 --- a/lib/farm_page/edit_farm_set/components/analysis_view/family_condition/family_condition_box.dart +++ b/lib/farm_page/edit_farm_set/components/analysis_view/family_condition_box.dart @@ -1,11 +1,11 @@ import 'package:flutter/material.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; -import '../../../../../l10n/l10ns.dart'; -import '../../../../../models/v2/item/categories.dart'; -import '../../../../../utils/font_family.dart'; -import '../../../../farm_grid/farm_group/farm_group_model.dart'; -import '../../../../farm_grid/farm_view/farm_view_model.dart'; +import '../../../../l10n/l10ns.dart'; +import '../../../../models/v2/item/categories.dart'; +import '../../../../utils/font_family.dart'; +import '../../../farm_grid/farm_group/farm_group_model.dart'; +import '../../../farm_grid/farm_view/farm_view_model.dart'; import 'family_condition.dart'; part 'family_condition_box.freezed.dart'; diff --git a/lib/farm_page/edit_farm_set/components/analysis_view/nutrient_condition_box.dart b/lib/farm_page/edit_farm_set/components/analysis_view/nutrient_condition_box.dart index ec71b5c..4b446e9 100644 --- a/lib/farm_page/edit_farm_set/components/analysis_view/nutrient_condition_box.dart +++ b/lib/farm_page/edit_farm_set/components/analysis_view/nutrient_condition_box.dart @@ -124,6 +124,7 @@ class NutrientConditionBox extends StatelessWidget { phrases += [ FittedBox( child: Text( + // TODO: Localize this string '각 성장마다 선택한 비료를 $countOfNeededFertilizer번 사용해야 합니다.', style: TextStyle( fontFamily: FontFamily.pretendard, @@ -172,7 +173,7 @@ class NutrientConditionBoxNotifier extends ValueNotifier(); + + return Opacity( + opacity: model.isHidden ? 0.7 : 1.0, + child: Card( + shape: const RoundedRectangleBorder( + borderRadius: BorderRadius.only( + topLeft: Radius.circular(10), + topRight: Radius.circular(10), ), - clipBehavior: Clip.antiAlias, - color: theme.colorScheme.secondary.withOpacity(0.9), - child: Column( - children: [ - _CardTitle( - title: - '${model.title ?? model.farmGroupModel.suitableSeasons.map((season) => season.localizedName(context))}', - model: model, - ), - FarmGroup(model: model.farmGroupModel), - ], + ), + clipBehavior: Clip.antiAlias, + color: theme.colorScheme.secondary.withOpacity(0.9), + child: Column( + children: [ + const _CardTitle(), + FarmGroup(model: model.farmGroupModel), + Visibility( + visible: model.linkedFertilizer != null, + child: _FarmCardFooter(), + ), + ], + ), + ), + ); + }, + ); + } +} + +class _FarmCardFooter extends StatelessWidget { + @override + Widget build(BuildContext context) { + final colorScheme = Theme.of(context).colorScheme; + final model = context.watch(); + final fertilizerAsset = model.linkedFertilizer?.fertilizer.assetName; + final fertilizerAmount = model.linkedFertilizer?.amount; + + return Container( + height: 44, + margin: const EdgeInsets.all(1), + padding: const EdgeInsets.all(4), + color: colorScheme.surfaceContainerHighest, + child: Center( + // TODO: Wrap below Row with Tooltip. + child: Row( + spacing: 4, + mainAxisSize: MainAxisSize.min, + children: [ + Image( + image: AssetImage('assets/images/items/$fertilizerAsset.png'), + ), + Text( + 'x $fertilizerAmount', + style: const TextStyle( + fontFamily: FontFamily.pretendard, + fontSize: 14, ), ), - ); - }); + ], + ), + ), + ); } } @@ -60,19 +100,14 @@ enum _CardActionEntry { } class _CardTitle extends StatelessWidget { - const _CardTitle({ - required this.title, - required this.model, - }); - - final String title; - final FarmCardModel model; + const _CardTitle(); @override Widget build(BuildContext context) { final theme = Theme.of(context); const double sideSpace = 42; final farmPageController = context.read(); + final model = context.watch(); return Container( color: Colors.black54, @@ -98,6 +133,7 @@ class _CardTitle extends StatelessWidget { context: context, builder: (context) => Dialog( child: FarmGroupEditWindow( + key: GlobalKey(), isEditingNewOne: false, initialModel: model, ), @@ -156,7 +192,7 @@ class _CardTitle extends StatelessWidget { ), Expanded( child: Text( - title, + '${model.title ?? model.farmGroupModel.suitableSeasons.map((season) => season.localizedName(context))}', maxLines: 1, textAlign: TextAlign.center, style: TextStyle( diff --git a/lib/farm_page/farm_grid/farm_card/farm_card_model.dart b/lib/farm_page/farm_grid/farm_card/farm_card_model.dart index ce50a99..3e4cea5 100644 --- a/lib/farm_page/farm_grid/farm_card/farm_card_model.dart +++ b/lib/farm_page/farm_grid/farm_card/farm_card_model.dart @@ -1,10 +1,11 @@ import 'package:flutter/foundation.dart'; -import 'package:json_annotation/json_annotation.dart'; +import 'package:freezed_annotation/freezed_annotation.dart'; import 'package:uuid/uuid.dart'; import '../../../models/v2/item/categories.dart'; import '../farm_group/farm_group_model.dart'; +part 'farm_card_model.freezed.dart'; part 'farm_card_model.g.dart'; enum CreateType { @@ -29,7 +30,7 @@ class FarmCardModel extends ChangeNotifier { String? title, required FarmGroupModel farmGroupModel, required CreateType createType, - required Fertilizer? linkedFertilizer, + required LinkedFertilizer? linkedFertilizer, }) { return FarmCardModel( id: const Uuid().v4(), @@ -60,7 +61,7 @@ class FarmCardModel extends ChangeNotifier { notifyListeners(); } - final Fertilizer? linkedFertilizer; + final LinkedFertilizer? linkedFertilizer; factory FarmCardModel.fromJson(Map json) => _$FarmCardModelFromJson(json); Map toJson() => _$FarmCardModelToJson(this); @@ -72,7 +73,7 @@ class FarmCardModel extends ChangeNotifier { bool? isFavorited, CreateType? createType, bool? isHidden, - Fertilizer? linkedFertilizer, + LinkedFertilizer? Function()? linkedFertilizer, }) { return FarmCardModel( id: id ?? this.id, @@ -81,11 +82,21 @@ class FarmCardModel extends ChangeNotifier { isFavorited: isFavorited != null ? ValueNotifier(isFavorited) : ValueNotifier(this.isFavorited.value), createType: createType ?? this.createType, isHidden: isHidden ?? this.isHidden, - linkedFertilizer: linkedFertilizer ?? this.linkedFertilizer, + linkedFertilizer: linkedFertilizer != null ? linkedFertilizer() : this.linkedFertilizer, ); } } +@freezed +class LinkedFertilizer with _$LinkedFertilizer { + const factory LinkedFertilizer({ + required Fertilizer fertilizer, + required int amount, + }) = _LinkedFertilizer; + + factory LinkedFertilizer.fromJson(Map json) => _$LinkedFertilizerFromJson(json); +} + class BooleanValueNotifierConverter implements JsonConverter, bool> { const BooleanValueNotifierConverter(); diff --git a/lib/farm_page/farm_page.dart b/lib/farm_page/farm_page.dart index f4a569c..fe45238 100644 --- a/lib/farm_page/farm_page.dart +++ b/lib/farm_page/farm_page.dart @@ -88,21 +88,21 @@ class _TopBar extends StatelessWidget { final windowWidth = MediaQuery.of(context).size.width; return Builder(builder: (context) { if (windowWidth > 740) { - return Padding( - padding: const EdgeInsets.all(12), + return const Padding( + padding: EdgeInsets.all(12), child: Row( spacing: 12, children: [ _SeasonSelectionBox(), - const _NewButton(), - const SizedBox(width: 50), - const _ShowAndHideCheckbox(), + _NewButton(), + SizedBox(width: 50), + _ShowAndHideCheckbox(), ], ), ); } else { - return Padding( - padding: const EdgeInsets.all(8), + return const Padding( + padding: EdgeInsets.all(8), child: Column( spacing: 4, children: [ @@ -110,10 +110,10 @@ class _TopBar extends StatelessWidget { spacing: 12, children: [ _SeasonSelectionBox(), - const _NewButton(), + _NewButton(), ], ), - const _ShowAndHideCheckbox(), + _ShowAndHideCheckbox(), ], ), ); diff --git a/lib/farm_page/side_info_box/crops_info_box.dart b/lib/farm_page/side_info_box/crops_info_box.dart index f3b7aab..98d0034 100644 --- a/lib/farm_page/side_info_box/crops_info_box.dart +++ b/lib/farm_page/side_info_box/crops_info_box.dart @@ -35,17 +35,7 @@ class CropsInfoBox extends StatelessWidget { ), SizedBox( width: seasonWidth, - child: Center( - child: FittedBox( - child: Text( - L10ns.of(context).localized('season'), - style: const TextStyle( - fontFamily: FontFamily.pretendard, - fontSize: 16, - ), - ), - ), - ), + child: const Image(image: AssetImage('assets/images/season_table.png')), ), ], ), @@ -95,6 +85,16 @@ class CropsInfoBox extends StatelessWidget { ), SizedBox( width: seasonWidth, + child: Center( + child: FittedBox( + child: Text( + L10ns.of(context).localized('season'), + style: const TextStyle( + fontFamily: FontFamily.pretendard, + ), + ), + ), + ), ), ], ); diff --git a/lib/main.dart b/lib/main.dart index c2f5b0d..bcea5a4 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -19,8 +19,8 @@ Future _clearPrefsIfNeeds() async { // 버전 명시 const currentVersion = _PrefsVersion( - description: 'Update model', - number: 11, + description: 'Update farm card model', + number: 15, ); clearAndSet() async { diff --git a/test/family_condition_test.dart b/test/family_condition_test.dart index be6d0d9..2b1e623 100644 --- a/test/family_condition_test.dart +++ b/test/family_condition_test.dart @@ -1,4 +1,4 @@ -import 'package:dst_helper/farm_page/edit_farm_set/components/analysis_view/family_condition/family_condition.dart'; +import 'package:dst_helper/farm_page/edit_farm_set/components/analysis_view/family_condition.dart'; import 'package:dst_helper/farm_page/farm_grid/farm_group/farm_group_model.dart'; import 'package:dst_helper/farm_page/farm_grid/farm_view/farm_view_model.dart'; import 'package:dst_helper/models/v2/item/items.dart';