Skip to content

Commit

Permalink
- added filters for games
Browse files Browse the repository at this point in the history
  • Loading branch information
maliksenpai committed Dec 12, 2021
1 parent a94cb18 commit c37a497
Show file tree
Hide file tree
Showing 6 changed files with 231 additions and 82 deletions.
41 changes: 24 additions & 17 deletions lib/get/game_get.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,38 +7,45 @@ import 'package:findgamemates/model/game_types.dart';
import 'package:findgamemates/utils/log_utils.dart';
import 'package:get/get.dart';

class GameGet extends GetxController{

class GameGet extends GetxController {
FirebaseGame firebaseGame = Get.put(FirebaseGame());
FirebaseLog firebaseLog = Get.put(FirebaseLog());
UserDatabase userDatabase = Get.put(UserDatabase());
Rx<List<GamePost>> postList = Rx([]);
List<GamePost> notFilteredList = [];

@override
void onInit() async {
if(postList.value.isEmpty){
if (postList.value.isEmpty) {
postList.value = await firebaseGame.getGameList(null, null, null);
notFilteredList.addAll(postList.value);
}
super.onInit();
}

Future<bool> createGame(String title, String desc, String province, GameType gameType) async{
void filterGameList(String filter, GameType? gameType, String? province) {
postList.value = notFilteredList.where((element) =>
(element.gameType == gameType || gameType == null) &&
(element.title.contains(filter) || element.desc.contains(filter)) &&
(element.province == province || province == null)
).toList();
/*postList.value = notFilteredList.where((element) {
bool a1 = element.gameType == gameType;
bool a2 = (element.title.contains(filter) || element.desc.contains(filter));
bool a3 = element.province == province;
return a1 && a2 && a3;
}).toList();*/

postList.refresh();
}

Future<bool> createGame(String title, String desc, String province, GameType gameType) async {
//todo: add uuid
GamePost gamePost = GamePost(
id: "asd",
createTime: DateTime.now().toUtc().toString(),
createrId: userDatabase.getUser()!.uid!,
title: title,
desc: desc,
province: province,
gameType: gameType,
active: true
);
GamePost gamePost = GamePost(id: "asd", createTime: DateTime.now().toUtc().toString(), createrId: userDatabase.getUser()!.uid!, title: title, desc: desc, province: province, gameType: gameType, active: true);
DatabaseResponse databaseResponse = await firebaseGame.createGame(gamePost);
if(databaseResponse.result){
if (databaseResponse.result) {
firebaseLog.writeLog(databaseResponse.data.id + " " + LogUtils.createdGame);
}
return databaseResponse.result;
}

}
}
3 changes: 1 addition & 2 deletions lib/screen/create_game_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -97,8 +97,7 @@ class _CreateGameScreenState extends State<CreateGameScreen> {
: "Hata"),
value: e,
),
)
.toList(),
).toList(),
),
),
ListTile(
Expand Down
66 changes: 4 additions & 62 deletions lib/screen/games_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ import 'package:findgamemates/model/game_post.dart';
import 'package:findgamemates/model/game_types.dart';
import 'package:findgamemates/screen/create_game_screen.dart';
import 'package:findgamemates/screen/game_detail_screen.dart';
import 'package:findgamemates/view/game_screen_filter.dart';
import 'package:findgamemates/view/game_screen_list.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
Expand Down Expand Up @@ -37,69 +39,9 @@ class _GamesScreenState extends State<GamesScreen> {
return Scaffold(
body: Column(
children: [
Text("sad"),
const GameScreenFilter(),
Expanded(
child: Obx(
() => ListView.builder(
itemCount: gameGet.postList.value.length,
itemBuilder: (context, index) {
GamePost post = gameGet.postList.value[index];
String gameType = post.gameType == GameType.frp
? "FRP"
: post.gameType == GameType.boardGame
? "Kutu oyunu"
: post.gameType == GameType.tcg
? "TCG"
: "Hata";
return Padding(
padding: const EdgeInsets.all(8),
child: Card(
elevation: 8,
child: ListTile(
title: Text(post.title),
subtitle: Text(
post.desc,
maxLines: 2,
overflow: TextOverflow.ellipsis,
),
isThreeLine: true,
trailing: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
Row(
mainAxisSize: MainAxisSize.min,
children: [
Icon(Icons.extension, size: 20,),
SizedBox(width: 4,),
Text(
gameType,
style: const TextTheme().bodyText2,
),
],
),
Row(
mainAxisSize: MainAxisSize.min,
children: [
Icon(Icons.location_on, size: 20,),
SizedBox(width: 4,),
Text(
post.province,
style: const TextTheme().bodyText2,
),
],
),

],
),
onTap: (){
Get.to(() => GameDetailScreen());
},
),
),
);
},
),
))
child: const GameScreenList(),)
],
),
floatingActionButton: FloatingActionButton(
Expand Down
10 changes: 9 additions & 1 deletion lib/utils/utils_data.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,14 @@ import 'package:findgamemates/model/game_types.dart';

class UtilData{

static const List<String> provienceList = ["Online","Ankara"];
static const List<String> provienceList = ["Online","Adana","Adıyaman", "Afyon", "Ağrı", "Amasya", "Ankara", "Antalya", "Artvin",
"Aydın", "Balıkesir","Bilecik", "Bingöl", "Bitlis", "Bolu", "Burdur", "Bursa", "Çanakkale",
"Çankırı", "Çorum","Denizli","Diyarbakır", "Edirne", "Elazığ", "Erzincan", "Erzurum ", "Eskişehir",
"Gaziantep", "Giresun","Gümüşhane", "Hakkari", "Hatay", "Isparta", "Mersin", "İstanbul", "İzmir",
"Kars", "Kastamonu", "Kayseri","Kırklareli", "Kırşehir", "Kocaeli", "Konya", "Kütahya ", "Malatya",
"Manisa", "Kahramanmaraş", "Mardin", "Muğla", "Muş", "Nevşehir", "Niğde", "Ordu", "Rize", "Sakarya",
"Samsun", "Siirt", "Sinop", "Sivas", "Tekirdağ", "Tokat", "Trabzon ", "Tunceli", "Şanlıurfa", "Uşak",
"Van", "Yozgat", "Zonguldak", "Aksaray", "Bayburt ", "Karaman", "Kırıkkale", "Batman", "Şırnak",
"Bartın", "Ardahan", "Iğdır", "Yalova", "Karabük ", "Kilis", "Osmaniye ", "Düzce"];

}
102 changes: 102 additions & 0 deletions lib/view/game_screen_filter.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
import 'package:findgamemates/get/game_get.dart';
import 'package:findgamemates/model/game_types.dart';
import 'package:findgamemates/utils/utils_data.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';

class GameScreenFilter extends StatefulWidget {
const GameScreenFilter({Key? key}) : super(key: key);

@override
_GameScreenFilterState createState() => _GameScreenFilterState();
}

class _GameScreenFilterState extends State<GameScreenFilter> {

GameGet gameGet = Get.put(GameGet());
List<GameType> gameTypeList = GameType.values;
GameType? selectedGameType;
List<String> gameProvinceList= UtilData.provienceList;
String? selectedGameProvince;
String currFilter = "";

@override
void initState() {
super.initState();
}

@override
Widget build(BuildContext context) {
return Column(
mainAxisSize: MainAxisSize.min,
children: [
Padding(
padding: const EdgeInsets.only(left: 6,right: 6,top: 6),
child: TextField(
decoration: const InputDecoration(
hintText: "Arama",
suffixIcon: Icon(Icons.search),
border: OutlineInputBorder()
),
onChanged: (value){
currFilter = value;
gameGet.filterGameList(currFilter, selectedGameType, selectedGameProvince);
},
),
),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 12,vertical: 12),
child: IntrinsicHeight(
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
Expanded(
child: DropdownButton<String?>(
hint: Text("Oyun lokasyonu"),
icon: Icon(Icons.location_on),
isExpanded: true,
value: selectedGameProvince,
onChanged: (String? gameProvince){
setState(() {
selectedGameProvince = gameProvince!;
gameGet.filterGameList(currFilter, selectedGameType, selectedGameProvince);
});
},
items: gameProvinceList.map((e) => DropdownMenuItem(child: Text(e),value: e,)).toList(),
),
),
VerticalDivider(),
Expanded(
child: DropdownButton<GameType?>(
isExpanded: true,
hint: Text("Oyun türü"),
icon: Icon(Icons.extension),
value: selectedGameType,
onChanged: (GameType? gameType){
setState(() {
selectedGameType = gameType!;
gameGet.filterGameList(currFilter, selectedGameType, selectedGameProvince);
});
},
items: gameTypeList.map(
(e) => DropdownMenuItem(
child: Text(e == GameType.frp
? "FRP"
: e == GameType.boardGame
? "Kutu oyunu"
: e == GameType.tcg
? "TCG"
: "Hata"),
value: e,
),
).toList(),
),
)
],
),
),
)
],
);
}
}
91 changes: 91 additions & 0 deletions lib/view/game_screen_list.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
import 'package:findgamemates/get/game_get.dart';
import 'package:findgamemates/model/game_post.dart';
import 'package:findgamemates/model/game_types.dart';
import 'package:findgamemates/screen/game_detail_screen.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';

