React Native ile Mobil Uygulama Geliştirme – 14 – WebView Oluşturma

“React Native ile Mobil Uygulama Geliştirme” başlıklı makalelerimizden bir yenisini daha sizlerle paylaşmak istiyorum. Bu makale, bir dizi makaleden oluşacak olan serisinin 14. kısmıdır. Bir önceki makalede (Part 13), React Native’de Multi-Step Form oluşturmayı ve mobil projelerimizde nasıl kullanacağımızı anlattım.

React Native’de web sitelerimizi webview ile  göstermeyi ve mobil projelerimizde nasıl kullanacağımızı öğreneceğiz.

Daha önceki makaleleri okumadıysanız, lütfen buradan başlayın.

Bu yazıda React Native WebView ile web sitenizin görünümünü Ios ve Android uygulamanızda gösterebilmeyi anlatacağım. Web sitenizin URL’sini kullanarak bu işlemi yapacağımızdan, sitenizdeki herhangi bir değişiklik uygulamanıza anında yansıyacaktır.

1. Yeni bir proje oluşturun

react-native init ProjectName

2. Aşağıdaki bağımlılıkları yükleyin
Navigasyon ve react-native web görünümü için iki bağımlılık eklemeliyiz, navigasyon için en son react-navigasyon 5.0’ı kullanıyoruz. React-navigation 5.0 hakkında daha fazla bilgi edinmek için bu linke bakın. React-native-webview yüklemek için aşağıdaki komutu kullanın.

npm install --save react-native-webview

React-navigation 5.0 için aşağıdaki komutları kullanın.

İlk olarak, react-navigasyonu için aşağıdaki library’i kurun.

npm install @react-navigation/native

Ardından aşağıdaki komutu kullanarak destekleyici libraryleri kurun
npm install react-native-reanimated react-native-gesture-handler react-native-screens react-native-safe-area-context @react-native-community/masked-view

3. WebViewScreen.js oluşturun
Bu ekranı birden çok kez kullanabilmemiz için WebViewScreen.js için ayrı ekran etkinliği oluşturacağız.

import React, { Component } from "react";

import { WebView } from "react-native-webview";    //<---Import this dependency

export default class WebViewScreen extends Component {
  constructor(props) {
    super(props);
    console.log(props.route.params);

    this.state = {
      url: props.route.params.url
    };
  }

  render() {
    return <WebView source={{ uri: this.state.url }} />;   //<---Pass url to webview
  }
}

Yapıcıdaki yukarıdaki ekranda, önceki ekrandan geçiş olan görünen URL’yi alıp durum değişkenine kaydedeceğiz ve yukarıdaki kodu gördüğümüz gibi kaynağa atlayarak web görünümünü görüntülemek için bu URL’yi kullanacağız.

4. WebView ekranını çağırma
Bu örnekte, aşağıdaki gibi Home.js eylem çubuğundan webViewScreen’i çağırıyorum

 const { navigation } = props;

  React.useLayoutEffect(() => {
    navigation.setOptions({
      headerRight: () => (
        <TouchableOpacity
          onPress={() =>
            navigation.navigate("WebViewScreen", {               //<--- Call WebViewScreen and Pass URL
              url: "https://smality.com"
            })
          }
        >
          <Text style={{ color: "#FFFFFF", paddingHorizontal: 15 }}>
            Open WebView screen
          </Text>
        </TouchableOpacity>
      )
    });
  }, [navigation]);

5. App.js
React-navigation 5.0’da NavigationContainer’ı Kullanarak Ekranları tanımladığım App.js’mi ve createStackNavigator’ı kontrol edin.

import * as React from "react";
import { Text, View, Button } from "react-native";
import { NavigationContainer } from "@react-navigation/native";
import { createStackNavigator } from "@react-navigation/stack";

import Home from "../screens/Home";
import WebViewScreen from "../screens/WebViewScreen";

const Stack = createStackNavigator();

function MainStackNavigator() {
  return (
    <NavigationContainer>
      <Stack.Navigator
        initialRouteName="Home"
        screenOptions={{
          gestureEnabled: true,
          headerStyle: {
            backgroundColor: "#3e78f4"
          },
          headerTitleStyle: {
            fontWeight: "bold"
          },
          headerTintColor: "#FFFFFF"
        }}
      >
        <Stack.Screen
          name="Home"
          component={Home}
          options={{ title: "Home Screen" }}
        />
       
        <Stack.Screen
          name="WebViewScreen"
          component={WebViewScreen}
          options={{ title: "React-native WebView" }}
        />
      </Stack.Navigator>
    </NavigationContainer>
  );
}

export default MainStackNavigator;

Ekran Görüntüsü

Kaynak: https://www.techup.co.in/react-native-webview-example/

Kotlin Playground Kullanımı ve Avantajları

Yazılım geliştirme süreçlerinde kullandığımız kod derleyici programlar, eğer bilgisayarınızın donanımı güçlü değilse, yazılımcıyı çok fazla uğraştırabilir. Bu durum ciddi enerji ve zaman kaybına sebep olur. Bazı tool’lar bizi bu gibi sıkıntılardan kurtarıp, kod geliştirmeyi kolaylaştırmıştır.

