Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions lib/data/api/stage/stage_api.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import 'package:gogo_app/data/models/stage/search_stage/search_match_info_respon
import 'package:gogo_app/data/models/stage/search_stage/search_ranking_response.dart';
import 'package:gogo_app/data/models/stage/search_stage/search_team_info_response.dart';
import 'package:gogo_app/data/models/stage/search_stage/search_team_temp_response.dart';
import 'package:gogo_app/data/models/stage/search_stage/search_wasted_me_response.dart';
import 'package:retrofit/error_logger.dart';
import 'package:retrofit/http.dart';

Expand Down Expand Up @@ -192,4 +193,9 @@ abstract class StageApi {
Future<SearchGameFormatResponse> getGameFormat(
@Path('game_id') int gameId,
);

@GET('/stage/wasted/me/{stage_id}')
Future<SearchWastedMeResponse> getWastedMe(
@Path('stage_id') int stageId,
);
}
3 changes: 3 additions & 0 deletions lib/data/data_sources/stage/stage_data_source.dart
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import 'package:gogo_app/data/models/stage/enum_type/game_type.dart';
import 'dart:io';

import '../../models/stage/search_information/search_game_format_response.dart';
import '../../models/stage/search_stage/search_wasted_me_response.dart';

abstract class StageDataSource {
Future<void> createFastStage(FastStageCreateRequest body);
Expand Down Expand Up @@ -80,4 +81,6 @@ abstract class StageDataSource {
Future<SearchMatchResponse> getMyMatch(int stageId);

Future<SearchGameFormatResponse> getGameFormat(int gameId);

Future<SearchWastedMeResponse> getWastedMe(int stageId);
}
5 changes: 5 additions & 0 deletions lib/data/data_sources/stage/stage_data_source_impl.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import 'package:gogo_app/data/models/stage/community/sort_type.dart';
import 'package:gogo_app/data/models/stage/enum_type/game_type.dart';
import 'package:gogo_app/data/models/stage/handle_stage/join_stage_request.dart';
import 'package:gogo_app/data/models/stage/search_information/search_game_format_response.dart';
import 'package:gogo_app/data/models/stage/search_stage/search_wasted_me_response.dart';
import 'package:gogo_app/data/util/execute_handle_api_call.dart';
import 'package:gogo_app/data/models/stage/create_stage/api/official_stage_create_request.dart';
import 'package:gogo_app/data/models/stage/create_stage/api/fast_stage_create_request.dart';
Expand Down Expand Up @@ -219,4 +220,8 @@ class StageDataSourceImpl implements StageDataSource {
Future<SearchGameFormatResponse> getGameFormat(int gameId) async {
return await executeHandleApiCall(() => _stageApi.getGameFormat(gameId));
}
@override
Future<SearchWastedMeResponse> getWastedMe(int stageId) async {
return await executeHandleApiCall(() => _stageApi.getWastedMe(stageId));
}
}
17 changes: 17 additions & 0 deletions lib/data/models/stage/search_stage/search_wasted_me_response.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import 'package:json_annotation/json_annotation.dart';

part 'search_wasted_me_response.g.dart';

@JsonSerializable()
class SearchWastedMeResponse {
final bool isWasted;

SearchWastedMeResponse({
required this.isWasted,
});

factory SearchWastedMeResponse.fromJson(Map<String, dynamic> json) =>
_$SearchWastedMeResponseFromJson(json);

Map<String, dynamic> toJson() => _$SearchWastedMeResponseToJson(this);
}
3 changes: 3 additions & 0 deletions lib/data/repositories/stage/stage_repository.dart
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import 'package:gogo_app/data/models/stage/community/sort_type.dart';
import 'package:gogo_app/data/models/stage/enum_type/game_type.dart';

import '../../models/stage/handle_stage/join_stage_request.dart';
import '../../models/stage/search_stage/search_wasted_me_response.dart';

abstract class StageRepository {
Future<void> createFastStage(FastStageCreateRequest body);
Expand Down Expand Up @@ -78,4 +79,6 @@ abstract class StageRepository {
Future<SearchMatchResponse> getMyMatch(int stageId);

Future<SearchGameFormatResponse> getGameFormat(int gameId);

Future<SearchWastedMeResponse> getWastedMe(int stageId);
}
6 changes: 6 additions & 0 deletions lib/data/repositories/stage/stage_repository_impl.dart
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import 'package:gogo_app/data/models/stage/community/community_comment_request.d
import '../../models/stage/community/sort_type.dart';
import '../../models/stage/enum_type/game_type.dart';
import '../../models/stage/handle_stage/join_stage_request.dart';
import '../../models/stage/search_stage/search_wasted_me_response.dart';
import 'stage_repository.dart';

class StageRepositoryImpl implements StageRepository {
Expand Down Expand Up @@ -165,4 +166,9 @@ class StageRepositoryImpl implements StageRepository {
Future<SearchGameFormatResponse> getGameFormat(int gameId) async {
return await _stageDataSource.getGameFormat(gameId);
}

@override
Future<SearchWastedMeResponse> getWastedMe(int stageId) async {
return await _stageDataSource.getWastedMe(stageId);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -144,12 +144,8 @@ class GogoStageCardComponent extends StatelessWidget {
'isMaintainer': stage.isMaintainer.toString()
},
);
}
else {
context.goNamed(
PageRouter.home,
pathParameters: {'stageId': stage.stageId.toString()},
);
} else {
PageRouter.gogoPushNamed(PageRouter.home, stage.stageId);
}
},
text: '์ฐธ์—ฌํ•˜๊ธฐ',
Expand Down
33 changes: 33 additions & 0 deletions lib/presentation/home/bloc/home_bloc.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import 'dart:developer';

import 'package:bloc/bloc.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:get_it/get_it.dart';
import 'package:gogo_app/data/models/stage/search_stage/search_wasted_me_response.dart';
import 'package:gogo_app/data/repositories/mini_game/mini_game_repository.dart';
import 'package:gogo_app/data/repositories/stage/stage_repository.dart';
import '../../../data/models/common/match_dto.dart';
Expand All @@ -14,6 +16,8 @@ class HomeBloc extends Bloc<HomeEvent, HomeState> {
final StageRepository _stageRepository = GetIt.instance<StageRepository>();
final MiniGameRepository _miniGameRepository =
GetIt.instance<MiniGameRepository>();
final FlutterSecureStorage _storage =
GetIt.instance.get<FlutterSecureStorage>();

final int stageId;
bool isLoading = false;
Expand All @@ -23,6 +27,7 @@ class HomeBloc extends Bloc<HomeEvent, HomeState> {
HomeBloc({required this.stageId}) : super(InitialHomeState()) {
on<LoadHome>(_onLoadHome);
on<LoadMatchesByDate>(_onLoadMatchesByDate);
on<CheckBankruptcy>(_checkBankruptcy);
add(LoadMatchesByDate(selectedDate));
}

Expand All @@ -45,8 +50,23 @@ class HomeBloc extends Bloc<HomeEvent, HomeState> {

final gameResponse = await _stageRepository.getGame(stageId);

final SearchWastedMeResponse bankruptcyResponse =
await _stageRepository.getWastedMe(stageId);

bool isBankruptcy = false;

if (bankruptcyResponse.isWasted) {
String? storageResponse =
await _storage.read(key: "stageBankruptcy$stageId");
bool bankruptcyLocalResponse =
bool.tryParse(storageResponse ?? 'false') ?? false;
if (!bankruptcyLocalResponse) {
isBankruptcy = true;
}
}

emit(LoadedHomeState(
isBankruptcy: isBankruptcy,
communityPosts: communityPosts,
ranking: ranking,
points: point,
Expand All @@ -72,4 +92,17 @@ class HomeBloc extends Bloc<HomeEvent, HomeState> {
emit(ErrorHomeState());
}
}

Future<void> _checkBankruptcy(
CheckBankruptcy event, Emitter<HomeState> emit) async {
try {
if (event.isBankruptcy) {
await _storage.write(key: "stageBankruptcy$stageId", value: "true");
} else {
await _storage.delete(key: "stageBankruptcy$stageId");
}
} catch (e) {
log(e.toString(), name: 'HomeBloc');
}
}
}
6 changes: 6 additions & 0 deletions lib/presentation/home/bloc/home_event.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,9 @@ class LoadMatchesByDate extends HomeEvent {

LoadMatchesByDate(this.selectedDate);
}

class CheckBankruptcy extends HomeEvent {
final bool isBankruptcy;

CheckBankruptcy( this.isBankruptcy);
}
2 changes: 2 additions & 0 deletions lib/presentation/home/bloc/home_state.dart
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ class LoadingMatchHomeState extends HomeState {}
class LoadingHomeState extends HomeState {}

class LoadedHomeState extends HomeState {
bool isBankruptcy = false;
Copy link

Copilot AI May 29, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bloc state fields should be immutable. Consider declaring isBankruptcy as a final property and initializing it via the constructor.

Suggested change
bool isBankruptcy = false;
final bool isBankruptcy;

Copilot uses AI. Check for mistakes.
List<Board> communityPosts = [];
List<Rank> ranking = [];
SearchMyPointResponse points = SearchMyPointResponse(point: 0);
Expand All @@ -22,6 +23,7 @@ class LoadedHomeState extends HomeState {
SearchGameResponse gameResponse;

LoadedHomeState({
this.isBankruptcy = false,
required this.communityPosts,
required this.ranking,
required this.points,
Expand Down
71 changes: 49 additions & 22 deletions lib/presentation/home/screen/home_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import 'package:gogo_app/presentation/community/screen/community_detail_screen.d
import 'package:gogo_app/presentation/community/widgets/community_item.dart';
import 'package:gogo_app/presentation/home/bloc/home_bloc.dart';
import 'package:gogo_app/presentation/home/widgets/appbar/home_appbar.dart';
import 'package:gogo_app/presentation/home/widgets/bankruptcy_modal/bankruptcy_modal.dart';
import 'package:gogo_app/presentation/home/widgets/match_game_item.dart';
import 'package:gogo_app/presentation/loading/screens/loadaing_page.dart';
import 'package:gogo_app/presentation/navigation_view/widgets/drawer/gogo_drawer.dart';
Expand All @@ -29,7 +30,20 @@ class HomeScreen extends StatelessWidget {
Widget build(BuildContext context) {
return BlocProvider(
create: (context) => HomeBloc(stageId: stageId!),
child: BlocBuilder<HomeBloc, HomeState>(
child: BlocConsumer<HomeBloc, HomeState>(
listener: (BuildContext context, HomeState state) async {
if (state is LoadedHomeState) {
print(state.isBankruptcy);
Copy link

Copilot AI May 29, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remove the print statement or replace it with a proper logging mechanism; debug prints should not remain in production code.

Suggested change
print(state.isBankruptcy);
log('Bankruptcy status: ${state.isBankruptcy}', name: 'HomeScreen');

Copilot uses AI. Check for mistakes.
if (state.isBankruptcy) {
final request = await showDialog(
barrierDismissible: false,
context: context,
builder: (builder) => BankruptcyModal());
final bool response = request['isCheck'] ?? false;
context.read<HomeBloc>().add(CheckBankruptcy(response));
}
}
},
builder: (BuildContext context, HomeState state) {
if (state is LoadingHomeState ||
state is InitialHomeState ||
Expand Down Expand Up @@ -66,12 +80,13 @@ class HomeScreen extends StatelessWidget {
SizedBox(height: 8),
_itemTopBar(
GogoIcons.clock(color: GogoColors.white),
date: context.read<HomeBloc>().selectedDate,
date:
context.read<HomeBloc>().selectedDate,
onTap: () => PageRouter.gogoPushNamed(
PageRouter.matchList, stageId!)),
SingleChildScrollView(
padding:
const EdgeInsets.symmetric(horizontal: 16),
padding: const EdgeInsets.symmetric(
horizontal: 16),
scrollDirection: Axis.horizontal,
child: Builder(
builder: (context) {
Expand All @@ -80,8 +95,9 @@ class HomeScreen extends StatelessWidget {
if (matches.isEmpty) {
return Center(
child: Padding(
padding: const EdgeInsets.symmetric(
vertical: 30),
padding:
const EdgeInsets.symmetric(
vertical: 30),
child: Stack(
children: [
Text(
Expand All @@ -103,11 +119,14 @@ class HomeScreen extends StatelessWidget {
child: Text(
"์˜ค๋Š˜\n๋งค์น˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค",
style: TextStyle(
fontFamily: 'GmarketSans',
fontFamily:
'GmarketSans',
fontSize: 48,
color: GogoColors.main600,
color:
GogoColors.main600,
),
textAlign: TextAlign.center,
textAlign:
TextAlign.center,
),
),
],
Expand All @@ -121,8 +140,9 @@ class HomeScreen extends StatelessWidget {
(index) {
final match = matches[index];
return Padding(
padding: const EdgeInsets.only(
right: 8),
padding:
const EdgeInsets.only(
right: 8),
child: MatchCard(
matchDto: match,
onBattingClick: () {},
Expand All @@ -146,7 +166,8 @@ class HomeScreen extends StatelessWidget {
onTap: () => PageRouter.gogoPushNamed(
PageRouter.miniGame, stageId!)),
MinigamePlayComponent(
activeGameResponse: state.activeGameResponse,
activeGameResponse:
state.activeGameResponse,
)
],
),
Expand All @@ -159,8 +180,8 @@ class HomeScreen extends StatelessWidget {
onTap: () => PageRouter.gogoPushNamed(
PageRouter.ranking, stageId!)),
Padding(
padding:
const EdgeInsets.symmetric(horizontal: 16),
padding: const EdgeInsets.symmetric(
horizontal: 16),
child: Column(
spacing: 8,
children: List.generate(
Expand All @@ -182,19 +203,21 @@ class HomeScreen extends StatelessWidget {
spacing: 16,
children: [
_itemTopBar(
GogoIcons.community(color: GogoColors.white),
GogoIcons.community(
color: GogoColors.white),
text: '์ปค๋ฎค๋‹ˆํ‹ฐ',
onTap: () => PageRouter.gogoPushNamed(
PageRouter.community, stageId!)),
Padding(
padding:
const EdgeInsets.symmetric(horizontal: 16),
padding: const EdgeInsets.symmetric(
horizontal: 16),
child: Column(
spacing: 8,
children: List.generate(
min(state.communityPosts.length, 5),
(index) {
final board = state.communityPosts[index];
final board =
state.communityPosts[index];
return CommunityItem(
name: '์—ญ๋ช…',
gameType: board.gameCategory,
Expand All @@ -208,7 +231,8 @@ class HomeScreen extends StatelessWidget {
builder: (context) =>
CommunityDetailScreen(
boardId: state
.communityPosts[index]
.communityPosts[
index]
.boardId),
),
);
Expand All @@ -229,14 +253,17 @@ class HomeScreen extends StatelessWidget {
onTap: () => PageRouter.gogoPushNamed(
PageRouter.matchTeamInfo, stageId!)),
Padding(
padding: EdgeInsets.symmetric(horizontal: 16),
padding:
EdgeInsets.symmetric(horizontal: 16),
child: Column(
spacing: 8,
children: List.generate(
min(state.gameResponse.count, 5),
(index) => MatchGameItem(
gameItem: state.gameResponse.games[index],
onTap: () => PageRouter.router.pushNamed(
gameItem:
state.gameResponse.games[index],
onTap: () =>
PageRouter.router.pushNamed(
PageRouter.matchTeamInfo,
queryParameters: {
'stageId': stageId.toString(),
Expand Down
Loading