//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 { List _messages = List(); 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 messages = [ ]; for (var neko in cont) { if (neko["type"] == "m.room.message") { if (neko["content"]["msgtype"] == "m.text") { messages.add( ListTile( title: Column( children: [ Row( children: [ Text(neko["sender"], style: TextStyle(fontWeight: FontWeight.bold), textAlign: TextAlign.start), Spacer()]), Row( children: [ Expanded(child: Text(neko["content"]["body"], textAlign: TextAlign.start))]), ] ), ), ); } else if (neko["content"]["msgtype"] == "m.notice") { messages.add( ListTile( title: Column( children: [ 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: [ Row( children: [ Text(neko["sender"], style: TextStyle(fontStyle: FontStyle.italic, fontWeight: FontWeight.bold), textAlign: TextAlign.left) ]), Row( children: [ 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: [ IconButton( icon: Icon(Icons.autorenew, color: Colors.purple), onPressed: () { _updateMessages(); } ) ] ), body: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ 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); } ), ] ), ], ), ); } }