Convert Figma logo to code with AI

catalinmiron logoreact-native-dribbble-app

Dribbble app built with React Native

2,066
407
2,066
20

Top Related Projects

A framework for building native applications using React

A complete native navigation solution for React Native

Cross-Platform React Native UI Toolkit

:boom: React Native UI Library based on Eva Design System :new_moon_with_face::sparkles:Dark Mode

Mobile-first, accessible components for React Native & Web to build consistent UI across Android, iOS and Web.

Customizable Icons for React Native with support for image source and full styling.

Quick Overview

The react-native-dribbble-app is a React Native application that showcases Dribbble shots. It demonstrates how to build a mobile app using React Native while integrating with the Dribbble API to display design content. The project serves as a practical example for developers looking to create similar apps or learn React Native development.

Pros

  • Provides a real-world example of React Native app development
  • Demonstrates integration with a third-party API (Dribbble)
  • Includes implementation of common mobile app features like navigation and image loading
  • Serves as a learning resource for React Native beginners

Cons

  • The project hasn't been updated recently, which may mean it's using outdated dependencies
  • Limited documentation on setup and configuration
  • May not follow the most current React Native best practices due to its age
  • Lacks comprehensive error handling and edge case management

Code Examples

  1. Fetching Dribbble shots:
fetchShots = (page = 1) => {
  const { shotType } = this.state;
  const shotTypes = ['popular', 'recent', 'debuts'];
  fetch(`https://api.dribbble.com/v1/shots?access_token=${ACCESS_TOKEN}&page=${page}&per_page=10&list=${shotTypes[shotType]}`)
    .then(response => response.json())
    .then(shots => this.setState({ shots: page === 1 ? shots : [...this.state.shots, ...shots] }))
    .catch(error => console.log(error));
};
  1. Rendering a shot item:
renderRow = (shot) => {
  return (
    <TouchableHighlight onPress={() => this.goToShot(shot)} underlayColor='transparent'>
      <View style={styles.row}>
        <Image style={styles.image} source={{uri: shot.images.normal}} />
        <View style={styles.textContainer}>
          <Text style={styles.title} numberOfLines={1}>{shot.title}</Text>
          <Text style={styles.text} numberOfLines={1}>{shot.user.name}</Text>
        </View>
      </View>
    </TouchableHighlight>
  );
};
  1. Navigation setup:
const AppNavigator = createStackNavigator({
  Home: { screen: ShotsScreen },
  Shot: { screen: ShotDetails },
}, {
  initialRouteName: 'Home',
});

export default createAppContainer(AppNavigator);

Getting Started

To run the react-native-dribbble-app:

  1. Clone the repository:

    git clone https://github.com/catalinmiron/react-native-dribbble-app.git
    cd react-native-dribbble-app
    
  2. Install dependencies:

    npm install
    
  3. Set up your Dribbble API access token in app/config/index.js.

  4. Run the app:

    npx react-native run-ios
    # or
    npx react-native run-android
    

Note: You may need to update some dependencies and configurations to run the app with the latest React Native version.

Competitor Comparisons

A framework for building native applications using React

Pros of react-native

  • Larger community and more extensive documentation
  • Regular updates and maintenance from Facebook
  • Wider range of third-party libraries and components

Cons of react-native

  • Steeper learning curve for beginners
  • More complex setup and configuration
  • Larger project size and potential performance overhead

Code comparison

react-native:

import React from 'react';
import { View, Text, StyleSheet } from 'react-native';

const App = () => (
  <View style={styles.container}>
    <Text>Hello, React Native!</Text>
  </View>
);

react-native-dribbble-app:

import React from 'react';
import { View, Text } from 'react-native';

const App = () => (
  <View>
    <Text>Dribbble App</Text>
  </View>
);

The react-native example demonstrates a more structured approach with separate StyleSheet definitions, while react-native-dribbble-app shows a simpler, more concise implementation. react-native provides a more comprehensive foundation for building complex applications, whereas react-native-dribbble-app is focused on creating a specific Dribbble-inspired app with potentially less boilerplate code.

A complete native navigation solution for React Native

Pros of react-native-navigation

  • More comprehensive navigation solution with advanced features like deep linking and custom transitions
  • Better performance due to native implementation of navigation components
  • Larger community and more frequent updates

Cons of react-native-navigation

  • Steeper learning curve and more complex setup process
  • Potential compatibility issues with certain React Native versions
  • Requires additional native code integration

Code Comparison

react-native-navigation:

Navigation.setRoot({
  root: {
    stack: {
      children: [
        {
          component: {
            name: 'Home'
          }
        }
      ]
    }
  }
});

react-native-dribbble-app:

const AppNavigator = createStackNavigator({
  Home: { screen: HomeScreen },
  Details: { screen: DetailsScreen },
});

export default createAppContainer(AppNavigator);

The react-native-navigation example shows a more declarative approach to setting up navigation, while react-native-dribbble-app uses a simpler stack navigator configuration.

react-native-navigation offers more control over the navigation structure and native performance benefits, but comes with increased complexity. react-native-dribbble-app provides a simpler setup using React Navigation, which may be sufficient for less complex apps but might lack some advanced features and native performance optimizations.

Cross-Platform React Native UI Toolkit

Pros of React Native Elements

  • Comprehensive UI toolkit with a wide range of pre-built components
  • Active community and regular updates, ensuring compatibility with latest React Native versions
  • Extensive documentation and examples for easy implementation

