import 'package:flutter/material.dart'; import 'dart:async'; import 'dart:convert'; import 'package:http/http.dart' as http; import 'package:get/get.dart'; class Schedule extends StatelessWidget { @override Widget build(BuildContext context) { return DefaultTabController( length: 2, child: Scaffold( appBar: AppBar( flexibleSpace: new Column( mainAxisAlignment: MainAxisAlignment.end, children: [ new TabBar( tabs: [ new Tab( text: "2021-05-29", ), new Tab( text: "2021-05-30", ), ], ), ], ), ), body: TabBarView( children: [ Icon(Icons.directions_car), Icon(Icons.directions_transit), ], ), ), ); } } class ScheduleItem { final String time; final String name; final List speakers; final String lang; ScheduleItem( {required this.time, required this.name, required this.speakers, required this.lang}); factory ScheduleItem.fromJson(Map json) { return ScheduleItem( time: json['time'], name: json['name'], speakers: json['speakers'], lang: json['lang'], ); } } class ScheduleView extends StatelessWidget { @override Widget build(BuildContext context) { return FutureBuilder>( future: _fetchSchedule(), builder: (context, snapshot) { if (snapshot.hasData) { List? data = snapshot.data; return _scheduleListView(data); } else if (snapshot.hasError) { return Text("${snapshot.error}"); } return Container( child: Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [CircularProgressIndicator()])); }, ); } Future> _fetchSchedule() async { final videosFrom2020API = 'https://video.ozgurkon.org/api/v1/video-channels/ozgurkon2020/videos'; final response = await http.get(Uri.parse(videosFrom2020API)); if (response.statusCode == 200) { Map jsonResponse = json.decode(response.body); List scheduleList = jsonResponse['data']; return scheduleList.map((job) => new ScheduleItem.fromJson(job)).toList(); } else { throw Exception('Failed to load schedule from API'); } } ListView _scheduleListView(data) { return ListView.builder( itemCount: data.length, itemBuilder: (context, index) { return _tile(data[index].uuid, data[index].name, data[index].speaker, data[index].thumbnail, data[index].lang); }); } ListTile _tile(String uuid, String title, String subtitle, String thumbnail, String lang) => ListTile( title: Text(title, style: TextStyle( fontWeight: FontWeight.w500, fontSize: 20, )), subtitle: Text(subtitle), leading: Image.network('https://video.ozgurkon.org/' + thumbnail), trailing: lang == "tr" ? Text("🇹🇷") : Text('🇬🇧'), onTap: () { print(uuid); Get.toNamed('/video/$uuid'); }, ); }