Merge pull request #2586 from krille-chan/krille/add-code-lints-for-unused-code
chore: Add code lint check for unused code
This commit is contained in:
commit
42fae5fbe6
12 changed files with 36 additions and 352 deletions
3
.github/workflows/integrate.yaml
vendored
3
.github/workflows/integrate.yaml
vendored
|
|
@ -29,6 +29,9 @@ jobs:
|
|||
run: ./scripts/add-firebase-messaging.sh
|
||||
- run: flutter analyze
|
||||
- run: flutter test
|
||||
- run: dart run dart_code_linter:metrics check-unused-code lib
|
||||
- run: dart run dart_code_linter:metrics check-unused-files lib
|
||||
- run: dart run dart_code_linter:metrics check-unused-l10n lib
|
||||
|
||||
build_debug_apk:
|
||||
runs-on: ubuntu-latest
|
||||
|
|
|
|||
|
|
@ -1,30 +0,0 @@
|
|||
abstract class AppEmojis {
|
||||
static const List<String> emojis = [
|
||||
'👍',
|
||||
'😊',
|
||||
'😀',
|
||||
'❤️',
|
||||
'😍',
|
||||
'😘',
|
||||
'😇',
|
||||
'😅',
|
||||
'😭',
|
||||
'😜',
|
||||
'😱',
|
||||
'😆',
|
||||
'😉',
|
||||
'😡',
|
||||
'👋',
|
||||
'🤔',
|
||||
'🙁',
|
||||
'🥳',
|
||||
'😟',
|
||||
'😄',
|
||||
'😁',
|
||||
'🙄',
|
||||
'😂',
|
||||
'🤣',
|
||||
'😌',
|
||||
'😬',
|
||||
];
|
||||
}
|
||||
|
|
@ -1,85 +0,0 @@
|
|||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:matrix/matrix.dart';
|
||||
|
||||
import 'package:fluffychat/l10n/l10n.dart';
|
||||
import 'package:fluffychat/pages/chat/add_widget_tile_view.dart';
|
||||
|
||||
class AddWidgetTile extends StatefulWidget {
|
||||
final Room room;
|
||||
|
||||
const AddWidgetTile({super.key, required this.room});
|
||||
|
||||
@override
|
||||
State<AddWidgetTile> createState() => AddWidgetTileState();
|
||||
}
|
||||
|
||||
class AddWidgetTileState extends State<AddWidgetTile> {
|
||||
final TextEditingController urlController = TextEditingController();
|
||||
final TextEditingController nameController = TextEditingController();
|
||||
String widgetType = 'm.etherpad';
|
||||
|
||||
late final bool initiallyExpanded;
|
||||
|
||||
String? nameError;
|
||||
String? urlError;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
initiallyExpanded = widget.room.widgets.isEmpty;
|
||||
super.initState();
|
||||
}
|
||||
|
||||
void setWidgetType(String value) => setState(() => widgetType = value);
|
||||
|
||||
void addWidget() {
|
||||
try {
|
||||
nameError = null;
|
||||
urlError = null;
|
||||
|
||||
final room = widget.room;
|
||||
final name = nameController.text;
|
||||
final uri = Uri.tryParse(urlController.text);
|
||||
|
||||
if (name.length < 3) {
|
||||
setState(() {
|
||||
nameError = L10n.of(context).widgetNameError;
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
if (uri == null || uri.scheme != 'https') {
|
||||
setState(() {
|
||||
urlError = L10n.of(context).widgetUrlError;
|
||||
});
|
||||
return;
|
||||
}
|
||||
setState(() {});
|
||||
|
||||
late MatrixWidget matrixWidget;
|
||||
switch (widgetType) {
|
||||
case 'm.etherpad':
|
||||
matrixWidget = MatrixWidget.etherpad(room, name, uri);
|
||||
break;
|
||||
case 'm.jitsi':
|
||||
matrixWidget = MatrixWidget.jitsi(room, name, uri);
|
||||
break;
|
||||
case 'm.video':
|
||||
matrixWidget = MatrixWidget.video(room, name, uri);
|
||||
break;
|
||||
default:
|
||||
matrixWidget = MatrixWidget.custom(room, name, uri);
|
||||
break;
|
||||
}
|
||||
widget.room.addWidget(matrixWidget);
|
||||
Navigator.of(context).pop();
|
||||
} catch (e) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(content: Text(L10n.of(context).errorAddingWidget)),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => AddWidgetTileView(controller: this);
|
||||
}
|
||||
|
|
@ -1,73 +0,0 @@
|
|||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:fluffychat/l10n/l10n.dart';
|
||||
import 'package:fluffychat/pages/chat/add_widget_tile.dart';
|
||||
|
||||
class AddWidgetTileView extends StatelessWidget {
|
||||
final AddWidgetTileState controller;
|
||||
|
||||
const AddWidgetTileView({super.key, required this.controller});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ExpansionTile(
|
||||
title: Text(L10n.of(context).addWidget),
|
||||
leading: const Icon(Icons.add),
|
||||
initiallyExpanded: controller.initiallyExpanded,
|
||||
children: [
|
||||
CupertinoSegmentedControl(
|
||||
groupValue: controller.widgetType,
|
||||
padding: const EdgeInsets.all(8),
|
||||
children:
|
||||
{
|
||||
'm.etherpad': Text(L10n.of(context).widgetEtherpad),
|
||||
'm.jitsi': Text(L10n.of(context).widgetJitsi),
|
||||
'm.video': Text(L10n.of(context).widgetVideo),
|
||||
'm.custom': Text(L10n.of(context).widgetCustom),
|
||||
}.map(
|
||||
(key, value) => MapEntry(
|
||||
key,
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 4.0),
|
||||
child: value,
|
||||
),
|
||||
),
|
||||
),
|
||||
onValueChanged: controller.setWidgetType,
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: TextField(
|
||||
controller: controller.nameController,
|
||||
autofocus: true,
|
||||
decoration: InputDecoration(
|
||||
prefixIcon: const Icon(Icons.label),
|
||||
label: Text(L10n.of(context).widgetName),
|
||||
errorText: controller.nameError,
|
||||
),
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: TextField(
|
||||
controller: controller.urlController,
|
||||
decoration: InputDecoration(
|
||||
prefixIcon: const Icon(Icons.add_link),
|
||||
label: Text(L10n.of(context).link),
|
||||
errorText: controller.urlError,
|
||||
),
|
||||
),
|
||||
),
|
||||
OverflowBar(
|
||||
children: [
|
||||
TextButton(
|
||||
onPressed: controller.addWidget,
|
||||
child: Text(L10n.of(context).addWidget),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -16,8 +16,6 @@ import 'package:fluffychat/widgets/adaptive_dialogs/show_text_input_dialog.dart'
|
|||
import 'package:fluffychat/widgets/future_loading_dialog.dart';
|
||||
import 'package:fluffychat/widgets/matrix.dart';
|
||||
|
||||
enum AliasActions { copy, delete, setCanonical }
|
||||
|
||||
class ChatDetails extends StatefulWidget {
|
||||
final String roomId;
|
||||
final Widget? embeddedCloseButton;
|
||||
|
|
|
|||
|
|
@ -29,15 +29,6 @@ import '../../config/setting_keys.dart';
|
|||
import '../../utils/url_launcher.dart';
|
||||
import '../../widgets/matrix.dart';
|
||||
|
||||
enum PopupMenuAction {
|
||||
settings,
|
||||
invite,
|
||||
newGroup,
|
||||
newSpace,
|
||||
setStatus,
|
||||
archive,
|
||||
}
|
||||
|
||||
enum ActiveFilter { allChats, messages, groups, unread, spaces }
|
||||
|
||||
extension LocalizedActiveFilter on ActiveFilter {
|
||||
|
|
@ -879,8 +870,6 @@ class ChatListController extends State<ChatList>
|
|||
|
||||
enum EditBundleAction { addToBundle, removeFromBundle }
|
||||
|
||||
enum InviteActions { accept, decline, block }
|
||||
|
||||
enum ChatContextAction {
|
||||
open,
|
||||
goToSpace,
|
||||
|
|
|
|||
|
|
@ -14,8 +14,6 @@ import '../../config/themes.dart';
|
|||
import '../../utils/date_time_extension.dart';
|
||||
import '../../widgets/avatar.dart';
|
||||
|
||||
enum ArchivedRoomAction { delete, rejoin }
|
||||
|
||||
class ChatListItem extends StatelessWidget {
|
||||
final Room room;
|
||||
final Room? space;
|
||||
|
|
|
|||
|
|
@ -45,10 +45,6 @@ import 'platform_infos.dart';
|
|||
|
||||
//<GOOGLE_SERVICES>import 'package:fcm_shared_isolate/fcm_shared_isolate.dart';
|
||||
|
||||
class NoTokenException implements Exception {
|
||||
String get cause => 'Cannot get firebase token';
|
||||
}
|
||||
|
||||
class BackgroundPush {
|
||||
static BackgroundPush? _instance;
|
||||
final FlutterLocalNotificationsPlugin _flutterLocalNotificationsPlugin =
|
||||
|
|
|
|||
|
|
@ -1,100 +0,0 @@
|
|||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:fluffychat/config/themes.dart';
|
||||
|
||||
class AvatarPageHeader extends StatelessWidget {
|
||||
final Widget avatar;
|
||||
final void Function()? onAvatarEdit;
|
||||
final Widget? textButtonLeft, textButtonRight;
|
||||
final List<Widget> iconButtons;
|
||||
|
||||
const AvatarPageHeader({
|
||||
super.key,
|
||||
required this.avatar,
|
||||
this.onAvatarEdit,
|
||||
this.iconButtons = const [],
|
||||
this.textButtonLeft,
|
||||
this.textButtonRight,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final theme = Theme.of(context);
|
||||
final onAvatarEdit = this.onAvatarEdit;
|
||||
return Center(
|
||||
child: ConstrainedBox(
|
||||
constraints: const BoxConstraints(maxWidth: FluffyThemes.columnWidth),
|
||||
child: Column(
|
||||
mainAxisSize: .min,
|
||||
crossAxisAlignment: .center,
|
||||
spacing: 8.0,
|
||||
children: [
|
||||
Stack(
|
||||
children: [
|
||||
avatar,
|
||||
if (onAvatarEdit != null)
|
||||
Positioned(
|
||||
bottom: 0,
|
||||
right: 0,
|
||||
child: FloatingActionButton.small(
|
||||
elevation: 2,
|
||||
onPressed: onAvatarEdit,
|
||||
heroTag: null,
|
||||
child: const Icon(Icons.camera_alt_outlined),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
TextButtonTheme(
|
||||
data: TextButtonThemeData(
|
||||
style: TextButton.styleFrom(
|
||||
disabledForegroundColor: theme.colorScheme.onSurface,
|
||||
foregroundColor: theme.colorScheme.onSurface,
|
||||
textStyle: const TextStyle(fontWeight: FontWeight.normal),
|
||||
),
|
||||
),
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 16.0),
|
||||
child: LayoutBuilder(
|
||||
builder: (context, constraints) {
|
||||
return Row(
|
||||
mainAxisAlignment: .center,
|
||||
children: [
|
||||
ConstrainedBox(
|
||||
constraints: BoxConstraints(
|
||||
maxWidth: constraints.maxWidth / 2,
|
||||
),
|
||||
child: textButtonLeft,
|
||||
),
|
||||
ConstrainedBox(
|
||||
constraints: BoxConstraints(
|
||||
maxWidth: constraints.maxWidth / 2,
|
||||
),
|
||||
child: textButtonRight,
|
||||
),
|
||||
],
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
IconButtonTheme(
|
||||
data: IconButtonThemeData(
|
||||
style: IconButton.styleFrom(
|
||||
backgroundColor: theme.colorScheme.surfaceContainer,
|
||||
iconSize: 24,
|
||||
padding: const EdgeInsets.all(16),
|
||||
),
|
||||
),
|
||||
child: Row(
|
||||
mainAxisAlignment: .spaceEvenly,
|
||||
children: iconButtons,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 0.0),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,45 +0,0 @@
|
|||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:fluffychat/utils/error_reporter.dart';
|
||||
|
||||
class FluffyChatErrorWidget extends StatefulWidget {
|
||||
final FlutterErrorDetails details;
|
||||
const FluffyChatErrorWidget(this.details, {super.key});
|
||||
|
||||
@override
|
||||
State<FluffyChatErrorWidget> createState() => _FluffyChatErrorWidgetState();
|
||||
}
|
||||
|
||||
class _FluffyChatErrorWidgetState extends State<FluffyChatErrorWidget> {
|
||||
static final Set<String> knownExceptions = {};
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
|
||||
if (knownExceptions.contains(widget.details.exception.toString())) {
|
||||
return;
|
||||
}
|
||||
knownExceptions.add(widget.details.exception.toString());
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
ErrorReporter(
|
||||
context,
|
||||
'Error Widget',
|
||||
).onErrorCallback(widget.details.exception, widget.details.stack);
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Material(
|
||||
color: Colors.orange,
|
||||
child: Placeholder(
|
||||
child: Center(
|
||||
child: Material(
|
||||
color: Colors.white.withAlpha(230),
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
32
pubspec.lock
32
pubspec.lock
|
|
@ -17,6 +17,14 @@ packages:
|
|||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "8.4.1"
|
||||
analyzer_plugin:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: analyzer_plugin
|
||||
sha256: "825071d553c4aef2252196d46a665fbd8e0cb06de07725f25d1b29bd18d65fff"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.13.6"
|
||||
animations:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
|
@ -273,6 +281,14 @@ packages:
|
|||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.0.8"
|
||||
dart_code_linter:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
name: dart_code_linter
|
||||
sha256: "1b53722d9933a5f5d4580acc29c7f16b1fde66d21d1ecf7bb2a811caf3a42b42"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.2.1"
|
||||
dart_earcut:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
|
@ -289,6 +305,14 @@ packages:
|
|||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.0.0"
|
||||
dart_style:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: dart_style
|
||||
sha256: a9c30492da18ff84efe2422ba2d319a89942d93e58eb0b73d32abe822ef54b7b
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.1.3"
|
||||
dart_webrtc:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
|
@ -1364,6 +1388,14 @@ packages:
|
|||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.2.0"
|
||||
pub_updater:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: pub_updater
|
||||
sha256: "739a0161d73a6974c0675b864fb0cf5147305f7b077b7f03a58fa7a9ab3e7e7d"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.5.0"
|
||||
pubspec_parse:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
|
|
|||
|
|
@ -85,6 +85,7 @@ dependencies:
|
|||
webrtc_interface: ^1.3.0
|
||||
|
||||
dev_dependencies:
|
||||
dart_code_linter: ^3.2.1
|
||||
flutter_lints: ^6.0.0
|
||||
flutter_native_splash: ^2.4.7
|
||||
flutter_test:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue