Brandon Presley
76411aa827
1. Logging in with saved credentials should just go straight to rooms page without flickering the login page 2. Rooms should be updated if an event fires for their names changing
100 lines
2.6 KiB
Dart
100 lines
2.6 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:matrix/matrix.dart';
|
|
import 'package:shared_preferences/shared_preferences.dart';
|
|
import 'package:zenith/rooms.dart';
|
|
import 'package:zenith/login.dart';
|
|
import 'package:provider/provider.dart';
|
|
import 'package:zenith/zenith_client_provider.dart';
|
|
|
|
void main() {
|
|
runApp(const MyApp());
|
|
}
|
|
|
|
class MyApp extends StatelessWidget {
|
|
const MyApp({super.key});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return ChangeNotifierProvider(
|
|
create: (context) => ZenithClientProvider(),
|
|
child: MaterialApp(
|
|
title: 'Zenith',
|
|
theme: ThemeData(
|
|
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
|
|
useMaterial3: true,
|
|
),
|
|
home: const MyHomePage(),
|
|
),
|
|
);
|
|
}
|
|
}
|
|
|
|
class MyHomePage extends StatefulWidget {
|
|
const MyHomePage({super.key});
|
|
|
|
@override
|
|
State<MyHomePage> createState() => _MyHomePageState();
|
|
}
|
|
|
|
class _MyHomePageState extends State<MyHomePage> {
|
|
bool showRooms = false;
|
|
String errorMessage = "";
|
|
|
|
void getCreds() async {
|
|
final prefs = await SharedPreferences.getInstance();
|
|
final homeserver = prefs.getString("homeserver");
|
|
final username = prefs.getString("username");
|
|
final password = prefs.getString("password");
|
|
|
|
if (homeserver == null || username == null || password == null) return;
|
|
|
|
if (!mounted) return;
|
|
final provider = Provider.of<ZenithClientProvider>(context, listen: false);
|
|
final client = Client("zenith");
|
|
provider.setClient(client);
|
|
setState(() {
|
|
showRooms = true;
|
|
});
|
|
|
|
try {
|
|
await client.checkHomeserver(Uri.parse(homeserver));
|
|
if (!client.isLogged())
|
|
await client.login(LoginType.mLoginPassword,
|
|
password: password,
|
|
identifier: AuthenticationUserIdentifier(user: username));
|
|
} catch (error) {
|
|
print(error);
|
|
setState(() {
|
|
errorMessage = error.toString();
|
|
});
|
|
}
|
|
}
|
|
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
getCreds();
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
if (errorMessage.isNotEmpty)
|
|
return Column(
|
|
children: [
|
|
ElevatedButton(
|
|
onPressed: () {
|
|
setState(() {
|
|
errorMessage = "";
|
|
});
|
|
},
|
|
child: const Text("Clear")),
|
|
ErrorWidget(errorMessage),
|
|
],
|
|
);
|
|
if (showRooms)
|
|
return const RoomsPage();
|
|
else
|
|
return const LoginPage();
|
|
}
|
|
}
|