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/roomlist

101 lines
2.7 KiB
Plaintext

import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'login';
import '../matrix/cs-r0.5.0';
import 'room';
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, @required this.settings}) : super(key: key);
final SharedPreferences settings;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
Map<String, String> roomMap = Map<String, String>();
void _updateRooms() {
Matrix.joinedRooms(
widget.settings.getString("home_server"),
widget.settings.getString("access_token")
).then((r) {
for (String roomid in r) {
Matrix.roomAtribute(
widget.settings.getString("home_server"),
widget.settings.getString("access_token"),
roomid,
"name",
"name",
).then((roomname) {
setState(() {
roomMap[roomid] = roomname;
});
});
}
});
}
void _logout() {
var set = widget.settings;
set.setBool("logged_in", false);
// TODO Actually invalidate access_token
Matrix.logout(uri: Uri.parse(set.getString("home_server")) , accessToken: set.getString("access_token"));
set.setString("access_token", "");
Navigator.pushReplacement(
context, MaterialPageRoute(builder: (BuildContext context) => LoginPage(settings: widget.settings)));
}
void initState() {
_updateRooms();
print(Matrix.supportedVersions(widget.settings.getString("home_server")));
Matrix.sync(uri: Uri.parse(widget.settings.getString("home_server")), accessToken: widget.settings.getString("access_token"));
super.initState();
}
List<Widget> roomEntries(roomMap) {
List<Widget> newWidgets = new List<Widget>();
roomMap.forEach((roomid, roomname) {
if (roomname == null || roomname == "") { roomname = roomid; }
newWidgets.add(
ListTile(
title: Text((roomname)),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => RoomPage(settings: widget.settings, roomid: roomid, roomname: roomname),
),
);
}
)
);
});
return newWidgets;
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Hermes"),
actions: <Widget>[
IconButton(
icon: Icon(Icons.link_off),
tooltip: "Logout",
onPressed: _logout,
),
],
),
body: Center(
child: ListView(
padding: EdgeInsets.all(8.0),
children: roomEntries(roomMap)
),
),
);
}
}