Bu makalede Kotlin kodunuzu JVM, JS, CANVAS ve JUNIT yapılarını kullanarak çalıştırmanıza ve başkalarıyla paylaşmanıza kolaylık sağlayan online bir kod düzenleyicisi Kotlin Playground tool’u anlatacağım.

Kotlin Playground tool nedir? Ne işe yarar?

Kotlin Playground, kod derleyicisi veya IDE gibi programlar kullanmadan bir web sitesi üzerinden Kotlin kodlarınızı oluşturmanıza, çalıştırmanıza ve başkalarıyla paylaşmanıza olanak tanıyan yardımcı bir araçtır.

Kodlar ve test fikirleriyle denemeler yapmanıza izin verir. Bir programlama dilinde yeniyseniz, derleyici veya IDE gibi araçlar yüklemenize gerek kalmadan size hızlı bir şekilde yardımcı olur.

Bu makalede Kotlin Playground kullanarak şunları öğreneceğiz.

  • Playground, kodlarınızı çalıştırdığında JVM, JS, CANVAS ve JUNIT yapılarıyla destelediğini
  • Kodlarınızı kolaylıkla başkalarıyla paylaşmayı
  • Çalıştırılabilir kodu bir web sitesine yerleştirmenize olanak tanır.

Kotlin Playground tool kullanımı

Bu aracı kullanabilmek için https://play.kotlinlang.org/ linkini açmanız gerekir.

Kodu oluşturmak ve çalıştırmak için sağda bulunan RUN ikonuna  tıklayın. 

Sonuç şu şekilde gözükecektir:

Ayarları Düzenleme

Kotlin Playground aracının farklı farklı özelliklerini kullanmak istiyorsanız, ayarlardaki alanları değiştirmeniz gerekir. Ayarlar bölümüne sağdaki  ikonundan ulaşabilirsiniz. Ayarlar ekranındaki alanlar;

  • Kotlin Version: Programınızı oluşturmak için sürümü seçeceğiniz alan
  • Program arguments: main fonksiyonunun parametresinden gelecek değeri girdiğimiz alan
  • Target Platform: Yazdığınız kodun kullanacağı JVM, JS, CANVAS veya JUNIT yapılarından birini seçme bölümüdür.

Playground ‘da JVM yapısının kullanımı

Kotlin, farklı platformlarda çalışabilecek sihirli bir yeteneğe sahiptir. Bu bölümde, Kotlin kodunuz için target platform alanını değiştirmenin ne anlama geldiğini öğreneceksiniz. Ayarlar bölümünü açalım.

JVM target platform’u varsayılan olarak seçilidir. “Hello, world” örneğindeki gibi kodları JVM programını kullanarak çalıştırır.

Playground ‘da JS yapısının kullanımı

JavaScript’i Kotlin dilinde kullanabiliriz. Kotlin / JS, Node.js gibi sunucu tarafında web geliştirmeye ve jQuery ve React gibi istemci tarafında web geliştirmeye olanak tanır. Bu tür projelerde, Kotlin ve JavaScript’in birlikte çalışabilirliği ile ilgili birkaç şeyi denemek isterseniz, Kotlin Playground yardımcı olabilir.

Bu bölümde, JavaScript’i Kotlin’den çalıştırabilmek için target platform’u JS olarak değiştirmelisiniz.

Kodunuzu aşağıdaki gibi düzenleyin.

fun main(args: Array<String>) {
  console.log("Hello " + args.joinToString())
    
  js("alert(\"This is an alert\")")
}

Bu kodu çalıştırdığınızda ikinci satırdaki kod; tarayıcınızda alert pencerisi açacaktır ve tarayıcınızda aşağıdaki gibi bir görüntü göreceksiniz.

JS console açınız. Eğer Windows işletim sistemi kullanıyorsanız, F12 tuşuna basarak console sekmesini açabilirsiniz. console.log metodu sonucunda aşağıdaki görüntüyü elde edersiniz.

Playground ‘da CANVAS yapısının kullanımı

HTML5, JavaScript’i kullanarak grafikler çizen Canvas adlı yeni bir öğeyi tanıttı. Basit statik grafikler ve animasyonlar oluşturmanıza ve hatta gerçek zamanlı video oluşturmanıza olanak tanır. Canvas ile etkileşim için Kotlin’i kullanabilirsiniz.

Playground, bir Canvas’ta çizim yapmanıza izin verir. Bu işlemi yapabilmek için ayarlardan target platformu CANVAS seçin ve Program arguments alanını silin.

Kodunuzu aşağıdaki kodla değiştirin.

import org.w3c.dom.CanvasRenderingContext2D
import org.w3c.dom.HTMLCanvasElement
import kotlin.browser.document
import kotlin.browser.window

// HTML Canvas başlatıp, yükseklik ve genilkli değerlerini body e ekledik
val canvas = initalizeCanvas()
fun initalizeCanvas(): HTMLCanvasElement {
  val canvas = document.createElement("canvas") as HTMLCanvasElement
  val context = canvas.getContext("2d") as CanvasRenderingContext2D
  context.canvas.width  = window.innerWidth.toInt();
  context.canvas.height = window.innerHeight.toInt();
  document.body!!.appendChild(canvas)
  return canvas
}

