Skip to content

Repository files navigation

🇧🇷 Versão em Português

🎮 GameHub - Explorador de Jogos

📱 Sobre o Projeto

GameHub é um aplicativo móvel desenvolvido em React Native que permite aos usuários explorar, buscar e gerenciar uma coleção de jogos. O app consome a API da RAWG (maior database de jogos do mundo) para fornecer informações detalhadas sobre milhares de jogos.

📸 Screenshots

✨ Funcionalidades Principais

  • 🏠 Home: Lista de jogos populares com scroll infinito e pull-to-refresh
  • 🔍 Busca: Pesquisa em tempo real com resultados instantâneos
  • ❤️ Favoritos: Sistema de favoritos com persistência local
  • 📊 Detalhes: Informações completas incluindo avaliações, screenshots, gêneros e plataformas
  • 🎨 UI Moderna: Interface responsiva com design dark mode

🛠️ Tecnologias Utilizadas

Core

  • React Native - Framework mobile cross-platform
  • TypeScript - Tipagem estática para JavaScript
  • React Hooks - Gerenciamento de estado moderno

Navegação

  • React Navigation - Navegação entre telas
  • Stack Navigator - Navegação hierárquica
  • Bottom Tabs - Menu de navegação inferior

Gerenciamento de Estado

  • React Context API - Estado global da aplicação
  • AsyncStorage - Persistência de dados local

API & Networking

  • Axios - Cliente HTTP para requisições
  • RAWG API - Database de jogos

UI/UX

  • React Native Screens - Performance otimizada de navegação
  • Safe Area Context - Suporte para notch e áreas seguras

📁 Estrutura do Projeto

GameHub/
├── src/
│   ├── components/          # Componentes reutilizáveis
│   │   ├── GameCard.tsx     # Card de jogo
│   │   └── SearchBar.tsx    # Barra de busca
│   ├── contexts/            # Contextos React
│   │   └── FavoritesContext.tsx  # Gerenciamento de favoritos
│   ├── navigation/          # Configuração de navegação
│   │   └── AppNavigator.tsx # Navegação principal
│   ├── screens/             # Telas do aplicativo
│   │   ├── HomeScreen.tsx   # Tela inicial
│   │   ├── SearchScreen.tsx # Tela de busca
│   │   ├── GameDetailsScreen.tsx  # Detalhes do jogo
│   │   └── FavoritesScreen.tsx    # Favoritos
│   ├── services/            # Serviços externos
│   │   └── api.ts           # Integração com RAWG API
│   └── types/               # Definições TypeScript
│       └── index.ts         # Tipos e interfaces
├── android/                 # Código nativo Android
├── ios/                     # Código nativo iOS
├── App.tsx                  # Componente raiz
└── package.json             # Dependências do projeto

🚀 Como Executar o Projeto

Pré-requisitos

  • Node.js (v18 ou superior)
  • npm ou Yarn
  • JDK 17
  • Android Studio (para Android)
  • Xcode (para iOS - apenas macOS)

Instalação

  1. Clone o repositório
git clone https://github.com/natsalete/GameHub.git
cd GameHub
  1. Instale as dependências
npm install
# ou
yarn install
  1. Configure a API Key

Obtenha uma chave gratuita em: https://rawg.io/apidocs

Edite o arquivo src/services/api.ts:

const API_KEY = 'SUA_CHAVE_AQUI';
  1. Instale as dependências do iOS (apenas macOS)
cd ios
pod install
cd ..

Executar em Desenvolvimento

Android

# Terminal 1 - Iniciar Metro Bundler
npm start

# Terminal 2 - Executar no Android
npm run android

iOS (macOS apenas)

# Terminal 1 - Iniciar Metro Bundler
npm start

# Terminal 2 - Executar no iOS
npm run ios

📦 Gerar APK/AAB (Android)

APK Debug (para testes)

cd android
./gradlew assembleDebug
cd ..

APK gerado em: android/app/build/outputs/apk/debug/app-debug.apk

APK Release (produção)

  1. Gerar chave de assinatura (apenas uma vez)
