Skip to content

Commit

Permalink
feat: 배너 추가 (#20)
Browse files Browse the repository at this point in the history
* fix: enable multi dex

* design: Color 추가

* feat: 온보딩 스크린 구현

* fix: 온보딩 로그인 후 뒤로가기가 되는 버그 수정

* refactor: 하단 패딩 증가 및 기타 리팩토링

* feat: 성장일기 UI 1

* style: 코멘트 추가

* feat: 미션 화면 및 보호소 화면 새로운 UI 적용 (#17)

* fix: enable multi dex

* [AM-322] update: 새로운 디자인을 적용하여 미션 목록 화면 개편

* [AM-322] update: 새로운 디자인을 적용하여 미션 디테일 화면 개선

* [AM-322] update: 새로운 디자인의 하단 탭 적용

* [AM-322] fix: 미션 카드 UX 개선 및 중급 미션 두번 나오는 문제 해결

* feat: 캐릭터 화면에 새로운 UI 적용

Co-authored-by: Namju Kim <[email protected]>

* fix: import 오류 수정

* style: controller -> viewModel 이름 변경

* feat: 온보딩 이름 체크 기능 추가

* feat: model viewer 라이브러리

* feat: model_viewer_plus 라이브러리

* feat: 성장 일기 화면 without server

* style: 컴포넌트 분리

* [AM-334] feat: 성장일기 view model

* style: 위젯 이름 변경

* fix: 오타수정

* [AM-342] feat: 온보딩 기능 구현

* [AM-340] feat: 미션 수행 결과 다이얼로그

* feat: Grow ViewModel 수정: 로컬 저장 로직 제거

* [AM-340] feat: 레벨업 다이얼로그

* delete: stageup_dialog.dart

* [AM-340] feat: 유저이름 수정 다이얼로그

* [AM-338] feat: 설정화면

* design: 푸시알림 다이얼로그 디자인 변경

* [AM-353] feat: 보호소 화면 성장일기, 추억저장소 추가

* [AM-354] feat: 미션 완료여부 체크 및 유저 정보 연동

* [AM-324] feat: API 콘텐트 타입 수정

* [AM-340] design: 미션 성공 다이얼로그 수정

* [AM-353, AM-354] feat: 먹이주기 연동, 레벨업 다이얼로그 이벤트 생성, 타이머 버그 수정, 온보딩 로그인 버그 수정

* [AM-338, AM-354] feat: 미션수행 기록 화면, 애플 로그인 유저 이름 연동

* [AM-329] feat: 미션상세 화면 제출 사진 표시

* refactor: 캐릭터 엔티티, 모델 변경

* fix: 앱 버전 체크 try catch

* [AM-338] feat: 미션 히스토리 반려사유 표시

* design: 앱 아이콘 변경

* [AM-324] feat: 카테고리로 미션 분류하는 기능 추가

* chore: 디버그 로그 추가

* fix: 온보딩 수정, 자동 로그인시 정보 불러오기

* feat: 공지사항 기능 추가

* feat: 첫 접속시 로컬 데이터 삭제

* feat: 베타 유저 보상 기능

* [AM-334] refactor: GrowHistory 관련 엔티티, 모델 수정

* feat:[AM-334] feat: 성장일기 repository 구현

* [AM-334] feat: 성장일기 서버 연동

* feat: 로티 변경

* fix: 다이얼로그 오타 수정

* fix: 미션 제출 시 카메라 중복으로 열리는 문제 해결

* Cached Network Image로 이미지 대체

* fix: 로그아웃 버그 수정

* feat: 캐릭터 애니메이션 추가 및 잡버그 FIX

* fix: 보상 받기 버그 fix 및 캐릭터 이미지 변경

* fix: 애니메이션 일정하지 않은 버그 수정

* feat: 앱 아이콘 변경

* fix: 앱 이름 변경

* feat: 배너 추가

* feat: 웹뷰 로딩 인디케이터 추가

* chore: 패키지 의존성 수정

* fix: FB 패키지 삭제

Co-authored-by: jinsubaekdev <[email protected]>
Co-authored-by: Jinsu Baek <[email protected]>
  • Loading branch information
3 people authored Nov 16, 2022
1 parent 67b647c commit f0f8881
Show file tree
Hide file tree
Showing 19 changed files with 377 additions and 11 deletions.
Binary file added assets/images/diary_icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/images/frame_icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion ios/Podfile
Original file line number Diff line number Diff line change
Expand Up @@ -96,4 +96,4 @@ post_install do |installer|
end
# End of the permission_handler configuration
end
end
end
8 changes: 7 additions & 1 deletion ios/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,8 @@ PODS:
- Flutter
- url_launcher_ios (0.0.1):
- Flutter
- webview_flutter_wkwebview (0.0.1):
- Flutter

DEPENDENCIES:
- firebase_analytics (from `.symlinks/plugins/firebase_analytics/ios`)
Expand All @@ -189,6 +191,7 @@ DEPENDENCIES:
- sqflite (from `.symlinks/plugins/sqflite/ios`)
- store_redirect (from `.symlinks/plugins/store_redirect/ios`)
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
- webview_flutter_wkwebview (from `.symlinks/plugins/webview_flutter_wkwebview/ios`)

SPEC REPOS:
trunk:
Expand Down Expand Up @@ -246,6 +249,8 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/store_redirect/ios"
url_launcher_ios:
:path: ".symlinks/plugins/url_launcher_ios/ios"
webview_flutter_wkwebview:
:path: ".symlinks/plugins/webview_flutter_wkwebview/ios"

SPEC CHECKSUMS:
Firebase: 800f16f07af493d98d017446a315c27af0552f41
Expand Down Expand Up @@ -282,7 +287,8 @@ SPEC CHECKSUMS:
sqflite: 6d358c025f5b867b29ed92fc697fd34924e11904
store_redirect: 2977747cf81689a39bd62c248c2deacb7a0d131e
url_launcher_ios: 839c58cdb4279282219f5e248c3321761ff3c4de
webview_flutter_wkwebview: b7e70ef1ddded7e69c796c7390ee74180182971f

PODFILE CHECKSUM: 6b9d14789d016b520f558a7e3f2495774f2296cc
PODFILE CHECKSUM: f54297e1acee2a2a0dfa3c43b588048a73b92211

COCOAPODS: 1.11.3
18 changes: 18 additions & 0 deletions lib/data/entity/banner_info_entity.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import 'package:json_annotation/json_annotation.dart';

part 'banner_info_entity.g.dart';

@JsonSerializable()
class BannerInfoEntity {

String imageUrl;
String contentUrl;

BannerInfoEntity({
required this.imageUrl,
required this.contentUrl,
});

factory BannerInfoEntity.fromJson(Map<String, dynamic> json) => _$BannerInfoEntityFromJson(json);
Map<String, dynamic> toJson() => _$BannerInfoEntityToJson(this);
}
19 changes: 19 additions & 0 deletions lib/data/entity/banner_info_entity.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 15 additions & 0 deletions lib/data/repository/banner_repository_impl.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import 'package:amond/data/source/network/api/banner_api.dart';
import 'package:amond/domain/models/banner_info.dart';
import 'package:amond/domain/repositories/banner_repository.dart';

class BannerRepositoryImpl implements BannerRepository {
final BannerApi _api;
BannerRepositoryImpl(this._api);

@override
Future<List<BannerInfo>> getBannerInfo() async {
final entityList = await _api.getBannerInfo();
return entityList.map((e) => BannerInfo.fromEntity(e)).toList();
}

}
25 changes: 25 additions & 0 deletions lib/data/source/network/api/banner_api.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import 'dart:convert';

import 'package:amond/data/entity/banner_info_entity.dart';
import 'package:amond/data/source/network/base_url.dart';
import 'package:amond/utils/auth/auth_info.dart';
import 'package:flutter/foundation.dart' show kDebugMode;
import 'package:http/http.dart' as http;

class BannerApi {
Future<List<BannerInfoEntity>> getBannerInfo() async {
final url = Uri.parse('$baseUrl/banners');
final response = await http.get(url, headers: {
'Authorization': 'Bearer $globalToken',
'Content-type': 'application/json',
});
final Map<String, dynamic> json =
jsonDecode(utf8.decode(response.bodyBytes));
if (kDebugMode) {
print(json);
}
return (json['banners'] as List)
.map((e) => BannerInfoEntity.fromJson(e))
.toList();
}
}
11 changes: 11 additions & 0 deletions lib/di/provider_setup.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import 'package:amond/data/repository/banner_repository_impl.dart';
import 'package:amond/data/repository/character_repository_impl.dart';
import 'package:amond/data/repository/member_repository_impl.dart';
import 'package:amond/data/repository/mission_repository_impl.dart';
import 'package:amond/data/source/network/api/banner_api.dart';
import 'package:amond/data/source/network/api/character_api.dart';
import 'package:amond/data/source/network/api/member_api.dart';
import 'package:amond/data/source/network/api/mission_api.dart';
Expand All @@ -11,6 +13,7 @@ import 'package:amond/domain/usecases/member/member_use_cases.dart';
import 'package:amond/domain/usecases/member/resign.dart';
import 'package:amond/domain/usecases/member/login.dart';
import 'package:amond/presentation/controllers/auth_controller.dart';
import 'package:amond/presentation/controllers/banner_view_model.dart';
import 'package:amond/presentation/controllers/grow/grow_view_model.dart';

import 'package:amond/presentation/controllers/main_view_model.dart';
Expand All @@ -35,6 +38,7 @@ List<SingleChildWidget> independentModels = [
Provider<MemberApi>(create: (_) => MemberApi()),
Provider<CharacterApi>(create: (_) => CharacterApi()),
Provider<MissionApi>(create: (_) => MissionApi()),
Provider<BannerApi>(create: (_) => BannerApi()),
];

List<SingleChildWidget> dependentModels = [
Expand All @@ -55,6 +59,9 @@ List<SingleChildWidget> dependentModels = [
getGoodsQuantity: GetGoodsQuantity(repository),
),
),

ProxyProvider<BannerApi, BannerRepositoryImpl>(
update: (_, api, __) => BannerRepositoryImpl(api)),
// ProxyProvider<CharacterRepositoryImpl, CharacterUseCases>(
// update: (_, repository, __) => CharacterUseCases(
// changeExp: ChangeExp(repository),
Expand Down Expand Up @@ -90,6 +97,10 @@ List<SingleChildWidget> viewModels = [
create: (_) => MainViewModel(),
),

// BannerViewModel
ChangeNotifierProvider(
create: (_) => BannerViewModel(_.read<BannerRepositoryImpl>())),

// 회원탈퇴 DI
ProxyProvider<AuthController, DoAuth>(
create: (context) {
Expand Down
20 changes: 20 additions & 0 deletions lib/domain/models/banner_info.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import 'package:amond/data/entity/banner_info_entity.dart';

class BannerInfo {
String imageUrl;
String contentUrl;

BannerInfo({
required this.imageUrl,
required this.contentUrl,
});

factory BannerInfo.fromEntity(BannerInfoEntity entity) =>
_$BannerInfoFromEntity(entity);

static BannerInfo _$BannerInfoFromEntity(BannerInfoEntity entity) =>
BannerInfo(
imageUrl: entity.imageUrl,
contentUrl: entity.contentUrl,
);
}
5 changes: 5 additions & 0 deletions lib/domain/repositories/banner_repository.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import 'package:amond/domain/models/banner_info.dart';

abstract class BannerRepository {
Future<List<BannerInfo>> getBannerInfo();
}
22 changes: 22 additions & 0 deletions lib/presentation/controllers/banner_view_model.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import 'package:amond/domain/models/banner_info.dart';
import 'package:amond/domain/repositories/banner_repository.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';

class BannerViewModel with ChangeNotifier {
final BannerRepository _repository;
BannerViewModel(this._repository);

bool _isLoading = true;
bool get isLoading => _isLoading;

List<BannerInfo> _infos = [];
List<BannerInfo> get infos => _infos;

Future<void> setBannerInfo() async {
_infos = await _repository.getBannerInfo();

_isLoading = false;
notifyListeners();
}
}
1 change: 0 additions & 1 deletion lib/presentation/screens/grow/grow_history_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import 'package:amond/presentation/controllers/grow_history_view_model.dart';
import 'package:amond/presentation/screens/grow/components/grow_info_row.dart';
import 'package:amond/presentation/widget/platform_based_indicator.dart';
import 'package:amond/ui/colors.dart';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

Expand Down
4 changes: 2 additions & 2 deletions lib/presentation/screens/grow/grow_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ class _GrowScreenWidget extends StatelessWidget {
child: Column(
children: [
Image.asset(
'assets/images/grow_history_icon.png',
'assets/images/diary_icon.png',
width: 35,
height: 35,
),
Expand All @@ -187,7 +187,7 @@ class _GrowScreenWidget extends StatelessWidget {
child: Column(
children: [
Image.asset(
'assets/images/photo_frame_icon.png',
'assets/images/frame_icon.png',
width: 38,
height: 38,
),
Expand Down
7 changes: 7 additions & 0 deletions lib/presentation/screens/mission/mission_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import 'package:amond/presentation/controllers/auth_controller.dart';
import 'package:amond/presentation/screens/mission/util/check_mission_result.dart';

import 'package:amond/presentation/screens/mission/util/time_util.dart';
import 'package:amond/presentation/widget/banner/banner_slider.dart';
import 'package:amond/ui/colors.dart';
import 'package:firebase_analytics/firebase_analytics.dart';
import 'package:provider/provider.dart';
Expand Down Expand Up @@ -70,6 +71,12 @@ class _MissionScreenState extends State<MissionScreen> {
],
),
),
// 배너
const Padding(
padding: EdgeInsets.only(left: 12, right: 12, top: 12),
child: BannerSlider(),
),
// 카테고리
_CategorySection(
categories: viewModel.categories,
selectedCategory: viewModel.selectedCategory,
Expand Down
Loading

0 comments on commit f0f8881

Please sign in to comment.