mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2025-07-21 07:58:13 +00:00
127 lines
4.0 KiB
Dart
127 lines
4.0 KiB
Dart
import 'package:appflowy/generated/locale_keys.g.dart';
|
|
import 'package:appflowy/plugins/database/application/sync/database_sync_bloc.dart';
|
|
import 'package:appflowy/plugins/document/application/document_sync_bloc.dart';
|
|
import 'package:appflowy_backend/protobuf/flowy-database2/protobuf.dart';
|
|
import 'package:appflowy_backend/protobuf/flowy-document/entities.pb.dart';
|
|
import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
|
|
import 'package:easy_localization/easy_localization.dart';
|
|
import 'package:flowy_infra_ui/widget/flowy_tooltip.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
|
|
|
class DocumentSyncIndicator extends StatelessWidget {
|
|
const DocumentSyncIndicator({
|
|
super.key,
|
|
required this.view,
|
|
});
|
|
|
|
final ViewPB view;
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return BlocProvider(
|
|
create: (context) =>
|
|
DocumentSyncBloc(view: view)..add(const DocumentSyncEvent.initial()),
|
|
child: BlocBuilder<DocumentSyncBloc, DocumentSyncBlocState>(
|
|
builder: (context, state) {
|
|
// don't show indicator if user is local
|
|
if (!state.shouldShowIndicator) {
|
|
return const SizedBox.shrink();
|
|
}
|
|
final Color color;
|
|
final String hintText;
|
|
|
|
if (!state.isNetworkConnected) {
|
|
color = Colors.grey;
|
|
hintText = LocaleKeys.newSettings_syncState_noNetworkConnected.tr();
|
|
} else {
|
|
switch (state.syncState) {
|
|
case DocumentSyncState.SyncFinished:
|
|
color = Colors.green;
|
|
hintText = LocaleKeys.newSettings_syncState_synced.tr();
|
|
break;
|
|
case DocumentSyncState.Syncing:
|
|
case DocumentSyncState.InitSyncBegin:
|
|
color = Colors.yellow;
|
|
hintText = LocaleKeys.newSettings_syncState_syncing.tr();
|
|
break;
|
|
default:
|
|
return const SizedBox.shrink();
|
|
}
|
|
}
|
|
|
|
return FlowyTooltip(
|
|
message: hintText,
|
|
child: Container(
|
|
decoration: BoxDecoration(
|
|
shape: BoxShape.circle,
|
|
color: color,
|
|
),
|
|
width: 8,
|
|
height: 8,
|
|
),
|
|
);
|
|
},
|
|
),
|
|
);
|
|
}
|
|
}
|
|
|
|
class DatabaseSyncIndicator extends StatelessWidget {
|
|
const DatabaseSyncIndicator({
|
|
super.key,
|
|
required this.view,
|
|
});
|
|
|
|
final ViewPB view;
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return BlocProvider(
|
|
create: (context) =>
|
|
DatabaseSyncBloc(view: view)..add(const DatabaseSyncEvent.initial()),
|
|
child: BlocBuilder<DatabaseSyncBloc, DatabaseSyncBlocState>(
|
|
builder: (context, state) {
|
|
// don't show indicator if user is local
|
|
if (!state.shouldShowIndicator) {
|
|
return const SizedBox.shrink();
|
|
}
|
|
final Color color;
|
|
final String hintText;
|
|
|
|
if (!state.isNetworkConnected) {
|
|
color = Colors.grey;
|
|
hintText = LocaleKeys.newSettings_syncState_noNetworkConnected.tr();
|
|
} else {
|
|
switch (state.syncState) {
|
|
case DatabaseSyncState.SyncFinished:
|
|
color = Colors.green;
|
|
hintText = LocaleKeys.newSettings_syncState_synced.tr();
|
|
break;
|
|
case DatabaseSyncState.Syncing:
|
|
case DatabaseSyncState.InitSyncBegin:
|
|
color = Colors.yellow;
|
|
hintText = LocaleKeys.newSettings_syncState_syncing.tr();
|
|
break;
|
|
default:
|
|
return const SizedBox.shrink();
|
|
}
|
|
}
|
|
|
|
return FlowyTooltip(
|
|
message: hintText,
|
|
child: Container(
|
|
decoration: BoxDecoration(
|
|
shape: BoxShape.circle,
|
|
color: color,
|
|
),
|
|
width: 8,
|
|
height: 8,
|
|
),
|
|
);
|
|
},
|
|
),
|
|
);
|
|
}
|
|
}
|