val context: CanvasRenderingContext2D
  get() {
    return canvas.getContext("2d") as CanvasRenderingContext2D
  }
    
fun main() {
  //Yazı tipi ve boyutunu belirleyip, HTML Canvas'a Hello Canvas yazdık
  context.font = "30px Arial";
  context.fillText("Hello Canvas", 10.0, 50.0);
  
  //HTML Canvas'a kırmızı bir dikdörtgen çizdik
  context.fillStyle = "#FF0000";
  context.fillRect(200.0, 15.0, 50.0, 50.0);
}

Bu kodu çalıştırdığımızda aşağıdaki gibi bir görüntü elde ederiz.

HTML Canvas’ı Kotlin dilinde nasıl kullanabileceğimizi örneklendirdim. HTML Canvas hakkında daha detaylı bilgiyi bu dokümandan elde edebilirsiniz.

Playground ‘da JUNIT yapısının kullanımı

Kotlin Playground tool’da Kotlin testleri yazma, çalıştırma ve hangilerinin başarılı olup olmadığını görme seçeneğiniz de vardır. Bunu yapabilmek için ayarlardan target platformu JUNIT seçmeniz yeterlidir.

En son yazdığınız kodları silip, aşağıdaki kodu yazınız.

data class Family(val name: String, val people: Array<Person>)
data class Person(val lastname: String) {
  operator fun plus(person: Person): Family {
    return Family(
      lastname + " " + person.lastname, 
      arrayOf(this, this)
    )
  }
}

Üstteki kodu test edebilmek için, sayfanın en üst bölümüne aşağıdaki kodu ekleyin.

import org.junit.Assert
import org.junit.Test

class PersonTest {
  // 1
  @Test
  fun `Person + Person should create Family containing each Person`() {
    val personOne = Person("Cortazzo")
    val personTwo = Person("Sproviero")
        
    val family = personOne + personTwo
        
    Assert.assertEquals(arrayOf(personOne, personTwo), family.people)
  }

  // 2
  @Test
  fun `Person + Person should create Family concatenating lastnames`() {
    val personOne = Person("Cortazzo")
    val personTwo = Person("Sproviero")
        
    val family = personOne + personTwo
        
    Assert.assertEquals("Cortazzo Sproviero", family.name)
  }
}

Test kodumuz ne gibi işler yapıyor:

1.  yorum tag bölümündeki test: Family sınıfının her bir Person nesnesini içerip içermediğini kontrol eder.

2.  yorum tag bölümündeki test: Person sınıfının lastname değerlerini birleştirip, Family’deki name parametresiyle aynı olup olmadığını kontrol eder.

Kodun çıktısı:

plus fonksiyonunu incelerseniz, problemin diğer person’u eklemek yerine kendisini diziye iki kez eklemesi olduğunu göreceksiniz. İşlevi aşağıdaki kodla değiştirerek düzeltebilirsiniz.

operator fun plus(person: Person): Family {
  return Family(
    lastname + " " + person.lastname, 
    arrayOf(this, person)
  )
}

Playground ‘daki Kodların Paylaşımı

Kotlin Playground’ da yazmaya devam ettiğiniz kodları, herhangi bir program kullanmadan diğer insanlarla paylaşıp, kod takibi yapmalarını sağlayabilirsiniz. Bu işlemi yapabilmek için sağdaki ikonuna tıklamalısınız. Sonrasında aşağıdaki ekran açılacaktır.

Bu resimde kırmızı ile belirtiğim ikonu tıklayıp, kodun bulunduğu linki kopyalayıp, paylaşmak istediğiniz kişiye gönderebilirsiniz.

JS Script ile Playground ‘daki Kodları Siteye Ekleme

Web sitenizde Playground’ da yazdığınız Kotlin kodunu çalıştırılabilir halini gösterme imkanınız bulunmaktadır.  HTML’ye bir JS komut dosyası ekleyerek bu işlemi yapabilirsiniz. Dilerseniz web site testinizi https://codepen.io/pen/ gibi çalışma alanında yapabilirsiniz. Bir örnek yapalım.

HTML alanına aşağıda anlattığım gibi kodları ekleyelim.

1- İlk önce Playground scriptini ekleyelim.

<script src="https://unpkg.com/kotlin-playground@1" data-selector="code"></script>

2- Scriptin hemen altına, code tag leri arasına Kotlin kodumuzu ekleyelim.

<code>
fun main() {
  println("Hello Embedded World!!!")
}  
</code>

Bu işlemin çıktısı aşağıdaki resmin sağındaki gibi olacaktır.

Dilerseniz Play butonuna tıklayarak, sitenizde Kotlin kod çıktısını görebilirsiniz.

Kotlin Playground hakkında daha detaylı bir bilgi edinmek isterseniz, dokümantasyon sayfasını inceleyebilirsiniz.

Kaynak

1- https://www.raywenderlich.com/16929465-kotlin-playground-getting-started#toc-anchor-007