Skip to content

Commit b6239f2

Browse files
authored
Refactor NTWidgetBuilder (#306)
Cleanup some generics, and rename it to NTWidgetRegistry, which is a better fitting name
1 parent f16853b commit b6239f2

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+251
-290
lines changed

lib/main.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import 'package:elastic_dashboard/services/app_distributor.dart';
1717
import 'package:elastic_dashboard/services/field_images.dart';
1818
import 'package:elastic_dashboard/services/log.dart';
1919
import 'package:elastic_dashboard/services/nt_connection.dart';
20-
import 'package:elastic_dashboard/services/nt_widget_builder.dart';
20+
import 'package:elastic_dashboard/services/nt_widget_registry.dart';
2121
import 'package:elastic_dashboard/services/settings.dart';
2222

2323
import 'package:path_provider/path_provider.dart'
@@ -76,7 +76,7 @@ void main() async {
7676
Defaults.logLevel;
7777
Logger.level = logLevel;
7878

79-
NTWidgetBuilder.ensureInitialized();
79+
NTWidgetRegistry.ensureInitialized();
8080

8181
String ipAddress =
8282
preferences.getString(PrefKeys.ipAddress) ?? Defaults.ipAddress;
Lines changed: 66 additions & 110 deletions
Original file line numberDiff line numberDiff line change
@@ -47,15 +47,15 @@ import 'package:elastic_dashboard/widgets/nt_widgets/single_topic/toggle_button.
4747
import 'package:elastic_dashboard/widgets/nt_widgets/single_topic/toggle_switch.dart';
4848
import 'package:elastic_dashboard/widgets/nt_widgets/single_topic/voltage_view.dart';
4949

50-
typedef NTModelJsonProvider =
51-
NTWidgetModel Function({
50+
typedef NTModelJsonProvider<T extends NTWidgetModel> =
51+
T Function({
5252
required Map<String, dynamic> jsonData,
5353
required NTConnection ntConnection,
5454
required SharedPreferences preferences,
5555
});
5656

57-
typedef NTModelProvider =
58-
NTWidgetModel Function({
57+
typedef NTModelProvider<T extends NTWidgetModel> =
58+
T Function({
5959
required NTConnection ntConnection,
6060
required SharedPreferences preferences,
6161
required String topic,
@@ -64,17 +64,17 @@ typedef NTModelProvider =
6464
NT4StructMeta? ntStructMeta,
6565
});
6666

67-
typedef MultiTopicNTModelProvider =
68-
MultiTopicNTWidgetModel Function({
67+
typedef MultiTopicNTModelProvider<T extends MultiTopicNTWidgetModel> =
68+
T Function({
6969
required NTConnection ntConnection,
7070
required SharedPreferences preferences,
7171
required String topic,
7272
double? period,
7373
});
7474

75-
typedef NTWidgetProvider = NTWidget Function({Key? key});
75+
typedef NTWidgetProvider<T extends NTWidget> = T Function({Key? key});
7676

77-
class NTWidgetBuilder {
77+
class NTWidgetRegistry {
7878
static final Map<String, NTWidgetProvider> _widgetNameBuildMap = {};
7979

8080
static final Map<String, NTModelProvider> _modelNameBuildMap = {};
@@ -89,7 +89,7 @@ class NTWidgetBuilder {
8989

9090
static const double _normalSize = 128.0;
9191

92-
NTWidgetBuilder._();
92+
NTWidgetRegistry._();
9393

9494
static bool _initialized = false;
9595
static void ensureInitialized() {
@@ -556,120 +556,76 @@ class NTWidgetBuilder {
556556
}
557557

558558
static void registerSingleTopic<
559-
ModelType extends NTWidgetModel,
559+
ModelType extends SingleTopicNTWidgetModel,
560560
WidgetType extends NTWidget
561561
>({
562562
required String name,
563-
required SingleTopicNTWidgetModel Function({
564-
NT4Type? dataType,
565-
double period,
566-
required NT4StructMeta? ntStructMeta,
567-
required NTConnection ntConnection,
568-
required SharedPreferences preferences,
569-
required String topic,
570-
})
571-
model,
572-
required NTWidgetProvider widget,
573-
required NTWidgetModel Function({
574-
required Map<String, dynamic> jsonData,
575-
required NTConnection ntConnection,
576-
required SharedPreferences preferences,
577-
})
578-
fromJson,
563+
Set<String>? aliases,
564+
required NTModelProvider<ModelType> model,
565+
required NTWidgetProvider<WidgetType> widget,
566+
required NTModelJsonProvider<ModelType> fromJson,
579567
double? minWidth,
580568
double? minHeight,
581569
double? defaultWidth,
582570
double? defaultHeight,
583-
Set<String>? aliases,
584-
}) {
585-
registerWithAlias(
586-
names: {name, ...?aliases},
587-
model:
588-
({
589-
NT4Type? dataType,
590-
double? period,
591-
NT4StructMeta? ntStructMeta,
592-
required NTConnection ntConnection,
593-
required SharedPreferences preferences,
594-
required String topic,
595-
}) => model(
596-
dataType: dataType,
597-
period:
598-
period ??
599-
(preferences.getDouble(PrefKeys.defaultPeriod) ??
600-
Defaults.defaultPeriod),
601-
ntStructMeta: ntStructMeta,
602-
ntConnection: ntConnection,
603-
preferences: preferences,
604-
topic: topic,
605-
),
606-
widget: widget,
607-
fromJson:
608-
({
609-
required Map<String, dynamic> jsonData,
610-
required NTConnection ntConnection,
611-
required SharedPreferences preferences,
612-
}) => fromJson(
613-
jsonData: jsonData,
614-
ntConnection: ntConnection,
615-
preferences: preferences,
616-
),
617-
minWidth: minWidth,
618-
minHeight: minHeight,
619-
defaultWidth: defaultWidth,
620-
defaultHeight: defaultHeight,
621-
);
622-
}
571+
}) => registerWithAlias(
572+
names: {name, ...?aliases},
573+
model: model,
574+
widget: widget,
575+
fromJson: fromJson,
576+
minWidth: minWidth,
577+
minHeight: minHeight,
578+
defaultWidth: defaultWidth,
579+
defaultHeight: defaultHeight,
580+
);
623581

624582
static void registerMultiTopic<
625583
ModelType extends MultiTopicNTWidgetModel,
626584
WidgetType extends NTWidget
627585
>({
628586
required String name,
629-
required MultiTopicNTModelProvider model,
630-
required NTWidgetProvider widget,
631-
required NTModelJsonProvider fromJson,
587+
Set<String>? aliases,
588+
required MultiTopicNTModelProvider<ModelType> model,
589+
required NTWidgetProvider<WidgetType> widget,
590+
required NTModelJsonProvider<ModelType> fromJson,
632591
double? minWidth,
633592
double? minHeight,
634593
double? defaultWidth,
635594
double? defaultHeight,
636-
Set<String>? aliases,
637-
}) {
638-
registerWithAlias(
639-
names: {name, ...?aliases},
640-
model:
641-
({
642-
required NTConnection ntConnection,
643-
required SharedPreferences preferences,
644-
required String topic,
645-
double? period,
646-
NT4Type? dataType,
647-
NT4StructMeta? ntStructMeta,
648-
}) => model(
649-
ntConnection: ntConnection,
650-
preferences: preferences,
651-
topic: topic,
652-
period: period,
653-
),
654-
widget: widget,
655-
fromJson: fromJson,
656-
minWidth: minWidth,
657-
minHeight: minHeight,
658-
defaultWidth: defaultWidth,
659-
defaultHeight: defaultHeight,
660-
);
661-
}
595+
}) => registerWithAlias(
596+
names: {name, ...?aliases},
597+
model:
598+
({
599+
required NTConnection ntConnection,
600+
required SharedPreferences preferences,
601+
required String topic,
602+
double? period,
603+
NT4Type? dataType,
604+
NT4StructMeta? ntStructMeta,
605+
}) => model(
606+
ntConnection: ntConnection,
607+
preferences: preferences,
608+
topic: topic,
609+
period: period,
610+
),
611+
widget: widget,
612+
fromJson: fromJson,
613+
minWidth: minWidth,
614+
minHeight: minHeight,
615+
defaultWidth: defaultWidth,
616+
defaultHeight: defaultHeight,
617+
);
662618

663619
static void
664620
register<ModelType extends NTWidgetModel, WidgetType extends NTWidget>({
665621
required String name,
666-
required NTModelProvider model,
667-
required NTWidgetProvider widget,
668-
required NTModelJsonProvider fromJson,
669-
double? minWidth,
670-
double? minHeight,
671-
double? defaultWidth,
672-
double? defaultHeight,
622+
required NTModelProvider<ModelType> model,
623+
required NTWidgetProvider<WidgetType> widget,
624+
required NTModelJsonProvider<ModelType> fromJson,
625+
required double? minWidth,
626+
required double? minHeight,
627+
required double? defaultWidth,
628+
required double? defaultHeight,
673629
}) {
674630
_modelNameBuildMap.addAll({name: model});
675631
_modelJsonBuildMap.addAll({name: fromJson});
@@ -690,17 +646,17 @@ class NTWidgetBuilder {
690646
}
691647

692648
static void registerWithAlias<
693-
ModelType extends SingleTopicNTWidgetModel,
649+
ModelType extends NTWidgetModel,
694650
WidgetType extends NTWidget
695651
>({
696652
required Set<String> names,
697-
required NTModelProvider model,
698-
required NTWidgetProvider widget,
699-
required NTModelJsonProvider fromJson,
700-
double? minWidth,
701-
double? minHeight,
702-
double? defaultWidth,
703-
double? defaultHeight,
653+
required NTModelProvider<ModelType> model,
654+
required NTWidgetProvider<WidgetType> widget,
655+
required NTModelJsonProvider<ModelType> fromJson,
656+
required double? minWidth,
657+
required double? minHeight,
658+
required double? defaultWidth,
659+
required double? defaultHeight,
704660
}) {
705661
for (String name in names) {
706662
register(

lib/widgets/draggable_containers/models/nt_widget_container_model.dart

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import 'package:flutter_context_menu/flutter_context_menu.dart';
55
import 'package:provider/provider.dart';
66

77
import 'package:elastic_dashboard/services/nt_connection.dart';
8-
import 'package:elastic_dashboard/services/nt_widget_builder.dart';
8+
import 'package:elastic_dashboard/services/nt_widget_registry.dart';
99
import 'package:elastic_dashboard/services/settings.dart';
1010
import 'package:elastic_dashboard/services/text_formatter_builder.dart';
1111
import 'package:elastic_dashboard/widgets/dialog_widgets/dialog_dropdown_chooser.dart';
@@ -41,10 +41,10 @@ class NTWidgetContainerModel extends WidgetContainerModel {
4141
void init() {
4242
super.init();
4343

44-
minWidth = NTWidgetBuilder.getMinimumWidth(childModel);
45-
minHeight = NTWidgetBuilder.getMinimumHeight(childModel);
44+
minWidth = NTWidgetRegistry.getMinimumWidth(childModel);
45+
minHeight = NTWidgetRegistry.getMinimumHeight(childModel);
4646

47-
NTWidget? childWidget = NTWidgetBuilder.buildNTWidgetFromModel(childModel);
47+
NTWidget? childWidget = NTWidgetRegistry.buildNTWidgetFromModel(childModel);
4848

4949
if (childWidget != null) {
5050
child = childWidget;
@@ -88,7 +88,7 @@ class NTWidgetContainerModel extends WidgetContainerModel {
8888

8989
String type = tryCast(jsonData['type']) ?? '';
9090

91-
childModel = NTWidgetBuilder.buildNTModelFromJson(
91+
childModel = NTWidgetRegistry.buildNTModelFromJson(
9292
ntConnection,
9393
preferences,
9494
type,
@@ -352,7 +352,7 @@ class NTWidgetContainerModel extends WidgetContainerModel {
352352
childModel.unSubscribe();
353353
childModel.dispose();
354354

355-
childModel = NTWidgetBuilder.buildNTModelFromType(
355+
childModel = NTWidgetRegistry.buildNTModelFromType(
356356
ntConnection,
357357
preferences,
358358
switch (childModel) {
@@ -371,21 +371,21 @@ class NTWidgetContainerModel extends WidgetContainerModel {
371371
Defaults.defaultGraphPeriod,
372372
);
373373

374-
NTWidget? newWidget = NTWidgetBuilder.buildNTWidgetFromModel(childModel);
374+
NTWidget? newWidget = NTWidgetRegistry.buildNTWidgetFromModel(childModel);
375375

376376
newWidget ??= const EmptyNTWidget();
377377

378378
child = newWidget;
379379

380-
minWidth = NTWidgetBuilder.getMinimumWidth(childModel);
381-
minHeight = NTWidgetBuilder.getMinimumHeight(childModel);
380+
minWidth = NTWidgetRegistry.getMinimumWidth(childModel);
381+
minHeight = NTWidgetRegistry.getMinimumHeight(childModel);
382382

383383
notifyListeners();
384384
}
385385

386386
void updateMinimumSize() {
387-
minWidth = NTWidgetBuilder.getMinimumWidth(childModel);
388-
minHeight = NTWidgetBuilder.getMinimumHeight(childModel);
387+
minWidth = NTWidgetRegistry.getMinimumWidth(childModel);
388+
minHeight = NTWidgetRegistry.getMinimumHeight(childModel);
389389

390390
notifyListeners();
391391
}

lib/widgets/network_tree/networktables_tree_row.dart

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import 'package:shared_preferences/shared_preferences.dart';
55

66
import 'package:elastic_dashboard/services/nt4_type.dart';
77
import 'package:elastic_dashboard/services/nt_connection.dart';
8-
import 'package:elastic_dashboard/services/nt_widget_builder.dart';
8+
import 'package:elastic_dashboard/services/nt_widget_registry.dart';
99
import 'package:elastic_dashboard/services/settings.dart';
1010
import 'package:elastic_dashboard/widgets/draggable_containers/draggable_widget_container.dart';
1111
import 'package:elastic_dashboard/widgets/draggable_containers/models/nt_widget_container_model.dart';
@@ -198,7 +198,7 @@ class NetworkTableTreeRow {
198198
return null;
199199
}
200200

201-
return NTWidgetBuilder.buildNTModelFromType(
201+
return NTWidgetRegistry.buildNTModelFromType(
202202
ntConnection,
203203
preferences,
204204
entry?.meta,
@@ -229,7 +229,7 @@ class NetworkTableTreeRow {
229229
}) async {
230230
NTWidgetModel? primary = await getPrimaryWidget();
231231

232-
if (primary == null || !NTWidgetBuilder.isRegistered(primary.type)) {
232+
if (primary == null || !NTWidgetRegistry.isRegistered(primary.type)) {
233233
primary?.unSubscribe();
234234
primary?.softDispose(deleting: true);
235235
primary?.dispose();
@@ -248,7 +248,7 @@ class NetworkTableTreeRow {
248248
return null;
249249
}
250250

251-
NTWidget? widget = NTWidgetBuilder.buildNTWidgetFromModel(primary);
251+
NTWidget? widget = NTWidgetRegistry.buildNTWidgetFromModel(primary);
252252

253253
if (widget == null) {
254254
primary.unSubscribe();
@@ -257,8 +257,8 @@ class NetworkTableTreeRow {
257257
return null;
258258
}
259259

260-
double width = NTWidgetBuilder.getDefaultWidth(primary);
261-
double height = NTWidgetBuilder.getDefaultHeight(primary);
260+
double width = NTWidgetRegistry.getDefaultWidth(primary);
261+
double height = NTWidgetRegistry.getDefaultHeight(primary);
262262

263263
return NTWidgetContainerModel(
264264
ntConnection: ntConnection,
@@ -274,7 +274,7 @@ class NetworkTableTreeRow {
274274
if (primary == null) {
275275
return null;
276276
}
277-
NTWidget? widget = NTWidgetBuilder.buildNTWidgetFromModel(primary);
277+
NTWidget? widget = NTWidgetRegistry.buildNTWidgetFromModel(primary);
278278

279279
if (widget == null) {
280280
primary.unSubscribe();
@@ -284,8 +284,8 @@ class NetworkTableTreeRow {
284284
return null;
285285
}
286286

287-
double width = NTWidgetBuilder.getDefaultWidth(primary);
288-
double height = NTWidgetBuilder.getDefaultHeight(primary);
287+
double width = NTWidgetRegistry.getDefaultWidth(primary);
288+
double height = NTWidgetRegistry.getDefaultHeight(primary);
289289

290290
return WidgetContainer(
291291
title: rowName,

0 commit comments

Comments
 (0)