Cons of React Native Elements

  • More generic design, less focused on a specific app style like Dribbble
  • Larger package size due to the extensive component library
  • May require more customization to achieve a unique look

Code Comparison

React Native Elements:

import { Button, Card, Icon } from 'react-native-elements';

<Card>
  <Card.Title>Card Title</Card.Title>
  <Card.Divider/>
  <Card.Image source={require('./image.jpg')} />
  <Button icon={<Icon name='code' color='#ffffff' />} title='View Now' />
</Card>

React Native Dribbble App:

import { View, Image, Text } from 'react-native';

<View style={styles.card}>
  <Image source={{ uri: shot.images.normal }} style={styles.image} />
  <Text style={styles.title}>{shot.title}</Text>
  <Text style={styles.description}>{shot.description}</Text>
</View>

The React Native Elements code showcases its pre-built components, while the Dribbble app uses more basic React Native components with custom styling.

:boom: React Native UI Library based on Eva Design System :new_moon_with_face::sparkles:Dark Mode

Pros of react-native-ui-kitten

  • Comprehensive UI library with a wide range of customizable components
  • Active development and maintenance, with regular updates and bug fixes
  • Extensive documentation and examples for easy implementation

Cons of react-native-ui-kitten

  • Steeper learning curve due to its extensive feature set
  • Larger bundle size, which may impact app performance
  • Less focused on specific design styles compared to react-native-dribbble-app

Code Comparison

react-native-ui-kitten:

import { Button, Text } from '@ui-kitten/components';

const MyComponent = () => (
  <Button>
    <Text>Click me!</Text>
  </Button>
);

react-native-dribbble-app:

import { TouchableOpacity, Text } from 'react-native';

const MyComponent = () => (
  <TouchableOpacity>
    <Text>Click me!</Text>
  </TouchableOpacity>
);

The react-native-ui-kitten example uses custom components from the library, while react-native-dribbble-app relies on standard React Native components. This showcases the more comprehensive nature of react-native-ui-kitten, but also highlights the simplicity of react-native-dribbble-app.

Mobile-first, accessible components for React Native & Web to build consistent UI across Android, iOS and Web.

Pros of NativeBase

  • Comprehensive UI component library with a wide range of pre-built components
  • Customizable theme system for consistent styling across the app
  • Active development and regular updates from a dedicated team

Cons of NativeBase

  • Steeper learning curve due to its extensive API and customization options
  • Larger bundle size, which may impact app performance
  • Some components may require additional configuration or tweaking

Code Comparison

react-native-dribbble-app:

import React from 'react';
import { View, Text, StyleSheet } from 'react-native';

const Shot = ({ title, description }) => (
  <View style={styles.container}>
    <Text style={styles.title}>{title}</Text>
    <Text style={styles.description}>{description}</Text>
  </View>
);

NativeBase:

import React from 'react';
import { Box, Heading, Text } from 'native-base';

const Shot = ({ title, description }) => (
  <Box p={4}>
    <Heading size="md">{title}</Heading>
    <Text mt={2}>{description}</Text>
  </Box>
);

The NativeBase example demonstrates the use of pre-built components and a more declarative styling approach, while react-native-dribbble-app uses standard React Native components with separate StyleSheet definitions.

Customizable Icons for React Native with support for image source and full styling.

Pros of react-native-vector-icons

  • Extensive library of customizable vector icons
  • Regular updates and active maintenance
  • Seamless integration with React Native projects

Cons of react-native-vector-icons

  • Limited to icon functionality, not a full-fledged app template
  • Requires additional setup for custom icons
  • May increase app bundle size if many icons are used

Code Comparison

react-native-vector-icons:

import Icon from 'react-native-vector-icons/FontAwesome';

const MyComponent = () => (
  <Icon name="rocket" size={30} color="#900" />
);

react-native-dribbble-app:

import { Image } from 'react-native';

const MyComponent = () => (
  <Image source={require('./assets/icons/rocket.png')} style={{ width: 30, height: 30 }} />
);

react-native-vector-icons provides a more flexible and scalable approach to using icons, while react-native-dribbble-app relies on static image assets. The vector icons library offers easier customization and a wider range of icons without increasing app size significantly.

react-native-dribbble-app, however, serves as a complete app template with Dribbble integration, offering more than just icon functionality. It provides a full user interface and API integration, making it suitable for developers looking to create a Dribbble-like app quickly.

Ultimately, the choice between these repositories depends on the specific needs of your project. If you need a versatile icon solution, react-native-vector-icons is the better choice. For a ready-to-use Dribbble app template, react-native-dribbble-app would be more suitable.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

Would you like to support me?

Buy Me A Coffee


PayPal donate button

BuddyBuild

reactnative.gallery

###Dribbble app built with React Native

A Dribbble app build with React Native.

dribbble_app_screenshot

####Preview dribbble_app_flow

Updated version

dribbble-app-update

Plugins used:

####How to run it locally

  • Clone this repo git clone git@github.com:catalinmiron/react-native-dribbble-app.git
  • cd react-native-dribbble-app
  • run npm install
  • Open DribbbleApp.xcodeproj in XCode
  • Press cmd+r to build it

####Improvements

  • add icons in TabBar
  • refactor 'facebook-movies' fetching logic
  • add author view
  • fetch comments in shot details
  • switch to ES6