131 lines
4.0 KiB
Plaintext
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); }
|
|
),
|
|
]
|
|
),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
}
|