164 lines
5.1 KiB
Dart
164 lines
5.1 KiB
Dart
import 'dart:convert';
|
|
|
|
import 'package:flutter/foundation.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:http/http.dart' as http;
|
|
import 'package:marianum_mobile/widget/loadingPacket.dart';
|
|
import 'package:provider/provider.dart';
|
|
|
|
import '../../../dataOld/incommingPackets/talkContactsPacket.dart';
|
|
import '../../../widget/loadingSpinner.dart';
|
|
import 'chatView.dart';
|
|
|
|
class Talk extends StatefulWidget {
|
|
const Talk({Key? key}) : super(key: key);
|
|
|
|
@override
|
|
State<Talk> createState() => _TalkState();
|
|
}
|
|
|
|
class _TalkState extends State<Talk> {
|
|
// List<ChatData> chats = List<ChatData>.empty(growable: true);
|
|
//
|
|
// Future<List<ChatData>> getChats() async {
|
|
// var url = Uri.https("***REMOVED***:***REMOVED***@mhsl.eu", "marianum/app/middleware/chat.php");
|
|
// var response = await http.get(
|
|
// url,
|
|
// headers: (
|
|
// {
|
|
// "Accept": "application/json",
|
|
// "OCS-APIRequest": "true",
|
|
// }
|
|
// ),
|
|
// );
|
|
//
|
|
// return compute(parseChats, response.body);
|
|
// }
|
|
|
|
|
|
@override
|
|
void initState() {
|
|
Provider.of<TalkContactsPaket>(context, listen: false).invoke();
|
|
//TalkContactsAskPacket().send();
|
|
super.initState();
|
|
// Future.delayed(Duration.zero).then((context) => updateChats());
|
|
// Provider.of<AccountModel>(context, listen: false).channel.sink.add("chat");
|
|
|
|
}
|
|
|
|
void updateChats() {
|
|
// var chats = getChats();
|
|
//
|
|
// showDialog(
|
|
// context: context,
|
|
// barrierDismissible: false,
|
|
// builder: (BuildContext context) {
|
|
// return const LoadingSpinner();
|
|
// }
|
|
// );
|
|
//
|
|
// chats.then((value) =>
|
|
// setState(() {
|
|
// Navigator.pop(context);
|
|
// this.chats.clear();
|
|
// this.chats = value;
|
|
// })
|
|
// );
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
// List<ListTile> chats = List<ListTile>.empty(growable: true);
|
|
//
|
|
// for (var element in this.chats) {
|
|
// chats.add(
|
|
// ListTile(
|
|
// leading: element.type == 1 ? CircleAvatar(
|
|
// backgroundColor: Colors.grey,
|
|
// foregroundImage: Image.network(element.avatar).image,
|
|
// ) : const Icon(Icons.group),
|
|
// title: Text(element.name),
|
|
// subtitle: Text(
|
|
// "${element.lastMessageAuthor}: ${element.lastMessage.replaceAll("\n", "")}",
|
|
// overflow: TextOverflow.ellipsis,
|
|
// ),
|
|
// onTap: () {
|
|
// Navigator.push(context, MaterialPageRoute(builder: (builder) => const ChatView()));
|
|
// },
|
|
// trailing: element.unreadMessages > 0 ? const Icon(Icons.mark_chat_unread) : Text(element.lastActivity),
|
|
// )
|
|
// );
|
|
// }
|
|
//
|
|
// return ListView(
|
|
// children: chats,
|
|
// );
|
|
|
|
return Consumer<TalkContactsPaket>(
|
|
builder: (context, data, child) {
|
|
List<ListTile> chats = List<ListTile>.empty(growable: true);
|
|
|
|
for (var element in data.contacts) {
|
|
chats.add(ListTile(
|
|
title: Text(element.name),
|
|
subtitle: Text("${element.lastTime}: ${element.lastMessage}".replaceAll("\n", " "), overflow: TextOverflow.ellipsis),
|
|
trailing: element.unreadMessages ? const Icon(Icons.new_releases_outlined) : null,
|
|
leading: CircleAvatar(
|
|
foregroundImage: element.isGroup ? null : Image.network(element.profilePicture).image,
|
|
backgroundColor: Theme.of(context).primaryColor,
|
|
foregroundColor: Colors.white,
|
|
child: element.isGroup ? const Icon(Icons.group) : const Icon(Icons.person),
|
|
),
|
|
onTap: () {
|
|
Navigator.of(context).push(MaterialPageRoute(builder: (context) {
|
|
return ChatView(
|
|
userToken: element.userToken,
|
|
);
|
|
}));
|
|
},
|
|
));
|
|
}
|
|
|
|
return LoadingPacket(packet: data, child: ListView(children: chats));
|
|
},
|
|
);
|
|
}
|
|
}
|
|
|
|
//
|
|
// List<ChatData> parseChats(String json) {
|
|
// final parsed = jsonDecode(json).cast<Map<String, dynamic>>();
|
|
// return parsed.map<ChatData>((a) => ChatData.fromJson(a)).toList();
|
|
// }
|
|
//
|
|
// class ChatData {
|
|
// final String name;
|
|
// final String lastMessage;
|
|
// final String lastMessageAuthor;
|
|
// final String avatar;
|
|
// final int type;
|
|
// final String lastActivity;
|
|
// final int unreadMessages;
|
|
//
|
|
// const ChatData({
|
|
// required this.name,
|
|
// required this.lastMessage,
|
|
// required this.lastMessageAuthor,
|
|
// required this.avatar,
|
|
// required this.type,
|
|
// required this.lastActivity,
|
|
// required this.unreadMessages,
|
|
// });
|
|
//
|
|
// factory ChatData.fromJson(Map<String, dynamic> json) {
|
|
// return ChatData(
|
|
// name: json['name'] as String,
|
|
// lastMessage: json['last_message'] as String,
|
|
// lastMessageAuthor: json['last_message_author'] as String,
|
|
// avatar: json['avatar'] as String,
|
|
// type: json['type'] as int,
|
|
// lastActivity: json['lastActivity'] as String,
|
|
// unreadMessages: json['unreadMessages'] as int,
|
|
// );
|
|
// }
|
|
// } |