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

//import 'dart:io';
//import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
import '../matrix/cs-r0.5.0';
class RoomPage extends StatefulWidget {
final String roomid;
final String roomname;
final SharedPreferences settings;
RoomPage({Key key, @required this.settings, @required this.roomid, @required this.roomname}) : super(key: key);
@override
_RoomPageState createState() => _RoomPageState();
}
class _RoomPageState extends State<RoomPage> {
List<Widget> _messages = List<Widget>();
final _inputController = TextEditingController();
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 = "";
_updateMessages();
}
void _updateMessages() {
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) {
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;
});
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.roomname),
actions: <Widget>[
IconButton(
icon: Icon(Icons.autorenew, color: Colors.purple),
onPressed: () {
_updateMessages();
}
)
]
),
body: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Expanded(
child: ListView(
children: _messages
),
),
Row(
children: [
Expanded(
child: TextField(
onSubmitted: _sendMessage,
controller: _inputController,
minLines: 1,
maxLines: 4
),
),
IconButton(
icon: Icon(Icons.send),
color: Colors.pink,
onPressed: () { _sendMessage(_inputController.text); }
),
]
),
],
),
);
}
}