CodeBlanks Logo Icon CodeBlanks

Native özellikler

Kamera, konum ve bildirim native özelliklerini eklersin.

Kamera ve konum native hook'ları

Bu derste iki native özellik ekleriz: kamera ve konum. expo-camera ile fotoğraf çeker, expo-location ile GPS koordinatı alırız. Her ikisi de önce izin ister; kullanıcı onaylamadan çalışmaz.

Bir useCamera hook'u yazarak fotoğraf state'ini ve çekme işlevini sarmalarız. useLocation hook'u da benzer şekilde konum state'ini tutar. Bu hook'lar App'e eklenince saha görevlisi fotoğraf çekip konum kaydedebilir. Native modüller JS tarafına bridge üzerinden gelir; izinler ise Permissions API'siyle istenir. Bu, ileri seviye uygulamaların olmazsa olmazıdır.

useCamera hook'u

useCamera, fotoğraf çekme mantığını saran özel hook'tur. İçinde photo state'i ve takePhoto işlevi tutar. takePhoto çağrılınca Camera.takePictureAsync() çalışır ve sonuçu setPhoto ile yazar.

Örnek iskelet: export function useCamera() { const [photo, setPhoto] = useState(null); const takePhoto = async () => { const r = await Camera.takePictureAsync(); setPhoto(r.uri); }; return { photo, takePhoto }; }. Bu desen, native API'yi React'in state modeline uyarlar. Bileşenler const { photo, takePhoto } = useCamera() ile sade bir arayüz alır; native karmaşıklık arkada kalır.

Uygulama useCamera hook'unu ekle

Önceki kodun üstüne bir useCamera hook'u ekle. useState(null) ile photo state'i tut. takePhoto adlı async işlev tanımla; içi setPhoto çağrısı içersin. Hook { photo, takePhoto } döndürsün.

Başlangıç kodu

App.js
import React, { useState, createContext, useContext } from 'react';
import { Text, View } from 'react-native';

const AuthContext = createContext(null);
export function useAuth() { return useContext(AuthContext); }

function App() {
  const [tasks, setTasks] = useState([]);
  const [user, setUser] = useState(null);
  return (
    <AuthContext.Provider value={{ user, setUser }}>
      <View>
        <Text>Saha Raporu</Text>
      </View>
    </AuthContext.Provider>
  );
}

// useCamera hook'unu buraya ekle

Örnek çözüm

App.js
import React, { useState, createContext, useContext } from 'react';
import { Text, View } from 'react-native';

const AuthContext = createContext(null);
export function useAuth() { return useContext(AuthContext); }

function App() {
  const [tasks, setTasks] = useState([]);
  const [user, setUser] = useState(null);
  return (
    <AuthContext.Provider value={{ user, setUser }}>
      <View>
        <Text>Saha Raporu</Text>
      </View>
    </AuthContext.Provider>
  );
}

export function useCamera() {
  const [photo, setPhoto] = useState(null);
  const takePhoto = async () => {
    setPhoto('photo-uri');
  };
  return { photo, takePhoto };
}

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Akışı rolüne eşle

Kavram Anlamı
expo-camera Fotoğraf çeker
expo-location GPS koordinatı
Permissions İzin ister
useCamera State'i sarmalar

2 Camera takePictureAsync çağrısı

Soru
const r = await Camera.____();
Cevap
const r = await Camera.takePictureAsync();

Açıklama: takePictureAsync fotoğraf çeker.

3 Native özellik çalışmadan önce ne istenir?

App.js
Camera.requestPermissionsAsync()
  • İzin Doğru cevap
  • Parola
  • Ödeme
  • E-posta

Açıklama: Kamera ve konum izin ister.

İleri seviye bölümündeki tüm dersler