Try to fix error handling on sync
This commit is contained in:
parent
3cfbe7c078
commit
5154e0fc6b
4 changed files with 35 additions and 18 deletions
|
|
@ -1,11 +1,17 @@
|
||||||
import "package:flutter_riverpod/flutter_riverpod.dart";
|
import "package:flutter_riverpod/flutter_riverpod.dart";
|
||||||
|
import "package:nexus/main.dart";
|
||||||
import "package:nexus/models/sync_status.dart";
|
import "package:nexus/models/sync_status.dart";
|
||||||
|
|
||||||
class SyncStatusController extends Notifier<SyncStatus?> {
|
class SyncStatusController extends Notifier<SyncStatus?> {
|
||||||
@override
|
@override
|
||||||
Null build() => null;
|
Null build() => null;
|
||||||
|
|
||||||
void set(SyncStatus newStatus) => state = newStatus;
|
void set(SyncStatus newStatus) {
|
||||||
|
if (newStatus.type == SyncStatusType.permanentlyFailed) {
|
||||||
|
showError(newStatus.error ?? "Syncing failed");
|
||||||
|
}
|
||||||
|
state = newStatus;
|
||||||
|
}
|
||||||
|
|
||||||
static final provider = NotifierProvider<SyncStatusController, SyncStatus?>(
|
static final provider = NotifierProvider<SyncStatusController, SyncStatus?>(
|
||||||
SyncStatusController.new,
|
SyncStatusController.new,
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@ import "package:flutter_riverpod/flutter_riverpod.dart";
|
||||||
import "package:nexus/controllers/client_controller.dart";
|
import "package:nexus/controllers/client_controller.dart";
|
||||||
import "package:nexus/controllers/client_state_controller.dart";
|
import "package:nexus/controllers/client_state_controller.dart";
|
||||||
import "package:nexus/controllers/header_controller.dart";
|
import "package:nexus/controllers/header_controller.dart";
|
||||||
import "package:nexus/controllers/init_complete_controller.dart";
|
|
||||||
import "package:nexus/controllers/multi_provider_controller.dart";
|
import "package:nexus/controllers/multi_provider_controller.dart";
|
||||||
import "package:nexus/controllers/shared_prefs_controller.dart";
|
import "package:nexus/controllers/shared_prefs_controller.dart";
|
||||||
import "package:nexus/helpers/extensions/better_when.dart";
|
import "package:nexus/helpers/extensions/better_when.dart";
|
||||||
|
|
@ -127,9 +126,7 @@ class App extends StatelessWidget {
|
||||||
} else if (!clientState.isVerified) {
|
} else if (!clientState.isVerified) {
|
||||||
return VerifyPage();
|
return VerifyPage();
|
||||||
} else {
|
} else {
|
||||||
return ref.watch(InitCompleteController.provider)
|
return ChatPage();
|
||||||
? ChatPage()
|
|
||||||
: Loading();
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
|
|
||||||
|
|
@ -14,5 +14,5 @@ abstract class SyncStatus with _$SyncStatus {
|
||||||
_$SyncStatusFromJson(json);
|
_$SyncStatusFromJson(json);
|
||||||
}
|
}
|
||||||
|
|
||||||
@JsonEnum(fieldRename: FieldRename.snake)
|
@JsonEnum(fieldRename: FieldRename.kebab)
|
||||||
enum SyncStatusType { ok, waiting, erroring, permanentlyFailed }
|
enum SyncStatusType { ok, waiting, erroring, permanentlyFailed }
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,10 @@
|
||||||
import "package:flutter/material.dart";
|
import "package:flutter/material.dart";
|
||||||
import "package:flutter_riverpod/flutter_riverpod.dart";
|
import "package:flutter_riverpod/flutter_riverpod.dart";
|
||||||
|
import "package:nexus/controllers/init_complete_controller.dart";
|
||||||
|
import "package:nexus/widgets/appbar.dart";
|
||||||
import "package:nexus/widgets/chat_page/sidebar.dart";
|
import "package:nexus/widgets/chat_page/sidebar.dart";
|
||||||
import "package:nexus/widgets/chat_page/room_chat.dart";
|
import "package:nexus/widgets/chat_page/room_chat.dart";
|
||||||
|
import "package:nexus/widgets/loading.dart";
|
||||||
|
|
||||||
class ChatPage extends ConsumerWidget {
|
class ChatPage extends ConsumerWidget {
|
||||||
const ChatPage({super.key});
|
const ChatPage({super.key});
|
||||||
|
|
@ -11,22 +14,33 @@ class ChatPage extends ConsumerWidget {
|
||||||
builder: (context, constraints) {
|
builder: (context, constraints) {
|
||||||
final isDesktop = constraints.maxWidth > 650;
|
final isDesktop = constraints.maxWidth > 650;
|
||||||
final showMembersByDefault = constraints.maxWidth > 1000;
|
final showMembersByDefault = constraints.maxWidth > 1000;
|
||||||
|
final initComplete = ref.watch(InitCompleteController.provider);
|
||||||
|
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
body: Builder(
|
appBar: initComplete ? null : Appbar(),
|
||||||
builder: (context) => Row(
|
body: initComplete
|
||||||
children: [
|
? Builder(
|
||||||
if (isDesktop) Sidebar(isDesktop: isDesktop),
|
builder: (context) => Row(
|
||||||
Expanded(
|
children: [
|
||||||
child: RoomChat(
|
if (isDesktop) Sidebar(isDesktop: isDesktop),
|
||||||
isDesktop: isDesktop,
|
Expanded(
|
||||||
showMembersByDefault: showMembersByDefault,
|
child: RoomChat(
|
||||||
|
isDesktop: isDesktop,
|
||||||
|
showMembersByDefault: showMembersByDefault,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
: Center(
|
||||||
|
child: Column(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [Loading(), Text("Syncing...")],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
drawer: isDesktop || !initComplete
|
||||||
),
|
? null
|
||||||
),
|
: Sidebar(isDesktop: isDesktop),
|
||||||
drawer: isDesktop ? null : Sidebar(isDesktop: isDesktop),
|
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue