import 'package:flutter/material.dart'; import 'package:http/http.dart' as http; import 'dart:convert'; class FriendItem { final String name; final Widget place; FriendItem(this.name, this.place); Widget buildTitle(BuildContext context) { return Text(name); } Widget returnIcon(BuildContext context) { return place; } factory FriendItem.fromJson(Map json) { Widget tempPlace; if (json['location'] == 'home') { tempPlace = Icon(Icons.home); } else if (json['location'] == 'work') { tempPlace = Icon(Icons.business_center); } else { tempPlace = Icon(Icons.visibility_off); } return FriendItem(json['username'], tempPlace); } } class ListViewController extends StatefulWidget { ListViewController({ Key? key, }) : super(key: key); @override State createState() => _ListViewControllerState(); } class _ListViewControllerState extends State { var friends = []; @override void initState() { refreshFriends(); super.initState(); } Future refreshFriends() async { Uri sampleFriendsURI = Uri.parse('https://chiseled-spotted-individual.glitch.me/rand'); //https://glitch.com/edit/#!/chiseled-spotted-individual final response = await http.get(sampleFriendsURI); var data = json.decode(response.body); friends = []; var _friendsTemp = []; for (var i = 0; i < data.length; i++) { _friendsTemp.add(FriendItem.fromJson(data[i])); } setState(() { friends = _friendsTemp; }); } @override Widget build(BuildContext context) { return Expanded( child: RefreshIndicator( onRefresh: refreshFriends, child: ListView.builder( itemCount: friends.length, itemBuilder: (context, index) { return ListTile( leading: friends[index].place, title: friends[index].buildTitle(context), ); }, ), ), ); } }