chore: call FolderEventSetLatestView when opening page on mobile (#5447)

* fix: call FolderEventSetLatestView when opening page on mobile

* chore: remove unused log
This commit is contained in:
Lucas.Xu 2024-06-03 09:10:02 +08:00 committed by GitHub
parent 4ad7c48b25
commit 2a59579c17
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 46 additions and 31 deletions

View File

@ -1,28 +1,28 @@
import 'dart:async';
import 'dart:convert';
import 'package:appflowy/workspace/presentation/home/menu/menu_shared_state.dart';
import 'package:flutter/material.dart';
import 'package:appflowy/mobile/presentation/database/board/mobile_board_screen.dart';
import 'package:appflowy/mobile/presentation/database/mobile_calendar_screen.dart';
import 'package:appflowy/mobile/presentation/database/mobile_grid_screen.dart';
import 'package:appflowy/mobile/presentation/presentation.dart';
import 'package:appflowy/startup/startup.dart';
import 'package:appflowy/workspace/application/recent/cached_recent_service.dart';
import 'package:appflowy/workspace/presentation/home/menu/menu_shared_state.dart';
import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
extension MobileRouter on BuildContext {
Future<void> pushView(ViewPB view, [Map<String, dynamic>? arguments]) async {
await push(
Uri(
path: view.routeName,
queryParameters: view.queryParameters(arguments),
).toString(),
).then((value) {
getIt<MenuSharedState>().latestOpenView = view;
getIt<CachedRecentService>().updateRecentViews([view.id], true);
});
// set the current view before pushing the new view
getIt<MenuSharedState>().latestOpenView = view;
unawaited(getIt<CachedRecentService>().updateRecentViews([view.id], true));
final uri = Uri(
path: view.routeName,
queryParameters: view.queryParameters(arguments),
).toString();
await push(uri);
}
}

View File

@ -10,7 +10,9 @@ import 'package:appflowy/workspace/application/recent/cached_recent_service.dart
import 'package:appflowy/workspace/application/user/user_workspace_bloc.dart';
import 'package:appflowy/workspace/presentation/home/errors/workspace_failed_screen.dart';
import 'package:appflowy/workspace/presentation/home/home_sizes.dart';
import 'package:appflowy/workspace/presentation/home/menu/menu_shared_state.dart';
import 'package:appflowy_backend/dispatch/dispatch.dart';
import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
import 'package:appflowy_backend/protobuf/flowy-folder/workspace.pb.dart';
import 'package:appflowy_backend/protobuf/flowy-user/protobuf.dart';
import 'package:flutter/material.dart';
@ -69,7 +71,7 @@ class MobileHomeScreen extends StatelessWidget {
}
}
class MobileHomePage extends StatelessWidget {
class MobileHomePage extends StatefulWidget {
const MobileHomePage({
super.key,
required this.userProfile,
@ -79,15 +81,31 @@ class MobileHomePage extends StatelessWidget {
final UserProfilePB userProfile;
final WorkspaceSettingPB workspaceSetting;
@override
State<MobileHomePage> createState() => _MobileHomePageState();
}
class _MobileHomePageState extends State<MobileHomePage> {
@override
void initState() {
super.initState();
getIt<MenuSharedState>().addLatestViewListener(_onLatestViewChange);
}
@override
void dispose() {
getIt<MenuSharedState>().removeLatestViewListener(_onLatestViewChange);
super.dispose();
}
@override
Widget build(BuildContext context) {
return MultiBlocProvider(
providers: [
BlocProvider(
create: (_) => UserWorkspaceBloc(userProfile: userProfile)
..add(
const UserWorkspaceEvent.initial(),
),
create: (_) => UserWorkspaceBloc(userProfile: widget.userProfile)
..add(const UserWorkspaceEvent.initial()),
),
BlocProvider(
create: (context) =>
@ -114,7 +132,7 @@ class MobileHomePage extends StatelessWidget {
top: Platform.isAndroid ? 8.0 : 0.0,
),
child: MobileHomePageHeader(
userProfile: userProfile,
userProfile: widget.userProfile,
),
),
@ -123,7 +141,7 @@ class MobileHomePage extends StatelessWidget {
create: (context) =>
SpaceOrderBloc()..add(const SpaceOrderEvent.initial()),
child: MobileSpaceTab(
userProfile: userProfile,
userProfile: widget.userProfile,
),
),
),
@ -133,4 +151,12 @@ class MobileHomePage extends StatelessWidget {
),
);
}
void _onLatestViewChange() async {
final id = getIt<MenuSharedState>().latestOpenView?.id;
if (id == null) {
return;
}
await FolderEventSetLatestView(ViewIdPB(value: id)).send();
}
}

View File

@ -17,13 +17,8 @@ class MenuSharedState {
}
}
VoidCallback addLatestViewListener(void Function(ViewPB?) callback) {
void listener() {
callback(_latestOpenView.value);
}
void addLatestViewListener(VoidCallback listener) {
_latestOpenView.addListener(listener);
return listener;
}
void removeLatestViewListener(VoidCallback listener) {

View File

@ -169,12 +169,6 @@ pub extern "C" fn set_stream_port(notification_port: i64) -> i32 {
pub extern "C" fn set_log_stream_port(port: i64) -> i32 {
*LOG_STREAM_ISOLATE.lock() = Some(Isolate::new(port));
LOG_STREAM_ISOLATE
.lock()
.as_ref()
.unwrap()
.post("hello log".to_string().as_bytes().to_vec());
0
}