• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

Duit-Foundation / flutter_duit / 21026233449

15 Jan 2026 09:26AM UTC coverage: 80.184% (-8.3%) from 88.441%
21026233449

push

github

web-flow
feat: Capability-based API migration pt2 (#323)

162 of 408 new or added lines in 23 files covered. (39.71%)

328 existing lines in 17 files now uncovered.

4354 of 5430 relevant lines covered (80.18%)

34.33 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

61.22
/lib/src/capabilities/view_capability_impl.dart
1
import "dart:async";
2

3
import "package:duit_kernel/duit_kernel.dart";
4
import "package:flutter/widgets.dart";
5
import "package:flutter_duit/flutter_duit.dart";
6
import "package:flutter_duit/src/view/view.dart";
7

8
final class DuitViewManager with ViewModelCapabilityDelegate {
9
  late final UIDriver _driver;
10

11
  final _eventStreamController = StreamController<UIDriverEvent>.broadcast();
12

13
  late final DuitViewModel _view;
14

15
  @override
16
  late BuildContext buildContext;
17

18
  @override
4✔
19
  @preferInline
20
  void addUIDriverError(Object error, [StackTrace? stackTrace]) =>
21
      _eventStreamController.addError(
8✔
22
        error,
23
        stackTrace,
24
      );
25

26
  @override
340✔
27
  @preferInline
28
  void addUIDriverEvent(UIDriverEvent event) =>
29
      _eventStreamController.add(event);
680✔
30

31
  @override
340✔
32
  @preferInline
33
  Stream<UIDriverEvent> get eventStream => _eventStreamController.stream;
680✔
34

35
  @override
340✔
36
  void notifyWidgetDisplayStateChanged(String viewTag, int state) {
37
    try {
38
      _view.changeViewState(viewTag, state);
680✔
39
    } catch (e, s) {
40
      _driver.logError(
8✔
41
        "View not initialized and can`t be disposed",
42
        e,
43
        s,
44
      );
45
    }
46
  }
47

48
  @override
340✔
49
  @preferInline
50
  set context(BuildContext value) => buildContext = value;
340✔
51

52
  Future<DuitView?> _parseSingeLayoutModel(Map<String, dynamic> json) async {
340✔
53
    if (LayoutStructValidator.isWidgetStruct(json)) {
340✔
54
      _view = CommonDuitView();
680✔
55
      await _view.prepareModel(
680✔
56
        json,
57
        _driver,
340✔
58
      );
59
      return _view;
340✔
60
    } else if (LayoutStructValidator.isRootStruct(json)) {
4✔
NEW
61
      _view = CommonDuitView();
×
NEW
62
      final widget = Map<String, dynamic>.from(json["root"]);
×
NEW
63
      await _view.prepareModel(
×
64
        widget,
NEW
65
        _driver,
×
66
      );
NEW
67
      return _view;
×
68
    } else if (LayoutStructValidator.isWidgetsStruct(json)) {
4✔
69
      return null;
70
    } else {
71
      return null;
72
    }
73
  }
74

75
  @override
340✔
76
  Future<DuitView?> prepareLayout(Map<String, dynamic> json) async {
77
    if (json.containsKey("embedded")) {
340✔
78
      final embedded = json["embedded"];
4✔
79
      if (embedded is List) {
4✔
80
        await DuitRegistry.registerComponents(
4✔
81
          embedded.cast<Map<String, dynamic>>(),
4✔
82
        );
83
      }
84
    }
85

86
    final compatView = await _parseSingeLayoutModel(json);
340✔
87

88
    if (enableSharedDrivers && compatView == null) {
NEW
89
      if (LayoutStructValidator.isWidgetStruct(json)) {
×
90
        _view = SharedDuitView();
×
91

NEW
92
        final collection = Map.from(json["widgets"]);
×
93

94
        final widgets = collection.entries.cast<MapEntry<String, dynamic>>();
×
95

96
        for (final widget in widgets) {
×
97
          await _view.prepareModel(
×
98
            <String, dynamic>{
×
99
              widget.key: widget.value,
×
100
            },
101
            _driver,
×
102
          );
103
        }
104
        return _view;
×
105
      }
106
      return null;
107
    }
108
    return compatView;
109
  }
110

111
  @override
4✔
112
  void releaseResources() {
113
    _eventStreamController.close();
8✔
114
  }
115

116
  @override
×
117
  bool isWidgetReady(String viewTag) => _view.isWidgetReady(viewTag);
×
118

119
  @override
348✔
120
  void linkDriver(UIDriver driver) => _driver = driver;
348✔
121

NEW
122
  @override
×
NEW
123
  DuitView? get currentView => _view;
×
124
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc