Cara Menampilkan Video Youtube dari API di Flutter

Share:
Cara Menampilkan Video Youtube dari API di Flutter

Halo semuanya, kembali lagi di sahretech. Pada kesempatan kali ini kita akan belajar cara menggunakan youtube api dan menampilkannya di flutter. Penasaran?, ayo ikuti tutorialnya di bawah ini.


Pada tutorial sebelumnya, saya sudah membahas bagaimana cara menampilkan video youtube dengan menggunakan data statik yang ditulis di dalam file flutter https://www.sahretech.com/2023/06/mudah-membuat-dan-menampilkan-video.html

Sekedar menggunakan data statik, aplikasi yang kita buat jadi tidak dinamis. Pada tutorial kita kali ini, kita akan coba menggunakan data dari youtube api. Setiap aplikasi dijalankan maka video akan diperbarui sesuai dengan data dari youtube api. Silahkan scroll ke bagian bawah artikel ini untuk melihat hasil akhirnya.

Baca Artikel Lain ✨
📰 1. Membuat Restful Api di Laravel Tanpa Library Tambahan Part 1 read more
📰 2. Menampilkan Data dengan API dan Token di Laravel Part 2 read more
📰 3. Cara Membuat Custom Registrasi dan Prosesnya di Laravel Part 1 read more
📰 4. Cara Membuat Custom Login di Laravel Part 2 read more


Cara Menampilkan Video Youtube dari Youtube API di Flutter

1. Pertama, kalian harus mendapatkan youtube api key untuk dapat mengakses data dari youtube api. Silahkan ikuti tutorial cara mendapatkan youtube api key berikut ini https://www.sahretech.com/2023/07/cara-mendapatkan-youtube-api-key.html

2. Ok selanjutnya buat sebuah project flutter baru dengan nama yang kalian inginkan. Dan gunakan flutter versi terbaru.

3. Buka pubspec.yaml lalu tambahkan paket http: dan youtube_player_flutter: ikuti contohnya seperti gambar di bawah ini. Dan jangan lupa save file untuk mengunduh paket.

Youtube API Flutter
Menambahkan Paket


4. Buat file video.dart di dalam folder lib. File ini digunakan sebagai model data video. Ikuti script di bawah ini



class Video { final String id; final String title; final String thumbnail; final String channelTitle; Video({required this.id, required this.title, required this.thumbnail, required this.channelTitle}); factory Video.fromJson(Map<String, dynamic> json) { return Video( id: json['id']['videoId'] ?? '', title: json['snippet']['title'] ?? '', thumbnail: json['snippet']['thumbnails']['high']['url'] ?? '', channelTitle: json['snippet']['channelTitle'] ?? '' ); } }


5. Buat file youtube_api_service.dart di dalam folder lib. Dan jangan lupa untuk mengganti YOUR_API_KEY pada script di bawah ini sesuai dengan api key kalian masing-masing. Ikuti script di bawah ini



import 'dart:convert'; import 'package:http/http.dart' as http; import 'video.dart'; class YouTubeApiService { Future<List<Video>> getVideos() async { final url = 'https://www.googleapis.com/youtube/v3/search' '?part=snippet' '&maxResults=10' '&q=flutter+tutorial' '&type=video' '&key=YOUR_API_KEY'; final response = await http.get(Uri.parse(url)); if (response.statusCode == 200) { final jsonData = json.decode(response.body); final videoList = jsonData['items'] as List<dynamic>; return videoList.map((item) => Video.fromJson(item)).toList(); } else { throw Exception('Failed to load videos'); } } }


Penjelasan:

  1. class YoutubeAPIService ini dapat kita gunakan pada semua file yang membutuhkan data youtube.
  2. getVideos() adalah method untuk mengambil data youtube. Kembaliannya berbentuk list dengan model Video
  3. final url url ini kita gukanan sebagai endpoint. Ada beberapa parameter yang dapat kalian setting. maxResults= digunakan untuk menampilkan banyaknya video. q= adalah query atau video yang ingin kita cari, kalian dapat menyesuaikannya sesuai yang kalian mau. Disini saya mencari tutorial flutter. type= parameter ini digunakan untuk memilih apakah mau menampilkan video atau channel.
  4. key= isi dengan api key yang kalian dapat dari google console.

Jik settingannya benar maka data dapat ditampilkan. Jika settingannya salah maka akan menjalankan pesan error throw Exception('Failed to load videos'). Jika terjadi error, silahkan konsultasi di kolom komentar di bawah ini.


6. Buat file detail.dart di dalam folder lib. Ikuti script di bawah ini.



