Flutter’da link açmak, linke tıklayınca bir başka uygulamaya gitmesi gibi durumları url_launcher kütüphanesi yönetir. Bu kütüphaneyle birlikte Facebook, Linkedin, Twitter, Maps, Whatsapp gibi birçok uygulamaya veri göndererek açabilirsiniz. Url_launcher kullanımı çok basit olan bir kütüphanedir. Tabi konfigürasyonu düzgün yapmamız gerekiyor. Dışarıya göndereceğiniz bağlantılar için iOS tarafında Info.plist içerisinde izin eklemeniz gerekiyor.

Örneğin, bir uygulamada hem telefon, hem mail, hem webview hem de Google Maps kullanacağım için şöyle bir array ekledim:

	<key>LSApplicationQueriesSchemes</key>
	<array>
		<string>googlechromes</string>
		<string>comgooglemaps</string>
		<string>https</string>
		<string>http</string>
		<string>tel</string>
		<string>mailto</string>
	</array>

Daha sonra içerden Facebook sayfasına link vereceğim için şöyle bir key – array ekledim:

	<key>CFBundleURLSchemes</key>
	<array>
		<string>fb[111390717329298]</string>
	</array>

111390717329298 yazan yere Facebook uygulamasının açacağı Facebook sayfasının ID’sini veya Facebook profilinin ID’sini yazmanız gerekiyor. Bir diğer adıyla Facebook App ID diye geçer. Bu Facebook App ID’yi aldıktan sonra dışardan gelebilecek her bağlantıyı, cihaz kullanıcısının Facebook uygulaması daima sizin sayfanızı açar. Deep link gibi düşünün.

Android tarafında url_launcher için konfigürasyon ayarı yaparken şu satırı AndroidManifest.xml dosyalarına eklemeniz yeterlidir:

    <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>

Flutter url_launcher kullanımı

Flutter url_launcher Facebook için kullanımı:

                    GestureDetector(
                      onTap: () async {
                        var fburl = 'fb://page?id=111390717329298';
                        try {
                          bool launched =
                              await launch(fburl, forceSafariVC: false);
                          if (!launched) {
                            await launch(fburl, forceSafariVC: false);
                          }
                        } catch (e) {
                          await launch(fburl, forceSafariVC: false);
                        }
                      },
                      child: FaIcon(FontAwesomeIcons.facebook,
                          size: 36.0, color: Colors.blue[900]),
                    ),

Flutter url_launcher web linkleri için kullanımı:

                  onTap: () async {
                    var weburl = "https://www.zahidtekbas.com.tr";
                    try {
                      bool launched =
                          await launch(weburl, forceSafariVC: false);
                      if (!launched) {
                        await launch(weburl, forceSafariVC: false);
                      }
                    } catch (e) {
                      print('webSite problem: ${e.toString()}');
                      await launch(weburl, forceSafariVC: false);
                    }
                  },

Url_launcher Linkedin sayfaları için kullanımı:

                    GestureDetector(
                      onTap: () async {
                        var linkedin =
                            'https://www.linkedin.com/company/{insertCompanyName}/';
                        try {
                          bool launched =
                              await launch(linkedin, forceSafariVC: false);
                          if (!launched) {
                            await launch(linkedinLink, forceSafariVC: false);
                          }
                        } catch (e) {
                          await launch(linkedinLink, forceSafariVC: false);
                        }
                      },
                      child: FaIcon(
                        FontAwesomeIcons.linkedin,
                        size: 36.0,
                        color: Colors.blue[700],
                      ),
                    ),

Url_launcher mail için kullanımı:

          onTap: () async {
            String url = 'mailto:info@zahidtekbas.com.tr';
            if (await canLaunch(url)) {
              await launch(url);
            } else {
              throw 'Could not launch $url';
            }
          },

Url_launcher telefon için kullanımı:

          onTap: () async {
            String url = 'tel:+1-111-111-1212';
            if (await canLaunch(url)) {
              await launch(url);
            } else {
              throw 'Could not launch $url';
            }
          },

Url launcher paketi ile Whatsapp’i açmak için:

        onPressed: () async {
          bool result;
          if (Platform.isAndroid) {
            result = await canLaunch('https://wa.me/90**********');
            if (result == true) {
              EasyLoading.showSuccess('Yönlendiriliyorsunuz...');
              launch('https://wa.me/90**********');
            } else {
              EasyLoading.showError('Bir sorun oluştu...');
            }
          } else if (Platform.isIOS) {
            result = await canLaunch(
                'https://api.whatsapp.com/send?phone=90**********');
            if (result == true) {
              EasyLoading.showSuccess('Yönlendiriliyorsunuz...');
              launch('https://api.whatsapp.com/send?phone=90**********');
            } else {
              EasyLoading.showError('Bir sorun oluştu...');
            }
          }
        },

Url launcher paketi ile Youtube videolarını açmak için:

      onTap: () async {
        if (Platform.isIOS) {
          if (await canLaunch(
              'youtube://https://youtu.be/${video}')) {
            await launch('youtube://https://youtu.be/${video}',
                forceSafariVC: false);
          } else {
            if (await canLaunch('https://youtu.be/${video}')) {
              await launch('https://youtu.be/${video}');
            } else {
              throw 'Could not launch video';
            }
          }
        } else {
          var url = 'https://youtu.be/${video}';
          if (await canLaunch(url)) {
            await launch(url);
          } else {
            throw 'Could not launch $url';
          }
        }
      },


Ve son olarak, url_launcher kütüphanesini haritaları açmak için kullanalım. Haritalarda koordinat vererek yönlendirme yapabilirsiniz:

          onTap: () async {
            String googleUrl =
                'https://www.google.com/maps/search/?api=1&query=29.7140596,-95.7653435';
            if (await canLaunch(googleUrl)) {
              await launch(googleUrl);
            } else {
              throw 'Could not open the map.';
            }
          },

Flutter url_launcher kütüphanesini kullanmak bu kadar kolay!


Okuyucuya Not

Merhaba okuyucu! Blogum son zamanlarda yüksek trafik almaya başladı ve bu durumdan memnunum fakat aynı zamanda siz ziyaretçileri tatmin edememekten endişeliyim. 🙂 Eğer yazılarım ile ilgili bir tavsiyeniz olursa mail adresimden bana ulaşabilir veya Twitter üzerinden direct message gönderebilirsiniz. Github’ta örnek olarak yaptığım projelere göz atmak isterseniz de bu linki kullanabilirsiniz. Umarım bu ziyaretinizle size bir şeyler katabilmişimdir.

Sağlıcakla kalın!

Tags: