1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- import 'package:app_flowy/workspace/presentation/widgets/dialogs.dart';
- import 'package:flutter_quill/flutter_quill.dart';
- import 'package:flowy_infra/image.dart';
- import 'package:flowy_infra/theme.dart';
- import 'package:flowy_infra_ui/style_widget/icon_button.dart';
- import 'package:flutter/material.dart';
- import 'package:provider/provider.dart';
- import 'toolbar_icon_button.dart';
- class FlowyLinkStyleButton extends StatefulWidget {
- const FlowyLinkStyleButton({
- required this.controller,
- this.iconSize = defaultIconSize,
- Key? key,
- }) : super(key: key);
- final QuillController controller;
- final double iconSize;
- @override
- FlowyLinkStyleButtonState createState() => FlowyLinkStyleButtonState();
- }
- class FlowyLinkStyleButtonState extends State<FlowyLinkStyleButton> {
- void _didChangeSelection() {
- setState(() {});
- }
- @override
- void initState() {
- super.initState();
- widget.controller.addListener(_didChangeSelection);
- }
- @override
- void didUpdateWidget(covariant FlowyLinkStyleButton oldWidget) {
- super.didUpdateWidget(oldWidget);
- if (oldWidget.controller != widget.controller) {
- oldWidget.controller.removeListener(_didChangeSelection);
- widget.controller.addListener(_didChangeSelection);
- }
- }
- @override
- void dispose() {
- super.dispose();
- widget.controller.removeListener(_didChangeSelection);
- }
- @override
- Widget build(BuildContext context) {
- final theme = context.watch<AppTheme>();
- final isEnabled = !widget.controller.selection.isCollapsed;
- final pressedHandler = isEnabled ? () => _openLinkDialog(context) : null;
- final icon = isEnabled
- ? svgWidget(
- 'editor/share',
- color: theme.iconColor,
- )
- : svgWidget(
- 'editor/share',
- color: theme.disableIconColor,
- );
- return FlowyIconButton(
- onPressed: pressedHandler,
- iconPadding: const EdgeInsets.symmetric(horizontal: 4, vertical: 4),
- icon: icon,
- fillColor: theme.shader6,
- hoverColor: theme.shader5,
- width: widget.iconSize * kIconButtonFactor,
- );
- }
- void _openLinkDialog(BuildContext context) {
- final style = widget.controller.getSelectionStyle();
- final values = style.values
- .where((v) => v.key == Attribute.link.key)
- .map((v) => v.value);
- String value = "";
- if (values.isNotEmpty) {
- assert(values.length == 1);
- value = values.first;
- }
- TextFieldDialog(
- title: 'URL',
- value: value,
- confirm: (newValue) {
- if (newValue.isEmpty) {
- return;
- }
- widget.controller.formatSelection(LinkAttribute(newValue));
- },
- ).show(context);
- }
- }
|