mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2024-08-30 18:12:39 +00:00
feat: add url validation in cell_editor (#2287)
* feat: add url validation in cell_editor * fix: url validation in cell editor * feat: add UriFailure in url_validator
This commit is contained in:
parent
a604c0f238
commit
2af2621b49
@ -1 +1,2 @@
|
||||
export 'target_platform.dart';
|
||||
export 'url_validator.dart';
|
||||
|
@ -0,0 +1,21 @@
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||
part 'url_validator.freezed.dart';
|
||||
|
||||
Either<UriFailure, Uri> parseValidUrl(String url) {
|
||||
try {
|
||||
final uri = Uri.parse(url);
|
||||
if (uri.scheme.isEmpty || uri.host.isEmpty) {
|
||||
return left(const UriFailure.invalidSchemeHost());
|
||||
}
|
||||
return right(uri);
|
||||
} on FormatException {
|
||||
return left(const UriFailure.invalidUriFormat());
|
||||
}
|
||||
}
|
||||
|
||||
@freezed
|
||||
class UriFailure with _$UriFailure {
|
||||
const factory UriFailure.invalidSchemeHost() = _InvalidSchemeHost;
|
||||
const factory UriFailure.invalidUriFormat() = _InvalidUriFormat;
|
||||
}
|
@ -1,4 +1,6 @@
|
||||
import 'package:appflowy/core/helpers/helpers.dart';
|
||||
import 'package:appflowy/plugins/database_view/application/cell/cell_controller_builder.dart';
|
||||
import 'package:flowy_infra_ui/style_widget/snap_bar.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'dart:async';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
@ -73,7 +75,18 @@ class _URLCellEditorState extends State<URLCellEditor> {
|
||||
if (mounted) {
|
||||
if (_cellBloc.isClosed == false &&
|
||||
_controller.text != _cellBloc.state.content) {
|
||||
_cellBloc.add(URLCellEditorEvent.updateText(_controller.text));
|
||||
final parseResult = parseValidUrl(_controller.text);
|
||||
|
||||
parseResult.fold(
|
||||
(_) {
|
||||
showSnapBar(
|
||||
context,
|
||||
"Enter a valid URL",
|
||||
Theme.of(context).colorScheme.error,
|
||||
);
|
||||
},
|
||||
(_) => _cellBloc.add(URLCellEditorEvent.updateText(_controller.text)),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
void showSnapBar(BuildContext context, String title) {
|
||||
void showSnapBar(BuildContext context, String title, [Color? backgroundColor]) {
|
||||
ScaffoldMessenger.of(context).clearSnackBars();
|
||||
|
||||
ScaffoldMessenger.of(context)
|
||||
@ -18,6 +18,7 @@ void showSnapBar(BuildContext context, String title) {
|
||||
),
|
||||
),
|
||||
),
|
||||
backgroundColor: backgroundColor,
|
||||
),
|
||||
)
|
||||
.closed
|
||||
|
Loading…
Reference in New Issue
Block a user