initState method

  1. @override
void initState()
override

Implementation

@override
void initState() {
  super.initState();

  _verticalController.addListener(() {
    if (caller.isEmpty ||
        DateTime.now().millisecondsSinceEpoch - lastCall >
            widget.scrollTimeout) {
      caller = 'vertical';
    }
    lastCall = DateTime.now().millisecondsSinceEpoch;

    if (caller == 'vertical') {
      _internalController.jumpTo(_verticalController.offset);
      if (widget.freezeColumns > 0) {
        _freezeController.jumpTo(_verticalController.offset);
      }
    }
  });

  _internalController.addListener(() {
    if (caller.isEmpty ||
        DateTime.now().millisecondsSinceEpoch - lastCall >
            widget.scrollTimeout) {
      caller = 'internal';
    }
    lastCall = DateTime.now().millisecondsSinceEpoch;

    if (caller == 'internal') {
      _verticalController.jumpTo(_internalController.offset);
      if (widget.freezeColumns > 0) {
        _freezeController.jumpTo(_internalController.offset);
      }
    }
  });

  if (widget.freezeColumns > 0) {
    _freezeController.addListener(() {
      if (caller.isEmpty ||
          DateTime.now().millisecondsSinceEpoch - lastCall >
              widget.scrollTimeout) {
        caller = 'freeze';
      }
      lastCall = DateTime.now().millisecondsSinceEpoch;

      if (caller == 'freeze') {
        _verticalController.jumpTo(_freezeController.offset);
        _internalController.jumpTo(_freezeController.offset);
      }
    });
  }
}