1
part of auto_size_text;
2

3
/// Controller to synchronize the fontSize of multiple AutoSizeTexts.
4
class AutoSizeGroup {
5
  final _listeners = <_AutoSizeTextState, double>{};
6
  var _widgetsNotified = false;
7
  var _fontSize = double.infinity;
8

9 1
  void _register(_AutoSizeTextState text) {
10 1
    _listeners[text] = double.infinity;
11
  }
12

13 1
  void _updateFontSize(_AutoSizeTextState text, double maxFontSize) {
14 1
    final oldFontSize = _fontSize;
15 1
    if (maxFontSize <= _fontSize) {
16 1
      _fontSize = maxFontSize;
17 1
      _listeners[text] = maxFontSize;
18 1
    } else if (_listeners[text] == _fontSize) {
19 1
      _listeners[text] = maxFontSize;
20 1
      _fontSize = double.infinity;
21 1
      for (final size in _listeners.values) {
22 1
        if (size < _fontSize) _fontSize = size;
23
      }
24
    } else {
25 1
      _listeners[text] = maxFontSize;
26
    }
27

28 1
    if (oldFontSize != _fontSize) {
29 1
      _widgetsNotified = false;
30 1
      scheduleMicrotask(_notifyListeners);
31
    }
32
  }
33

34 1
  void _notifyListeners() {
35 1
    if (_widgetsNotified) {
36
      return;
37
    } else {
38 1
      _widgetsNotified = true;
39
    }
40

41 1
    for (final textState in _listeners.keys) {
42 1
      if (textState.mounted) {
43 1
        textState._notifySync();
44
      }
45
    }
46
  }
47

48 1
  void _remove(_AutoSizeTextState text) {
49 1
    _updateFontSize(text, double.infinity);
50 1
    _listeners.remove(text);
51
  }
52
}

Read our documentation on viewing source code .

Loading