import 'package:flutter/material.dart'; import 'package:youtube_player_flutter/youtube_player_flutter.dart'; import 'video.dart'; import 'youtube_api_service.dart'; class Detail extends StatefulWidget { final String videoId; final String title; Detail({ required this.videoId, required this.title, }); @override State<Detail> createState() => _DetailState(); } class _DetailState extends State<Detail> { late YoutubePlayerController _controller; @override void initState() { super.initState(); _controller = YoutubePlayerController( initialVideoId: YoutubePlayer.convertUrlToId( 'https://www.youtube.com/watch?v=' + widget.videoId)!, flags: const YoutubePlayerFlags( autoPlay: false, mute: false, ), ); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('Video Detail'), ), body: ListView( children: [ YoutubePlayer( controller: _controller, showVideoProgressIndicator: true, progressIndicatorColor: Colors.blueAccent, ), Padding( padding: const EdgeInsets.all(8.0), child: Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Container( width: 35, height: 35, decoration: const BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(20)), image: DecorationImage( fit: BoxFit.cover, image: NetworkImage( 'https://cdn.pixabay.com/photo/2016/11/18/23/38/child-1837375_640.png', ), ), ), ), const SizedBox( width: 10, ), Expanded( child: Text( widget.title, style: const TextStyle( fontSize: 18, fontWeight: FontWeight.w400), maxLines: 2, overflow: TextOverflow.ellipsis, ), ), ], ), const SizedBox( height: 20, ), const Text( 'See Other Videos', style: TextStyle(fontSize: 18, fontWeight: FontWeight.w500), ), const SizedBox( height: 15, ), FutureBuilder<List<Video>>( future: YouTubeApiService().getVideos(), builder: (context, snapshot) { if (snapshot.connectionState == ConnectionState.waiting) { return Center( child: CircularProgressIndicator(), ); } else if (snapshot.hasData) { final videos = snapshot.data!; return ListView.builder( padding: EdgeInsets.zero, shrinkWrap: true, physics: const NeverScrollableScrollPhysics(), itemCount: videos.length, itemBuilder: (context, index) { final video = videos[index]; return Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start, children: [ InkWell( onTap: () => { Navigator.push( context, MaterialPageRoute( builder: (context) => Detail( videoId: video.id, title: video.title, ), ), ) }, child: ListTile( contentPadding: EdgeInsets.zero, leading: Image.network( video.thumbnail, fit: BoxFit.cover, width: 120, ), title: Text( video.title, maxLines: 2, overflow: TextOverflow.ellipsis, ), ), ), const SizedBox( height: 8, ), ], ); }, ); } else if (snapshot.hasError) { return Center( child: Text('Error: ${snapshot.error}'), ); } else { return Center( child: Text('Failed to load videos'), ); } }, ), ], ), ) ], ), ); } }


7. Buat file main.dart di dalam folder lib. Ikuti script di bawah ini.



import 'package:flutter/material.dart'; import 'youtube_api_service.dart'; import 'detail.dart'; import 'dart:convert'; import 'package:http/http.dart' as http; import 'video.dart'; void main() { runApp(MyApp()); } class MyApp extends StatefulWidget { @override State<MyApp> createState() => _MyAppState(); } class _MyAppState extends State<MyApp> { @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar( title: Text('YouTube Videos'), ), body: FutureBuilder<List<Video>>( future: YouTubeApiService().getVideos(), builder: (context, snapshot) { if (snapshot.connectionState == ConnectionState.waiting) { return Center( child: CircularProgressIndicator(), ); } else if (snapshot.hasData) { final videos = snapshot.data!; return ListView.builder( itemCount: videos.length, itemBuilder: (context, index) { final video = videos[index]; return InkWell( onTap: () { Navigator.push( context, MaterialPageRoute( builder: (context) => Detail( videoId: video.id, title: video.title, ), ), ); }, child: Container( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Image.network( video.thumbnail, width: double.infinity, height: 160, fit: BoxFit.cover, ), const SizedBox( height: 5, ), Padding( padding: EdgeInsets.all(8), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Container( width: 45, height: 45, decoration: const BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(20)), image: DecorationImage( fit: BoxFit.cover, image: NetworkImage( 'https://cdn.pixabay.com/photo/2016/11/18/23/38/child-1837375_640.png', ), ), ), ), const SizedBox( width: 10, ), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( video.title, style: const TextStyle( fontSize: 16, ), maxLines: 2, overflow: TextOverflow.ellipsis, ), SizedBox(height: 5,), Text( 'Channel : '+video.channelTitle, style: const TextStyle( fontSize: 12, ), maxLines: 2, overflow: TextOverflow.ellipsis, ), ], ), ), ], ), ), SizedBox(height: 10,) ], ), ), ); }, ); } else if (snapshot.hasError) { return Center( child: Text('Error: ${snapshot.error}'), ); } else { return Center( child: Text('Failed to load videos'), ); } }, ), ), ); } }


Semua step sudah kita kerjakan, saatnya melakukan uji coba. Silahkan jalankan emulator dan jika berhasil maka tampilannya akan tampak seperti gambar di bawah ini.

Cara Menampilkan Video Youtube dari API di Flutter      Cara Menampilkan Video Youtube dari API di Flutter



Sekian tutorial singkat cara menampilkan video youtube dari youtube api di flutter. Semoga turial singkat ini bermanfaat. Jika ada pertanyaan, silahkan tanya langsung di kolom komentar di bawah ini. Sekian dan terima kasih.

No comments

Jangan lupa kasih komentar ya!. Karena komentar kalian membantu kami menyediakan informasi yang lebih baik

Tidak boleh menyertakan link atau promosi produk saat berkomentar. Komentar tidak akan ditampilkan. Hubungi 081271449921(WA) untuk dapat menyertakan link dan promosi