more refactor

This commit is contained in:
Christien Rioux 2024-02-13 22:03:26 -05:00
parent 45ab494969
commit 9219e1307e
19 changed files with 181 additions and 467 deletions

View file

@ -7,6 +7,7 @@ import '../../../chat/chat.dart';
import '../../../chat_list/chat_list.dart';
import '../../../contact_invitation/contact_invitation.dart';
import '../../../contacts/contacts.dart';
import '../../../router/router.dart';
import '../../../tools/tools.dart';
class HomeAccountReadyShell extends StatefulWidget {
@ -18,58 +19,28 @@ class HomeAccountReadyShell extends StatefulWidget {
final Widget child;
}
class HomeAccountReadyShellState extends State<HomeAccountReadyShell>
with TickerProviderStateMixin {
class HomeAccountReadyShellState extends State<HomeAccountReadyShell> {
//
@override
void initState() {
super.initState();
}
// xxx figure out how to do this switch
// Widget buildWithLogin(BuildContext context) {
// final activeUserLogin = context.watch<ActiveUserLoginCubit>().state;
// if (activeUserLogin == null) {
// // If no logged in user is active, show the loading panel
// return const HomeNoActive();
// }
// final accountInfo = AccountRepository.instance
// .getAccountInfo(accountMasterRecordKey: activeUserLogin)!;
// switch (accountInfo.status) {
// case AccountInfoStatus.noAccount:
// return const HomeAccountMissing();
// case AccountInfoStatus.accountInvalid:
// return const HomeAccountInvalid();
// case AccountInfoStatus.accountLocked:
// return const HomeAccountLocked();
// case AccountInfoStatus.accountReady:
// return Provider<ActiveAccountInfo>.value(
// value: accountInfo.activeAccountInfo!,
// child: BlocProvider(
// create: (context) => AccountRecordCubit(
// record: accountInfo.activeAccountInfo!.accountRecord),
// child: const HomeAccountReady()));
// }
// }
@override
Widget build(BuildContext context) {
// These must be valid already before making this widget,
// per the ShellRoute above it
final activeUserLogin = context.read<ActiveUserLoginCubit>().state!;
final accountInfo = AccountRepository.instance
.getAccountInfo(accountMasterRecordKey: activeUserLogin)!;
final activeLocalAccount = context.read<ActiveLocalAccountCubit>().state!;
final accountInfo =
AccountRepository.instance.getAccountInfo(activeLocalAccount);
final activeAccountInfo = accountInfo.activeAccountInfo!;
final routerCubit = context.read<RouterCubit>();
return Provider<ActiveAccountInfo>.value(
value: activeAccountInfo,
child: BlocProvider(
create: (context) => AccountRecordCubit(
record: accountInfo.activeAccountInfo!.accountRecord),
create: (context) =>
AccountRecordCubit(record: activeAccountInfo.accountRecord),
child: Builder(builder: (context) {
final account =
context.watch<AccountRecordCubit>().state.data?.value;
@ -92,7 +63,9 @@ class HomeAccountReadyShellState extends State<HomeAccountReadyShell>
BlocProvider(
create: (context) => ActiveConversationsCubit(
activeAccountInfo: activeAccountInfo)),
BlocProvider(create: (context) => ActiveChatCubit(null))
BlocProvider(
create: (context) =>
ActiveChatCubit(null, routerCubit.setHasActiveChat))
], child: widget.child);
})));
}

View file

@ -1,6 +1,13 @@
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:provider/provider.dart';
import '../../account_manager/account_manager.dart';
import '../../theme/theme.dart';
import 'home_account_invalid.dart';
import 'home_account_locked.dart';
import 'home_account_missing.dart';
import 'home_no_active.dart';
class HomeShell extends StatefulWidget {
const HomeShell({required this.child, super.key});
@ -25,6 +32,34 @@ class HomeShellState extends State<HomeShell> {
super.dispose();
}
Widget buildWithLogin(BuildContext context, Widget child) {
final activeLocalAccount = context.watch<ActiveLocalAccountCubit>().state;
if (activeLocalAccount == null) {
// If no logged in user is active, show the loading panel
return const HomeNoActive();
}
final accountInfo =
AccountRepository.instance.getAccountInfo(activeLocalAccount);
switch (accountInfo.status) {
case AccountInfoStatus.noAccount:
return const HomeAccountMissing();
case AccountInfoStatus.accountInvalid:
return const HomeAccountInvalid();
case AccountInfoStatus.accountLocked:
return const HomeAccountLocked();
case AccountInfoStatus.accountReady:
return Provider<ActiveAccountInfo>.value(
value: accountInfo.activeAccountInfo!,
child: BlocProvider(
create: (context) => AccountRecordCubit(
record: accountInfo.activeAccountInfo!.accountRecord),
child: child));
}
}
@override
Widget build(BuildContext context) {
final theme = Theme.of(context);
@ -37,6 +72,6 @@ class HomeShellState extends State<HomeShell> {
child: DecoratedBox(
decoration: BoxDecoration(
color: scale.primaryScale.activeElementBackground),
child: widget.child)));
child: buildWithLogin(context, widget.child))));
}
}