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 { Map roomMap = Map(); 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 roomEntries(roomMap) { List newWidgets = new List(); 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: [ IconButton( icon: Icon(Icons.link_off), tooltip: "Logout", onPressed: _logout, ), ], ), body: Center( child: ListView( padding: EdgeInsets.all(8.0), children: roomEntries(roomMap) ), ), ); } }