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 '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: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 'package:flutter/material.dart';
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
@ -73,7 +75,18 @@ class _URLCellEditorState extends State<URLCellEditor> {
|
|||||||
if (mounted) {
|
if (mounted) {
|
||||||
if (_cellBloc.isClosed == false &&
|
if (_cellBloc.isClosed == false &&
|
||||||
_controller.text != _cellBloc.state.content) {
|
_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';
|
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).clearSnackBars();
|
||||||
|
|
||||||
ScaffoldMessenger.of(context)
|
ScaffoldMessenger.of(context)
|
||||||
@ -18,6 +18,7 @@ void showSnapBar(BuildContext context, String title) {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
backgroundColor: backgroundColor,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
.closed
|
.closed
|
||||||
|
Loading…
Reference in New Issue
Block a user