cd android/app
keytool -genkeypair -v -storetype PKCS12 -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
ou
& "C:\Program Files\Java\jdk-21\bin\keytool.exe" -genkeypair -v -storetype PKCS12 -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
cd ../..
  1. Configurar gradle.properties

Adicione ao final de android/gradle.properties:

MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
MYAPP_RELEASE_KEY_ALIAS=my-key-alias
MYAPP_RELEASE_STORE_PASSWORD=sua_senha
MYAPP_RELEASE_KEY_PASSWORD=sua_senha
  1. Gerar APK
cd android
./gradlew assembleRelease
cd ..

APK gerado em: android/app/build/outputs/apk/release/app-release.apk

AAB para Google Play Store

cd android
./gradlew bundleRelease
cd ..

AAB gerado em: android/app/build/outputs/bundle/release/app-release.aab


🎨 Arquitetura e Padrões

Gerenciamento de Estado

  • Context API para estado global (favoritos)
  • useState para estado local dos componentes
  • useEffect para efeitos colaterais e chamadas à API

Navegação

  • Stack Navigator para navegação entre telas principais
  • Bottom Tabs para navegação entre seções (Home, Busca, Favoritos)

Comunicação com API

  • Serviço centralizado em api.ts
  • Requisições assíncronas com async/await
  • Tratamento de erros com try/catch

Tipagem TypeScript

  • Interfaces para objetos de domínio (Game, Genre, Platform)
  • Tipos para navegação (RootStackParamList, TabParamList)
  • Props tipadas em todos os componentes

📊 Funcionalidades Detalhadas

1. Home Screen

  • Lista de jogos mais populares
  • Ordenação por rating
  • Scroll infinito (paginação)
  • Pull-to-refresh
  • Navegação para detalhes

2. Search Screen

  • Busca em tempo real
  • Mínimo 3 caracteres
  • Resultados instantâneos
  • Grid responsivo
  • Feedback visual de loading

3. Game Details Screen

  • Banner do jogo
  • Informações principais (rating, data de lançamento, Metacritic)
  • Gêneros e plataformas
  • Descrição completa
  • Screenshots em carrossel horizontal
  • Botão de favoritar/desfavoritar

4. Favorites Screen

  • Lista de jogos favoritados
  • Persistência com AsyncStorage
  • Contador de favoritos
  • Estado vazio amigável
  • Remoção de favoritos

🎯 Requisitos Atendidos

✅ Interface de Usuário (UI)

  • Design moderno e responsivo
  • Componentes reutilizáveis (GameCard, SearchBar)
  • Feedback visual (loading, estados vazios)
  • Cores consistentes e harmoniosas

✅ Gerenciamento de Estado

  • Context API para favoritos (estado global)
  • AsyncStorage para persistência
  • useState para estados locais

✅ Funcionalidades Interativas

  • Busca em tempo real
  • Listas dinâmicas com scroll infinito
  • Sistema de favoritos
  • Integração com API externa (RAWG)
  • Pull-to-refresh

✅ Navegação

  • React Navigation configurado
  • Stack Navigator para fluxo principal
  • Bottom Tabs para navegação entre seções
  • Parâmetros tipados entre telas

🔧 Configurações e Customizações

Cores do Tema

const colors = {
  primary: '#1a1a2e',      // Azul escuro
  secondary: '#e94560',    // Rosa/vermelho
  accent: '#0f3460',       // Azul médio
  background: '#16213e',   // Azul card
  text: '#ffffff',         // Branco
  textSecondary: '#6c757d' // Cinza
};

Alterar Nome do App

Edite android/app/src/main/res/values/strings.xml:

<string name="app_name">GameHub</string>

Alterar Ícone

Substitua os arquivos em:

  • android/app/src/main/res/mipmap-*/ic_launcher.png

🐛 Troubleshooting

Metro Bundler não conecta

adb reverse tcp:8081 tcp:8081

Erro de cache

npm start -- --reset-cache

Limpar build Android

cd android
./gradlew clean
cd ..

App não atualiza

adb uninstall com.gamehub
npm run android

📚 Recursos e Referências


👨‍💻 Autor

Desenvolvido com ☕ e 💙


