Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,10 @@ import 'package:appflowy/plugins/database/application/database_controller.dart';
import 'package:appflowy/plugins/database/application/cell/bloc/url_cell_bloc.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter/services.dart';
import 'package:universal_platform/universal_platform.dart';

import '../editable_cell_skeleton/url.dart';
import 'card_cell.dart';

class URLCardCellStyle extends CardCellStyle {
Expand Down Expand Up @@ -32,6 +35,34 @@ class URLCardCell extends CardCell<URLCardCellStyle> {
}

class _URLCellState extends State<URLCardCell> {
bool isLinkClickable = false;

@override
void initState() {
super.initState();
if (UniversalPlatform.isDesktop) {
HardwareKeyboard.instance.addHandler(_handleGlobalKeyEvent);
}
}

@override
void dispose() {
if (UniversalPlatform.isDesktop) {
HardwareKeyboard.instance.removeHandler(_handleGlobalKeyEvent);
}
super.dispose();
}

bool _handleGlobalKeyEvent(KeyEvent event) {
final keyboard = HardwareKeyboard.instance;
final canOpenLink = event is KeyDownEvent &&
(keyboard.isControlPressed || keyboard.isMetaPressed);
if (canOpenLink != isLinkClickable) {
setState(() => isLinkClickable = canOpenLink);
}
return false;
}

@override
Widget build(BuildContext context) {
return BlocProvider(
Expand All @@ -49,12 +80,28 @@ class _URLCellState extends State<URLCardCell> {
if (state.content.isEmpty) {
return const SizedBox.shrink();
}
return Container(
alignment: AlignmentDirectional.centerStart,
padding: widget.style.padding,
child: Text(
state.content,
style: widget.style.textStyle,
return GestureDetector(
onTap: () {
if (UniversalPlatform.isDesktop) {
if (isLinkClickable) {
openUrlCellLink(state.content);
}
} else {
openUrlCellLink(state.content);
}
},
child: MouseRegion(
cursor: isLinkClickable || UniversalPlatform.isMobile
? SystemMouseCursors.click
: SystemMouseCursors.basic,
child: Container(
alignment: AlignmentDirectional.centerStart,
padding: widget.style.padding,
child: Text(
state.content,
style: widget.style.textStyle,
),
),
),
);
},
Expand Down
Loading