2023-04-29 15:26:12 -04:00
|
|
|
import 'package:contacts_plus/apis/friend_api.dart';
|
|
|
|
import 'package:contacts_plus/main.dart';
|
|
|
|
import 'package:contacts_plus/models/friend.dart';
|
|
|
|
import 'package:contacts_plus/widgets/messages.dart';
|
2023-04-29 13:18:46 -04:00
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
|
|
|
|
class HomeScreen extends StatefulWidget {
|
|
|
|
const HomeScreen({super.key});
|
|
|
|
|
|
|
|
@override
|
|
|
|
State<HomeScreen> createState() => _HomeScreenState();
|
|
|
|
}
|
|
|
|
|
|
|
|
class _HomeScreenState extends State<HomeScreen> {
|
|
|
|
|
2023-04-29 15:26:12 -04:00
|
|
|
late final FriendApi _friendsApi;
|
|
|
|
Future<List<Friend>>? _friendsFuture;
|
|
|
|
|
|
|
|
@override
|
|
|
|
void initState() {
|
|
|
|
super.initState();
|
|
|
|
_friendsApi = FriendApi(apiClient: AuthenticatedClient
|
|
|
|
.staticOf(context)
|
|
|
|
.client);
|
|
|
|
_refreshFriendsList();
|
|
|
|
}
|
|
|
|
|
|
|
|
void _refreshFriendsList() {
|
|
|
|
_friendsFuture = _friendsApi.getFriendsList().then((Iterable<Friend> value) =>
|
|
|
|
value.toList()
|
|
|
|
..sort((a, b) {
|
|
|
|
if (a.userStatus.onlineStatus == b.userStatus.onlineStatus) {
|
|
|
|
return a.userStatus.lastStatusChange.compareTo(b.userStatus.lastStatusChange);
|
|
|
|
} else {
|
|
|
|
if (a.userStatus.onlineStatus == OnlineStatus.online) {
|
|
|
|
return -1;
|
|
|
|
} else {
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
),
|
|
|
|
);
|
|
|
|
}
|
2023-04-29 13:18:46 -04:00
|
|
|
|
|
|
|
@override
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
return Scaffold(
|
|
|
|
appBar: AppBar(
|
|
|
|
title: const Text("Contacts+"),
|
|
|
|
),
|
2023-04-29 15:26:12 -04:00
|
|
|
body: RefreshIndicator(
|
|
|
|
onRefresh: () async {
|
|
|
|
_refreshFriendsList();
|
|
|
|
await _friendsFuture;
|
|
|
|
},
|
|
|
|
child: FutureBuilder(
|
|
|
|
future: _friendsFuture,
|
|
|
|
builder: (context, snapshot) {
|
|
|
|
if (snapshot.hasData) {
|
|
|
|
final data = snapshot.data as Iterable<Friend>;
|
|
|
|
return ListView.builder(
|
|
|
|
itemCount: data.length,
|
|
|
|
itemBuilder: (context, index) {
|
|
|
|
final entry = data.elementAt(index);
|
|
|
|
return ListTile(
|
|
|
|
title: Text(entry.username),
|
|
|
|
subtitle: Text(entry.userStatus.onlineStatus.name),
|
|
|
|
onTap: () {
|
|
|
|
Navigator.push(context, MaterialPageRoute(builder: (context) => Messages(friend: entry)));
|
|
|
|
},
|
|
|
|
);
|
|
|
|
},
|
|
|
|
);
|
|
|
|
} else if (snapshot.hasError) {
|
|
|
|
return Center(
|
|
|
|
child: Padding(
|
|
|
|
padding: const EdgeInsets.all(64),
|
|
|
|
child: Text(
|
|
|
|
"Something went wrong: ${snapshot.error}",
|
|
|
|
softWrap: true,
|
|
|
|
style: Theme
|
|
|
|
.of(context)
|
|
|
|
.textTheme
|
|
|
|
.labelMedium,
|
|
|
|
),
|
|
|
|
),
|
|
|
|
);
|
|
|
|
} else {
|
|
|
|
return const LinearProgressIndicator();
|
|
|
|
}
|
2023-04-29 13:18:46 -04:00
|
|
|
}
|
2023-04-29 15:26:12 -04:00
|
|
|
),
|
2023-04-29 13:18:46 -04:00
|
|
|
),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|