fix: Follow up for spaces hierarchy
- fix endless spinner - fix rooms shon twice - fix spaces accidentally opened as rooms - add missing spaces header to spaces view Signed-off-by: TheOneWithTheBraid <the-one@with-the-braid.cf>
This commit is contained in:
parent
dbd36d06d3
commit
d71c25aa80
10 changed files with 234 additions and 50 deletions
23
lib/utils/space_navigator.dart
Normal file
23
lib/utils/space_navigator.dart
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
import 'dart:async';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
/// this is a workaround to allow navigation of spaces out from any widget.
|
||||
/// Reason is that we have no reliable way to listen on *query* changes of
|
||||
/// VRouter.
|
||||
///
|
||||
/// Time wasted: 3h
|
||||
abstract class SpaceNavigator {
|
||||
const SpaceNavigator._();
|
||||
|
||||
// TODO(TheOneWithTheBraid): adjust routing table in order to represent spaces
|
||||
// ... in any present path
|
||||
static final routeObserver = RouteObserver();
|
||||
|
||||
static final StreamController<String?> _controller =
|
||||
StreamController.broadcast();
|
||||
|
||||
static Stream<String?> get stream => _controller.stream;
|
||||
|
||||
static void navigateToSpace(String? spaceId) => _controller.add(spaceId);
|
||||
}
|
||||
|
|
@ -10,6 +10,7 @@ import 'package:url_launcher/url_launcher.dart';
|
|||
import 'package:vrouter/vrouter.dart';
|
||||
|
||||
import 'package:fluffychat/config/app_config.dart';
|
||||
import 'package:fluffychat/utils/space_navigator.dart';
|
||||
import 'package:fluffychat/widgets/matrix.dart';
|
||||
import 'package:fluffychat/widgets/profile_bottom_sheet.dart';
|
||||
import 'package:fluffychat/widgets/public_room_bottom_sheet.dart';
|
||||
|
|
@ -18,6 +19,7 @@ import 'platform_infos.dart';
|
|||
class UrlLauncher {
|
||||
final String? url;
|
||||
final BuildContext context;
|
||||
|
||||
const UrlLauncher(this.context, this.url);
|
||||
|
||||
void launchUrl() {
|
||||
|
|
@ -130,6 +132,11 @@ class UrlLauncher {
|
|||
}
|
||||
servers.addAll(identityParts.via);
|
||||
if (room != null) {
|
||||
if (room.isSpace) {
|
||||
SpaceNavigator.navigateToSpace(room.id);
|
||||
VRouter.of(context).toSegments(['rooms']);
|
||||
return;
|
||||
}
|
||||
// we have the room, so....just open it
|
||||
if (event != null) {
|
||||
VRouter.of(context).toSegments(['rooms', room.id],
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue