prepare for multiple apps
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
/*
|
||||
* Copyright (c) 2024-2026 Fabian Freund.
|
||||
*
|
||||
* This file is part of WebLibre
|
||||
* (see https://weblibre.eu).
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
import 'dart:ui';
|
||||
|
||||
import 'package:drift/drift.dart';
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
class ColorJsonConverter implements JsonConverter<Color, int> {
|
||||
const ColorJsonConverter();
|
||||
|
||||
@override
|
||||
Color fromJson(int from) {
|
||||
return Color(from);
|
||||
}
|
||||
|
||||
@override
|
||||
int toJson(Color value) {
|
||||
return value.toARGB32();
|
||||
}
|
||||
}
|
||||
|
||||
class ColorConverter extends TypeConverter<Color, int> {
|
||||
const ColorConverter();
|
||||
|
||||
@override
|
||||
Color fromSql(int fromDb) {
|
||||
return Color(fromDb);
|
||||
}
|
||||
|
||||
@override
|
||||
int toSql(Color value) {
|
||||
return value.toARGB32();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
* Copyright (c) 2024-2026 Fabian Freund.
|
||||
*
|
||||
* This file is part of WebLibre
|
||||
* (see https://weblibre.eu).
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
class DateTimeRangeConverter
|
||||
implements JsonConverter<DateTimeRange?, Map<String, dynamic>?> {
|
||||
const DateTimeRangeConverter();
|
||||
|
||||
@override
|
||||
DateTimeRange? fromJson(Map<String, dynamic>? json) {
|
||||
if (json == null) return null;
|
||||
|
||||
return DateTimeRange(
|
||||
start: DateTime.parse(json['start'] as String),
|
||||
end: DateTime.parse(json['end'] as String),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Map<String, dynamic>? toJson(DateTimeRange? dateTimeRange) {
|
||||
if (dateTimeRange == null) return null;
|
||||
|
||||
return {
|
||||
'start': dateTimeRange.start.toIso8601String(),
|
||||
'end': dateTimeRange.end.toIso8601String(),
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
/*
|
||||
* Copyright (c) 2024-2026 Fabian Freund.
|
||||
*
|
||||
* This file is part of WebLibre
|
||||
* (see https://weblibre.eu).
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:drift/drift.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
class IconDataJsonConverter
|
||||
implements JsonConverter<IconData, Map<String, dynamic>> {
|
||||
const IconDataJsonConverter();
|
||||
|
||||
@override
|
||||
IconData fromJson(Map<String, dynamic> json) {
|
||||
return IconData(
|
||||
json['codePoint'] as int,
|
||||
fontFamily: json['fontFamily'] as String,
|
||||
fontPackage: json['fontPackage'] as String,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Map<String, dynamic> toJson(IconData iconData) {
|
||||
return <String, dynamic>{
|
||||
'codePoint': iconData.codePoint,
|
||||
'fontFamily': iconData.fontFamily,
|
||||
'fontPackage': iconData.fontPackage,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
class IconDataTypeConverter implements TypeConverter<IconData, String> {
|
||||
const IconDataTypeConverter();
|
||||
|
||||
@override
|
||||
IconData fromSql(String fromDb) {
|
||||
final json = jsonDecode(fromDb) as Map<String, dynamic>;
|
||||
return const IconDataJsonConverter().fromJson(json);
|
||||
}
|
||||
|
||||
@override
|
||||
String toSql(IconData value) {
|
||||
assert(
|
||||
value.fontFamily != null,
|
||||
'Font family must be provided to identify icon',
|
||||
);
|
||||
|
||||
return jsonEncode(const IconDataJsonConverter().toJson(value));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
* Copyright (c) 2024-2026 Fabian Freund.
|
||||
*
|
||||
* This file is part of WebLibre
|
||||
* (see https://weblibre.eu).
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:drift/drift.dart';
|
||||
|
||||
class StringListConverter extends TypeConverter<List<String>, String> {
|
||||
const StringListConverter();
|
||||
|
||||
@override
|
||||
List<String> fromSql(String fromDb) {
|
||||
return (jsonDecode(fromDb) as List).cast<String>();
|
||||
}
|
||||
|
||||
@override
|
||||
String toSql(List<String> value) {
|
||||
return jsonEncode(value);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
/*
|
||||
* Copyright (c) 2024-2026 Fabian Freund.
|
||||
*
|
||||
* This file is part of WebLibre
|
||||
* (see https://weblibre.eu).
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
import 'package:drift/drift.dart';
|
||||
import 'package:weblibre/utils/uri_parser.dart' as uri_parser;
|
||||
|
||||
class UriConverter extends TypeConverter<Uri, String> {
|
||||
const UriConverter();
|
||||
|
||||
@override
|
||||
Uri fromSql(String fromDb) {
|
||||
return uri_parser.tryParseUrl(fromDb, eagerParsing: true) ??
|
||||
Uri.parse(fromDb);
|
||||
}
|
||||
|
||||
@override
|
||||
String toSql(Uri value) {
|
||||
return value.toString();
|
||||
}
|
||||
}
|
||||
|
||||
class UriConverterNullable extends TypeConverter<Uri?, String?> {
|
||||
const UriConverterNullable();
|
||||
|
||||
@override
|
||||
Uri? fromSql(String? fromDb) {
|
||||
return uri_parser.tryParseUrl(fromDb, eagerParsing: true);
|
||||
}
|
||||
|
||||
@override
|
||||
String? toSql(Uri? value) {
|
||||
return value?.toString();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
* Copyright (c) 2024-2026 Fabian Freund.
|
||||
*
|
||||
* This file is part of WebLibre
|
||||
* (see https://weblibre.eu).
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
import 'package:drift/drift.dart';
|
||||
|
||||
extension TableSize on DatabaseConnectionUser {
|
||||
SingleSelectable<double> tableSize(TableInfo table) {
|
||||
return customSelect(
|
||||
'SELECT SUM(pgsize) /(1024.0 * 1024.0)AS pgsize_mb FROM dbstat WHERE name = ?1',
|
||||
variables: [Variable<String>(table.actualTableName)],
|
||||
readsFrom: {table},
|
||||
).map((QueryRow row) => row.read<double>('pgsize_mb'));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,96 @@
|
||||
/*
|
||||
* Copyright (c) 2024-2026 Fabian Freund.
|
||||
*
|
||||
* This file is part of WebLibre
|
||||
* (see https://weblibre.eu).
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
import 'package:lexo_rank/lexo_rank.dart';
|
||||
import 'package:lexo_rank/lexo_rank/lexo_rank_bucket.dart';
|
||||
import 'package:nullability/nullability.dart';
|
||||
import 'package:sqlite3/common.dart';
|
||||
|
||||
String _nextRankOrMiddle(List<Object?> args) {
|
||||
final parsedBucket = LexoRankBucket.resolve(args[0]! as int);
|
||||
|
||||
if (args[1] != null) {
|
||||
final parsedRank = LexoRank.parse(args[1]! as String);
|
||||
|
||||
return parsedRank.genNext().value;
|
||||
} else {
|
||||
return LexoRank.middle(bucket: parsedBucket).value;
|
||||
}
|
||||
}
|
||||
|
||||
String _previousRankOrMiddle(List<Object?> args) {
|
||||
final parsedBucket = LexoRankBucket.resolve(args[0]! as int);
|
||||
|
||||
if (args[1] != null) {
|
||||
final parsedRank = LexoRank.parse(args[1]! as String);
|
||||
|
||||
return parsedRank.genPrev().value;
|
||||
} else {
|
||||
return LexoRank.middle(bucket: parsedBucket).value;
|
||||
}
|
||||
}
|
||||
|
||||
String _reorderAfter(List<Object?> args) {
|
||||
final first = args[0].mapNotNull((arg) => LexoRank.parse(arg as String));
|
||||
final last = args[1].mapNotNull((arg) => LexoRank.parse(arg as String));
|
||||
|
||||
if (first == null) {
|
||||
throw Exception('Tab not found');
|
||||
} else if (last == null) {
|
||||
return first.genNext().value;
|
||||
} else {
|
||||
return first.genBetween(last).value;
|
||||
}
|
||||
}
|
||||
|
||||
String _reorderBefore(List<Object?> args) {
|
||||
final first = args[0].mapNotNull((arg) => LexoRank.parse(arg as String));
|
||||
final last = args[1].mapNotNull((arg) => LexoRank.parse(arg as String));
|
||||
|
||||
if (first == null) {
|
||||
throw Exception('Tab not found');
|
||||
} else if (last == null) {
|
||||
return first.genPrev().value;
|
||||
} else {
|
||||
return last.genBetween(first).value;
|
||||
}
|
||||
}
|
||||
|
||||
void registerLexorankFunctions(CommonDatabase database) {
|
||||
database.createFunction(
|
||||
functionName: 'lexo_rank_next',
|
||||
argumentCount: const AllowedArgumentCount(2),
|
||||
function: _nextRankOrMiddle,
|
||||
);
|
||||
database.createFunction(
|
||||
functionName: 'lexo_rank_previous',
|
||||
argumentCount: const AllowedArgumentCount(2),
|
||||
function: _previousRankOrMiddle,
|
||||
);
|
||||
database.createFunction(
|
||||
functionName: 'lexo_rank_reorder_after',
|
||||
argumentCount: const AllowedArgumentCount(2),
|
||||
function: _reorderAfter,
|
||||
);
|
||||
database.createFunction(
|
||||
functionName: 'lexo_rank_reorder_before',
|
||||
argumentCount: const AllowedArgumentCount(2),
|
||||
function: _reorderBefore,
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
/*
|
||||
* Copyright (c) 2024-2026 Fabian Freund.
|
||||
*
|
||||
* This file is part of WebLibre
|
||||
* (see https://weblibre.eu).
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
import 'package:fast_equatable/fast_equatable.dart';
|
||||
|
||||
sealed class DropTargetData with FastEquatable {}
|
||||
|
||||
final class ContainerDropData extends DropTargetData {
|
||||
final String tabId;
|
||||
|
||||
ContainerDropData(this.tabId);
|
||||
|
||||
@override
|
||||
List<Object?> get hashParameters => [tabId];
|
||||
}
|
||||
|
||||
final class DeleteDropData extends DropTargetData {
|
||||
final String tabId;
|
||||
|
||||
DeleteDropData(this.tabId);
|
||||
|
||||
@override
|
||||
List<Object?> get hashParameters => [tabId];
|
||||
}
|
||||
|
||||
sealed class DragTargetData with FastEquatable {}
|
||||
|
||||
final class TabDragData extends DragTargetData {
|
||||
final String tabId;
|
||||
|
||||
TabDragData(this.tabId);
|
||||
|
||||
@override
|
||||
List<Object?> get hashParameters => [tabId];
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
/*
|
||||
* Copyright (c) 2024-2026 Fabian Freund.
|
||||
*
|
||||
* This file is part of WebLibre
|
||||
* (see https://weblibre.eu).
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
import 'package:fast_equatable/fast_equatable.dart';
|
||||
|
||||
class ReceivedIntentParameter with FastEquatable {
|
||||
final String? content;
|
||||
final String? tool;
|
||||
final String? contextId;
|
||||
|
||||
ReceivedIntentParameter(this.content, this.tool, {this.contextId});
|
||||
|
||||
@override
|
||||
List<Object?> get hashParameters => [content, tool, contextId];
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
* Copyright (c) 2024-2026 Fabian Freund.
|
||||
*
|
||||
* This file is part of WebLibre
|
||||
* (see https://weblibre.eu).
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
import 'package:copy_with_extension/copy_with_extension.dart';
|
||||
import 'package:fast_equatable/fast_equatable.dart';
|
||||
import 'package:nullability/nullability.dart';
|
||||
import 'package:weblibre/features/geckoview/domain/entities/browser_icon.dart';
|
||||
|
||||
part 'web_page_info.g.dart';
|
||||
|
||||
@CopyWith()
|
||||
class WebPageInfo with FastEquatable {
|
||||
final Uri url;
|
||||
final String? title;
|
||||
final BrowserIcon? favicon;
|
||||
final Set<Uri>? feeds;
|
||||
|
||||
bool get isPageInfoComplete =>
|
||||
title.isNotEmpty && favicon != null && feeds != null;
|
||||
|
||||
WebPageInfo({required this.url, this.title, this.favicon, this.feeds});
|
||||
|
||||
@override
|
||||
List<Object?> get hashParameters => [url, title, favicon, feeds];
|
||||
}
|
||||
@@ -0,0 +1,92 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'web_page_info.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// CopyWithGenerator
|
||||
// **************************************************************************
|
||||
|
||||
abstract class _$WebPageInfoCWProxy {
|
||||
WebPageInfo url(Uri url);
|
||||
|
||||
WebPageInfo title(String? title);
|
||||
|
||||
WebPageInfo favicon(BrowserIcon? favicon);
|
||||
|
||||
WebPageInfo feeds(Set<Uri>? feeds);
|
||||
|
||||
/// Creates a new instance with the provided field values.
|
||||
/// Passing `null` to a nullable field nullifies it, while `null` for a non-nullable field is ignored. To update a single field use `WebPageInfo(...).copyWith.fieldName(value)`.
|
||||
///
|
||||
/// Example:
|
||||
/// ```dart
|
||||
/// WebPageInfo(...).copyWith(id: 12, name: "My name")
|
||||
/// ```
|
||||
WebPageInfo call({
|
||||
Uri url,
|
||||
String? title,
|
||||
BrowserIcon? favicon,
|
||||
Set<Uri>? feeds,
|
||||
});
|
||||
}
|
||||
|
||||
/// Callable proxy for `copyWith` functionality.
|
||||
/// Use as `instanceOfWebPageInfo.copyWith(...)` or call `instanceOfWebPageInfo.copyWith.fieldName(value)` for a single field.
|
||||
class _$WebPageInfoCWProxyImpl implements _$WebPageInfoCWProxy {
|
||||
const _$WebPageInfoCWProxyImpl(this._value);
|
||||
|
||||
final WebPageInfo _value;
|
||||
|
||||
@override
|
||||
WebPageInfo url(Uri url) => call(url: url);
|
||||
|
||||
@override
|
||||
WebPageInfo title(String? title) => call(title: title);
|
||||
|
||||
@override
|
||||
WebPageInfo favicon(BrowserIcon? favicon) => call(favicon: favicon);
|
||||
|
||||
@override
|
||||
WebPageInfo feeds(Set<Uri>? feeds) => call(feeds: feeds);
|
||||
|
||||
@override
|
||||
/// Creates a new instance with the provided field values.
|
||||
/// Passing `null` to a nullable field nullifies it, while `null` for a non-nullable field is ignored. To update a single field use `WebPageInfo(...).copyWith.fieldName(value)`.
|
||||
///
|
||||
/// Example:
|
||||
/// ```dart
|
||||
/// WebPageInfo(...).copyWith(id: 12, name: "My name")
|
||||
/// ```
|
||||
WebPageInfo call({
|
||||
Object? url = const $CopyWithPlaceholder(),
|
||||
Object? title = const $CopyWithPlaceholder(),
|
||||
Object? favicon = const $CopyWithPlaceholder(),
|
||||
Object? feeds = const $CopyWithPlaceholder(),
|
||||
}) {
|
||||
return WebPageInfo(
|
||||
url: url == const $CopyWithPlaceholder() || url == null
|
||||
? _value.url
|
||||
// ignore: cast_nullable_to_non_nullable
|
||||
: url as Uri,
|
||||
title: title == const $CopyWithPlaceholder()
|
||||
? _value.title
|
||||
// ignore: cast_nullable_to_non_nullable
|
||||
: title as String?,
|
||||
favicon: favicon == const $CopyWithPlaceholder()
|
||||
? _value.favicon
|
||||
// ignore: cast_nullable_to_non_nullable
|
||||
: favicon as BrowserIcon?,
|
||||
feeds: feeds == const $CopyWithPlaceholder()
|
||||
? _value.feeds
|
||||
// ignore: cast_nullable_to_non_nullable
|
||||
: feeds as Set<Uri>?,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
extension $WebPageInfoCopyWith on WebPageInfo {
|
||||
/// Returns a callable class used to build a new instance with modified fields.
|
||||
/// Example: `instanceOfWebPageInfo.copyWith(...)` or `instanceOfWebPageInfo.copyWith.fieldName(...)`.
|
||||
// ignore: library_private_types_in_public_api
|
||||
_$WebPageInfoCWProxy get copyWith => _$WebPageInfoCWProxyImpl(this);
|
||||
}
|
||||
Reference in New Issue
Block a user