📄 Licença

Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.


🤝 Contribuições

Contribuições são bem-vindas! Sinta-se à vontade para abrir issues e pull requests.

  1. Fork o projeto
  2. Crie uma branch para sua feature (git checkout -b feature/MinhaFeature)
  3. Commit suas mudanças (git commit -m 'Adiciona MinhaFeature')
  4. Push para a branch (git push origin feature/MinhaFeature)
  5. Abra um Pull Request

⭐ Se gostou, deixe uma estrela! ⭐

Feito com ❤️ e React Native

🎮 GameHub - Game Explorer

📱 About the Project

GameHub is a mobile application developed in React Native app that allows users to explore, search, and manage a collection of games. The app consumes the RAWG API (the world's largest game database) to provide detailed information on thousands of games.

📸 Screenshots

✨ Main Features

  • 🏠 Home: List of popular games with infinite scrolling and pull-to-refresh
  • 🔍 Search: Real-time search with instant results
  • ❤️ Favorites: Favorites system with local persistence
  • 📊 Details: Complete information including ratings, screenshots, genres, and platforms
  • 🎨 Modern UI: Responsive interface with dark mode design

🛠️ Technologies Used

Core

  • React Native - Cross-platform mobile framework
  • TypeScript - Typing Static for JavaScript
  • React Hooks - Modern state management

Navigation

  • React Navigation - Navigation between screens
  • Stack Navigator - Hierarchical navigation
  • Bottom Tabs - Bottom navigation menu

State Management

  • React Context API - Global application state
  • AsyncStorage - Local data persistence

API & Networking

  • Axios - HTTP client for requests
  • RAWG API - Game database

UI/UX

  • React Native Screens - Optimized navigation performance
  • Safe Area Context - Support for notch and safe areas

📁 Project Structure

GameHub/
├── src/
│ ├── components/ # Components Reusable
│ │ ├── GameCard.tsx # Game card
│ │ └── SearchBar.tsx # Search bar
│ ├── contexts/ # React contexts
│ │ └── FavoritesContext.tsx # Favorites management
│ ├── navigation/ # Navigation configuration
│ │ └── AppNavigator.tsx # Main navigation
│ ├── screens/ # App screens
│ │ ├── HomeScreen.tsx # Home screen
│ │ ├── SearchScreen.tsx # Search screen
│ │ ├── GameDetailsScreen.tsx # Game details
│ │ └── FavoritesScreen.tsx # Favorites
│ ├── services/ # External services
│ │ └── api.ts # RAWG API integration
│ └── types/ # TypeScript definitions
│ └── index.ts # Types and interfaces
├── android/ # Native Android code
├── ios/ # Native iOS code
├── App.tsx # Root component
└── package.json # Project dependencies


🚀 How to Run The Project

Prerequisites

  • Node.js (v18 or higher)
  • npm or Yarn
  • JDK 17
  • Android Studio (for Android)
  • Xcode (for iOS - macOS only)

Installation

  1. Clone the repository
git clone https://github.com/natsalete/GameHub.git
cd GameHub
  1. Install the dependencies
npm install

# or
yarn install
  1. Configure the API Key

Get a free key at: https://rawg.io/apidocs

Edit the src/services/api.ts file:

const API_KEY = 'YOUR_KEY_HERE'; ```

4. **Install iOS dependencies** (macOS only)
```bash
cd ios
pod install
cd ..

Run in Development

Android

# Terminal 1 - Start Metro Bundler
npm start

# Terminal 2 - Run on Android
npm run android

iOS (macOS only)

# Terminal 1 - Start Metro Bundler
npm start

# Terminal 2 - Run on iOS
npm run ios

📦 Generate APK/AAB (Android)

APK Debug (for testing)

cd android
./gradlew assembleDebug
cd ..

APK generated in: android/app/build/outputs/apk/debug/app-debug.apk

APK Release (production)

  1. Generate signing key (only once)
cd android/app
keytool -genkeypair -v -storetype PKCS12 -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
or
& "C:\Program Files\Java\jdk-21\bin\keytool.exe" -genkeypair -v -storetype PKCS12 -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
cd ../..
  1. Configure gradle.properties

Add the following to the end of android/gradle.properties:

MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
MYAPP_RELEASE_KEY_ALIAS=my-key-alias
MYAPP_RELEASE_STORE_PASSWORD=your_password
MYAPP_RELEASE_KEY_PASSWORD=your_password
  1. Generate APK
cd android
./gradlew assembleRelease
cd ..

APK generated in: android/app/build/outputs/apk/release/app-release.apk

AAB for Google Play Store

cd android
./gradlew bundleRelease
cd ..
``` AAB generated in: `android/app/build/outputs/bundle/release/app-release.aab`

---

## 🎨 Architecture and Patterns

### State Management
- **Context API** for global state (favorites)
- **useState** for local component state
- **useEffect** for side effects and API calls

### Navigation
- **Stack Navigator** for navigation between main screens
- **Bottom Tabs** for navigation between sections (Home, Search, Favorites)

### API Communication
- Centralized service in `api.ts`
- Asynchronous requests with async/await
- Error handling with try/catch

### TypeScript Typing
- Interfaces for domain objects (Game, Genre, Platform)
- Types for navigation (RootStackParamList, TabParamList)
- Typed props in all components

---

## 📊 Detailed Features

### 1. Home Screen
- List of most popular games
- Sorting by rating
- Infinite scrolling (pagination)
- Pull-to-refresh
- Navigation to details

### 2. Search Screen
- Real-time search
- Minimum 3 characters
- Instant results
- Responsive grid
- Visual loading feedback

### 3. Game Details Screen
- Game banner
- Main information (rating, release date, Metacritic)
- Genres and platforms
- Full description
- Screenshots in horizontal carousel
- Favorite/unfavorite button

### 4. Favorites Screen
- List of games Favorites
- Persistence with AsyncStorage
- Favorites counter
- Friendly empty state
- Favorites removal

---

## 🎯 Requirements Met

### ✅ User Interface (UI)
- Modern and responsive design
- Reusable components (GameCard, SearchBar)
- Visual feedback (loading, empty states)
- Consistent and harmonious colors

### ✅ State Management
- Context API for favorites (global state)
- AsyncStorage for persistence
- useState for local states

### ✅ Interactive Features
- Real-time search
- Dynamic lists with infinite scroll
- Favorites system
- Integration with external API (RAWG)
- Pull-to-refresh

### ✅ Navigation
- React Navigation configured
- Stack Navigator for main flow
- Bottom Tabs for navigation between sections
- Typed parameters between Screens

---

## 🔧 Settings and Customizations

### Theme Colors
```typescript
const colors = {
primary: '#1a1a2e', // Dark blue
secondary: '#e94560', // Pink/red
accent: '#0f3460', // Medium blue
background: '#16213e', // Card blue
text: '#ffffff', // White

textSecondary: '#6c757d' // Gray
};

Change App Name

Edit android/app/src/main/res/values/strings.xml:

<string name="app_name">GameHub</string>

Change Icon

Replace the files in:

  • android/app/src/main/res/mipmap-*/ic_launcher.png

🐛 Troubleshooting

Metro Bundler not connecting

adb reverse tcp:8081 tcp:8081

Cache error

npm start -- --reset-cache

Clear Android build

cd android
./gradlew clean
cd ..

App not updating

adb uninstall com.gamehub
npm run android

📚 Resources and References


👨‍💻 Author

Powered by ☕ and 💙


📄 License

This project is under the MIT license. See the LICENSE file for more details.


🤝 Contributions

Contributions are welcome! Feel free to open issues and pull requests.

  1. Fork the project
  2. Create a branch for your feature (git checkout -b Add feature/MyFeature)
  3. Commit your changes (git commit -m 'Add MyFeature')
  4. Push to the branch (git push origin feature/MyFeature)
  5. Open a Pull Request

⭐ If you liked it, leave a star! ⭐

Made with ❤️ and React Native

About

GameHub is a mobile application developed in React Native app that allows users to explore, search, and manage a collection of games. The app consumes the RAWG API (the world's largest game database) to provide detailed information on thousands of games.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages