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:
Shubham Rawat 2023-04-23 14:56:27 +05:30 committed by GitHub
parent a604c0f238
commit 2af2621b49
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 38 additions and 2 deletions

View File

@ -1 +1,2 @@
export 'target_platform.dart';
export 'url_validator.dart';

View File

@ -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;
}

View File

@ -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)),
);
}
}
}

View File

@ -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