Skip to content

Commit c3525c6

Browse files
committed
wip: Remove influxui dependency
1 parent 770ec49 commit c3525c6

19 files changed

+1150
-23
lines changed
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,2 @@
11
ignore:
2-
- influxui
32
- vclibs

apps/biyi_app/lib/app/home/limited_functionality_banner.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
import 'package:biyi_app/generated/locale_keys.g.dart';
2+
import 'package:biyi_app/utils/extended_colors.dart';
23
import 'package:biyi_app/utils/utils.dart';
4+
import 'package:biyi_app/widgets/alert/alert.dart';
35
import 'package:bot_toast/bot_toast.dart';
46
import 'package:easy_localization/easy_localization.dart';
57
import 'package:fluentui_system_icons/fluentui_system_icons.dart';
68
import 'package:flutter/gestures.dart';
7-
import 'package:influxui/influxui.dart' show Alert, AlertType, ExtendedColors;
89
import 'package:reflect_ui/reflect_ui.dart' hide Alert;
910
import 'package:screen_capturer/screen_capturer.dart';
1011
import 'package:screen_text_extractor/screen_text_extractor.dart';

apps/biyi_app/lib/app/settings/keybinds/page.dart

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
import 'package:biyi_app/generated/locale_keys.g.dart';
22
import 'package:biyi_app/states/settings.dart';
33
import 'package:biyi_app/widgets/customized_app_bar/customized_app_bar.dart';
4+
import 'package:biyi_app/widgets/kbd/kbd.dart';
45
import 'package:biyi_app/widgets/list_section.dart';
56
import 'package:biyi_app/widgets/list_tile.dart';
67
import 'package:easy_localization/easy_localization.dart';
78
import 'package:flutter/material.dart' show Scaffold;
89
import 'package:flutter/widgets.dart';
910
import 'package:go_router/go_router.dart';
1011
import 'package:hotkey_manager/hotkey_manager.dart';
11-
import 'package:influxui/influxui.dart' show ExtendedSize, Kbd;
1212
import 'package:provider/provider.dart';
1313
import 'package:uni_platform/uni_platform.dart';
1414

