You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
126 lines
3.9 KiB
126 lines
3.9 KiB
import 'package:provider/provider.dart';
|
|
import 'package:teso/Classes/TesoUser.dart';
|
|
import 'package:teso/Pages/PageWidgets/Friends/friendTile.dart';
|
|
import 'package:teso/Pages/PageWidgets/Inbox/newMessageHeader.dart';
|
|
import 'package:teso/Pages/Sub_Pages/Notifications/ChatScreen.dart';
|
|
import 'package:teso/providers/pageAnimations.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:teso/Pages/PageWidgets/Friends/header.dart';
|
|
import 'package:shared_preferences/shared_preferences.dart';
|
|
import 'package:http/http.dart' as http;
|
|
import 'package:teso/providers/user_provider.dart';
|
|
import 'package:teso/util/consts.dart';
|
|
import 'dart:convert';
|
|
|
|
class NewMessage extends StatefulWidget {
|
|
@override
|
|
_NewMessageState createState() => _NewMessageState();
|
|
}
|
|
|
|
class _NewMessageState extends State<NewMessage> {
|
|
TextEditingController searchkey;
|
|
List<TesoUser> recipientMain = <TesoUser>[];
|
|
List<TesoUser> recipient;
|
|
SharedPreferences prefs;
|
|
|
|
void clearText() {
|
|
setState(() {
|
|
// searchkey.clear();
|
|
// recipient = recipientMain;
|
|
// recipient.sort((a, b) {
|
|
// return b.userID.compareTo(a.userID);
|
|
// });
|
|
});
|
|
}
|
|
|
|
@override
|
|
void initState() {
|
|
searchkey = new TextEditingController();
|
|
Provider.of<UserProvider>(context, listen: false).loadFriends();
|
|
super.initState();
|
|
}
|
|
|
|
Future<void> loadFriends() async {
|
|
prefs = await SharedPreferences.getInstance();
|
|
String token = prefs.getString("tokensTeso");
|
|
Map<String, String> requestHeaders = {
|
|
'Content-type': 'application/json',
|
|
'Authorization': token
|
|
};
|
|
var register = serverLocation + 'relationships/friends';
|
|
var client = await http.get(Uri.parse(register), headers: requestHeaders);
|
|
if (client.statusCode == 200) {
|
|
var people = jsonDecode(client.body);
|
|
recipientMain = List<TesoUser>.from(
|
|
people.map((model) => TesoUser.fromJSON(model)).toList());
|
|
}
|
|
|
|
recipient = recipientMain;
|
|
recipient.sort((a, b) {
|
|
return b.firstname.compareTo(a.firstname);
|
|
});
|
|
}
|
|
|
|
updateList(String name) {
|
|
setState(() {
|
|
recipient = recipientMain
|
|
.where((element) =>
|
|
element.username.toLowerCase().contains(name.toLowerCase()))
|
|
.toList();
|
|
recipient.sort((a, b) {
|
|
return b.firstname.compareTo(a.firstname);
|
|
});
|
|
});
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Scaffold(
|
|
appBar: PreferredSize(
|
|
preferredSize: Size.fromHeight(150),
|
|
child: Container(
|
|
margin: EdgeInsets.only(top: 30),
|
|
child: Column(children: [
|
|
buildNewHead(context, clearText, "New Message"),
|
|
buildFriendsHeader(context, searchkey, updateList),
|
|
]),
|
|
),
|
|
),
|
|
body: Consumer<UserProvider>(
|
|
builder: (context, value, child) {
|
|
if (value.friends == null) {
|
|
return Center(
|
|
child: CircularProgressIndicator(
|
|
valueColor: AlwaysStoppedAnimation<Color>(
|
|
Theme.of(context).primaryColor),
|
|
),
|
|
);
|
|
} else {
|
|
if (recipientMain.length == 0) {
|
|
recipientMain = value.friends;
|
|
recipient = value.friends;
|
|
}
|
|
recipient.sort((a, b) {
|
|
return b.firstname.compareTo(a.firstname);
|
|
});
|
|
return ListView.builder(
|
|
itemCount: recipient.length,
|
|
itemBuilder: (context, int index) {
|
|
return InkWell(
|
|
onTap: () => Navigator.pushReplacement(
|
|
context,
|
|
PageTransition(
|
|
child: ChatScreen(user: recipient.elementAt(index)),
|
|
type: PageTransitionType.fade,
|
|
),
|
|
),
|
|
child: buildFriend(context, recipient.elementAt(index)),
|
|
);
|
|
},
|
|
);
|
|
}
|
|
},
|
|
),
|
|
);
|
|
}
|
|
}
|
|
|