This repository has been archived on 2020-05-24. You can view files and clone it, but cannot push or open issues or pull requests.
hermes/lib/page/room

131 lines
4.0 KiB
Plaintext
Raw Permalink Normal View History

2019-04-24 11:09:23 +00:00
//import 'dart:io';
//import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
2019-07-30 15:01:51 +00:00
import '../matrix/cs-r0.5.0';
2019-04-24 11:09:23 +00:00
2019-07-30 15:01:51 +00:00
class RoomPage extends StatefulWidget {
2019-04-24 11:09:23 +00:00
final String roomid;
final String roomname;
final SharedPreferences settings;
RoomPage({Key key, @required this.settings, @required this.roomid, @required this.roomname}) : super(key: key);
2019-07-30 15:01:51 +00:00
@override
_RoomPageState createState() => _RoomPageState();
}
class _RoomPageState extends State<RoomPage> {
List<Widget> _messages = List<Widget>();
final _inputController = TextEditingController();
2019-07-30 15:01:51 +00:00
void initState() {
_messages = [ ];
_updateMessages();
super.initState();
}
void _sendMessage(@required String str) {
var set = widget.settings;
Matrix.sendMessage(uri: Uri.parse(set.getString("home_server")), accessToken: set.getString("access_token"), roomid: widget.roomid, message: str);
_inputController.text = "";
2019-11-07 18:02:56 +00:00
_updateMessages();
}
void _updateMessages() {
2019-07-30 15:01:51 +00:00
var set = widget.settings;
var cont = Matrix.roomsync(uri: Uri.parse(set.getString("home_server")), roomid: widget.roomid, accessToken: set.getString("access_token")).then((cont) {
2019-11-07 18:02:56 +00:00
List<Widget> messages = [ ];
for (var neko in cont) {
if (neko["type"] == "m.room.message") {
if (neko["content"]["msgtype"] == "m.text") {
messages.add(
ListTile(
title: Column(
children: <Widget>[
Row( children: <Widget>[ Text(neko["sender"], style: TextStyle(fontWeight: FontWeight.bold), textAlign: TextAlign.start), Spacer()]),
Row( children: <Widget>[ Expanded(child: Text(neko["content"]["body"], textAlign: TextAlign.start))]),
]
),
),
);
} else if (neko["content"]["msgtype"] == "m.notice") {
messages.add(
ListTile(
title: Column(
children: <Widget>[
Text(neko["sender"], textAlign: TextAlign.center),
Text(neko["content"]["body"], textAlign: TextAlign.center),
]
),
),
);
} else if (neko["content"]["msgtype"] == "m.emote") {
messages.add(
ListTile(
title: Column(
children: <Widget>[
Row( children: <Widget> [
Text(neko["sender"], style: TextStyle(fontStyle: FontStyle.italic, fontWeight: FontWeight.bold), textAlign: TextAlign.left)
]),
Row( children: <Widget> [
Text(neko["content"]["body"], style: TextStyle(fontStyle: FontStyle.italic), textAlign: TextAlign.left),
]),
]
),
),
);
}
}
}
setState(() {
_messages= messages;
});
});
2019-07-30 15:01:51 +00:00
}
2019-04-24 11:09:23 +00:00
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
2019-07-30 15:01:51 +00:00
title: Text(widget.roomname),
actions: <Widget>[
IconButton(
icon: Icon(Icons.autorenew, color: Colors.purple),
onPressed: () {
_updateMessages();
}
)
]
2019-04-24 11:09:23 +00:00
),
body: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Expanded(
2019-07-30 23:29:36 +00:00
child: ListView(
children: _messages
),
),
2019-11-07 18:02:56 +00:00
Row(
children: [
Expanded(
child: TextField(
2019-11-07 18:02:56 +00:00
onSubmitted: _sendMessage,
controller: _inputController,
minLines: 1,
maxLines: 4
2019-11-07 18:02:56 +00:00
),
),
IconButton(
2019-11-07 18:02:56 +00:00
icon: Icon(Icons.send),
color: Colors.pink,
onPressed: () { _sendMessage(_inputController.text); }
),
2019-11-07 18:02:56 +00:00
]
),
],
),
2019-04-24 11:09:23 +00:00
);
}
}