class GameScreenList extends StatefulWidget {
const GameScreenList({Key? key}) : super(key: key);

@override
_GameScreenListState createState() => _GameScreenListState();
}

class _GameScreenListState extends State<GameScreenList> {
GameGet gameGet = Get.put(GameGet());

@override
Widget build(BuildContext context) {
return Obx(
() => ListView.builder(
itemCount: gameGet.postList.value.length,
itemBuilder: (context, index) {
GamePost post = gameGet.postList.value[index];
String gameType = post.gameType == GameType.frp
? "FRP"
: post.gameType == GameType.boardGame
? "Kutu oyunu"
: post.gameType == GameType.tcg
? "TCG"
: "Hata";
return Padding(
padding: const EdgeInsets.all(8),
child: Card(
elevation: 8,
child: ListTile(
title: Text(post.title),
subtitle: Text(
post.desc,
maxLines: 2,
overflow: TextOverflow.ellipsis,
),
isThreeLine: true,
trailing: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
Row(
mainAxisSize: MainAxisSize.min,
children: [
Icon(
Icons.extension,
size: 20,
),
SizedBox(
width: 4,
),
Text(
gameType,
style: const TextTheme().bodyText2,
),
],
),
Row(
mainAxisSize: MainAxisSize.min,
children: [
Icon(
Icons.location_on,
size: 20,
),
SizedBox(
width: 4,
),
Text(
post.province,
style: const TextTheme().bodyText2,
),
],
),
],
),
onTap: () {
Get.to(() => GameDetailScreen());
},
),
),
);
},
),
);
}
}

0 comments on commit c37a497

Please sign in to comment.