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

Duit-Foundation / flutter_duit / 21114799138

18 Jan 2026 04:17PM UTC coverage: 79.272% (-0.9%) from 80.184%
21114799138

push

github

web-flow
feat: SSE connection handling (#325)

3 of 66 new or added lines in 4 files covered. (4.55%)

4 existing lines in 3 files now uncovered.

4356 of 5495 relevant lines covered (79.27%)

34.12 hits per line

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

59.18
/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/stub.dart";
7
import "package:flutter_duit/src/view/view.dart";
8

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

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

14
  DuitViewModel _view = const StubDuitView();
15

16
  @override
17
  late BuildContext buildContext;
18

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

123
  @override
×
124
  DuitView? get currentView => _view;
×
125
}
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