@@ -28,7 +28,6 @@ class HotKeyDisplayView extends StatelessWidget {
2828
for (final HotKeyModifier modifier in hotKey.modifiers ?? []) ...[
2929
Kbd(
3030
modifier.physicalKeys.first.keyLabel,
31-
size: ExtendedSize.small,
3231
),
3332
const Padding(
3433
padding: EdgeInsets.symmetric(horizontal: 4),
@@ -43,7 +42,6 @@ class HotKeyDisplayView extends StatelessWidget {
4342
],
4443
Kbd(
4544
hotKey.physicalKey.keyLabel,
46-
size: ExtendedSize.small,
4745
),
4846
],
4947
);

apps/biyi_app/lib/app/settings/layout.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,11 @@ import 'dart:async';
33
import 'package:biyi_app/app/router_config.dart';
44
import 'package:biyi_app/generated/locale_keys.g.dart';
55
import 'package:biyi_app/utils/extended_colors.dart';
6+
import 'package:biyi_app/widgets/navigation_rail/navigation_rail.dart';
67
import 'package:easy_localization/easy_localization.dart';
78
import 'package:fluentui_system_icons/fluentui_system_icons.dart';
89
import 'package:flutter_adaptive_scaffold/flutter_adaptive_scaffold.dart';
910
import 'package:go_router/go_router.dart';
10-
import 'package:influxui/influxui.dart'
11-
show NavigationRail, NavigationRailDestination;
1211
import 'package:reflect_ui/reflect_ui.dart';
1312
import 'package:uni_platform/uni_platform.dart';
1413
import 'package:window_manager/window_manager.dart';
Lines changed: 169 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,169 @@
1+
import 'package:biyi_app/utils/extended_colors.dart';
2+
import 'package:biyi_app/widgets/alert/alert_style.dart';
3+
import 'package:biyi_app/widgets/alert/alert_theme.dart';
4+
import 'package:reflect_ui/reflect_ui.dart';
5+
6+
enum AlertType {
7+
success,
8+
info,
9+
warning,
10+
danger;
11+
}
12+
13+
/// Attract user attention with important static message
14+
class Alert extends StatefulWidget {
15+
const Alert({
16+
super.key,
17+
this.style,
18+
this.type = AlertType.info,
19+
this.icon,
20+
this.title,
21+
this.titleBuilder,
22+
this.message,
23+
this.messageBuilder,
24+
this.actions,
25+
});
26+
27+
final AlertStyle? style;
28+
29+
/// Alert type
30+
final AlertType? type;
31+
32+
final Widget? icon;
33+
34+
/// Alert title
35+
final String? title;
36+
37+
/// Alert title builder
38+
final WidgetBuilder? titleBuilder;
39+
40+
/// Alert message
41+
final String? message;
42+
43+
/// Alert message builder
44+
final WidgetBuilder? messageBuilder;
45+
46+
final List<Widget>? actions;
47+
48+
@override
49+
State<Alert> createState() => _AlertState();
50+
}
51+
52+
class _AlertState extends State<Alert> {
53+
@override
54+
Widget build(BuildContext context) {
55+
final AlertThemeData? themeData = AlertTheme.of(context);
56+
final AlertThemeData defaults = _AlertDefaults(context);
57+
AlertStyle mergedStyle = widget.style ?? const AlertStyle();
58+
59+
switch (widget.type!) {
60+
case AlertType.success:
61+
mergedStyle = mergedStyle // merge success style
62+
.merge(themeData?.successStyle)
63+
.merge(defaults.successStyle);
64+
break;
65+
case AlertType.info:
66+
mergedStyle = mergedStyle // merge info style
67+
.merge(themeData?.infoStyle)
68+
.merge(defaults.infoStyle);
69+
break;
70+
case AlertType.warning:
71+
mergedStyle = mergedStyle // merge warning style
72+
.merge(themeData?.warningStyle)
73+
.merge(defaults.warningStyle);
74+
break;
75+
case AlertType.danger:
76+
mergedStyle = mergedStyle // merge danger style
77+
.merge(themeData?.dangerStyle)
78+
.merge(defaults.dangerStyle);
79+
break;
80+
}
81+
82+
final Widget? iconWidget = widget.icon != null
83+
? IconTheme(
84+
data: IconThemeData(
85+
size: mergedStyle.iconSize,
86+
color: mergedStyle.titleStyle!.color,
87+
),
88+
child: widget.icon!,
89+
)
90+
: null;
91+
92+
final Widget? titleWidget = widget.titleBuilder != null
93+
? widget.titleBuilder!(context)
94+
: widget.title != null
95+
? Text(widget.title!)
96+
: null;
97+
98+
final Widget? messageWidget = widget.messageBuilder != null
99+
? widget.messageBuilder!(context)
100+
: widget.message != null
101+
? Text(widget.message!)
102+
: null;
103+
104+
return Container(
105+
padding: const EdgeInsets.all(12),
106+
decoration: BoxDecoration(
107+
color: mergedStyle.backgroundColor,
108+
),
109+
child: GappedRow(
110+
gap: 8,
111+
crossAxisAlignment: CrossAxisAlignment.start,
112+
children: [
113+
if (iconWidget != null) iconWidget,
114+
Expanded(
115+
child: GappedColumn(
116+
gap: 8,
117+
mainAxisSize: MainAxisSize.min,
118+
crossAxisAlignment: CrossAxisAlignment.start,
119+
children: [
120+
if (titleWidget != null)
121+
DefaultTextStyle(
122+
style: mergedStyle.titleStyle!,
123+
child: titleWidget,
124+
),
125+
if (messageWidget != null)
126+
DefaultTextStyle(
127+
style: mergedStyle.messageStyle!,
128+
child: messageWidget,
129+
),
130+
if ((widget.actions ?? []).isNotEmpty)
131+
Padding(
132+
padding: const EdgeInsets.only(top: 4),
133+
child: GappedRow(gap: 8, children: widget.actions!),
134+
),
135+
],
136+
),
137+
),
138+
],
139+
),
140+
);
141+
}
142+
}
143+
144+
class _AlertDefaults extends AlertThemeData {
145+
_AlertDefaults(this.context) : super();
146+
147+
final BuildContext context;
148+
late final ThemeData _theme = Theme.of(context);
149+
150+
@override
151+
AlertStyle? get successStyle {
152+
return AlertStyle.fromColor(_theme, ExtendedColors.green);
153+
}
154+
155+
@override
156+
AlertStyle? get infoStyle {
157+
return AlertStyle.fromColor(_theme, ExtendedColors.blue);
158+
}
159+
160+
@override
161+
AlertStyle? get warningStyle {
162+
return AlertStyle.fromColor(_theme, ExtendedColors.yellow);
163+
}
164+
165+
@override
166+
AlertStyle? get dangerStyle {
167+
return AlertStyle.fromColor(_theme, ExtendedColors.red);
168+
}
169+
}
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
import 'package:flutter/foundation.dart';
2+
import 'package:flutter/material.dart' show MaterialColor, ThemeData;
3+
import 'package:flutter/widgets.dart';
4+
5+
class AlertStyle with Diagnosticable {
6+
const AlertStyle({
7+
this.backgroundColor,
8+
this.iconSize,
9+
this.titleStyle,
10+
this.messageStyle,
11+
});
12+
13+
factory AlertStyle.fromColor(ThemeData theme, MaterialColor color) {
14+
return AlertStyle(
15+
backgroundColor: color.shade50,
16+
iconSize: 20,
17+
titleStyle: theme.textTheme.bodyMedium?.copyWith(
18+
color: color.shade700,
19+
fontWeight: FontWeight.w600,
20+
),
21+
messageStyle: theme.textTheme.bodyMedium?.copyWith(
22+
color: color.shade600,
23+
),
24+
);
25+
}
26+
27+
final Color? backgroundColor;
28+
29+
final double? iconSize;
30+
31+
final TextStyle? titleStyle;
32+
33+
final TextStyle? messageStyle;
34+
35+
AlertStyle copyWith({
36+
Color? backgroundColor,
37+
double? iconSize,
38+
TextStyle? titleStyle,
39+
TextStyle? messageStyle,
40+
}) {
41+
return AlertStyle(
42+
backgroundColor: backgroundColor ?? this.backgroundColor,
43+
iconSize: iconSize ?? this.iconSize,
44+
titleStyle: titleStyle ?? this.titleStyle,
45+
messageStyle: messageStyle ?? this.messageStyle,
46+
);
47+
}
48+
49+
/// Returns a copy of this AlertStyle where the non-null fields in [style]
50+
/// have replaced the corresponding null fields in this AlertStyle.
51+
///
52+
/// In other words, [style] is used to fill in unspecified (null) fields
53+
/// this AlertStyle.
54+
AlertStyle merge(AlertStyle? style) {
55+
if (style == null) {
56+
return this;
57+
}
58+
return copyWith(
59+
backgroundColor: style.backgroundColor,
60+
iconSize: iconSize ?? style.iconSize,
61+
titleStyle: titleStyle ?? style.titleStyle,
62+
messageStyle: messageStyle ?? style.messageStyle,
63+
);
64+
}
65+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
// ignore_for_file: annotate_overrides
2+
3+
import 'package:biyi_app/widgets/alert/alert_style.dart';
4+
import 'package:flutter/foundation.dart';
5+
import 'package:flutter/material.dart';
6+
import 'package:theme_tailor_annotation/theme_tailor_annotation.dart';
7+
8+
part 'alert_theme.tailor.dart';
9+
10+
@TailorMixin()
11+
class AlertThemeData extends ThemeExtension<AlertThemeData>
12+
with DiagnosticableTreeMixin, _$AlertThemeDataTailorMixin {
13+
const AlertThemeData({
14+
this.successStyle,
15+
this.infoStyle,
16+
this.warningStyle,
17+
this.dangerStyle,
18+
});
19+
20+
final AlertStyle? successStyle;
21+
final AlertStyle? infoStyle;
22+
final AlertStyle? warningStyle;
23+
final AlertStyle? dangerStyle;
24+
}
25+
26+
class AlertTheme extends InheritedTheme {
27+
const AlertTheme({
28+
super.key,
29+
required this.data,
30+
required super.child,
31+
});
32+
33+
final AlertThemeData data;
34+
35+
static AlertThemeData? of(BuildContext context) {
36+
final theme = context.dependOnInheritedWidgetOfExactType<AlertTheme>();
37+
return theme?.data ?? Theme.of(context).extension<AlertThemeData>();
38+
}
39+
40+
@override
41+
Widget wrap(BuildContext context, Widget child) {
42+
return AlertTheme(data: data, child: child);
43+
}
44+
45+
@override
46+
bool updateShouldNotify(AlertTheme oldWidget) => data != oldWidget.data;
47+
}

0 commit comments

Comments
 (0)