Тип аргумента 'RevealedOffset' не может быть назначен типу параметра 'num' - PullRequest
0 голосов
/ 10 ноября 2018

Я получаю эту ошибку при использовании класса EnsureVisibleWhenFocused, который я определил, как показано ниже. Я импортировал правильные файлы, и полученная ошибка указана в заголовке!

Ошибка в viewport.getOffsetToReveal(object, 0.0) и viewport.getOffsetToReveal(object, 1.0). Я пытался найти решения, но нигде не мог его найти.

class EnsureVisibleWhenFocused extends StatefulWidget {
const EnsureVisibleWhenFocused({
Key key,
@required this.child,
@required this.focusNode,
this.curve: Curves.ease,
this.duration: const Duration(milliseconds: 100),
}) : super(key: key);

/// The node we will monitor to determine if the child is focused
final FocusNode focusNode;

/// The child widget that we are wrapping
final Widget child;

/// The curve we will use to scroll ourselves into view.
///
/// Defaults to Curves.ease.
final Curve curve;

/// The duration we will use to scroll ourselves into view
///
/// Defaults to 100 milliseconds.
final Duration duration;

EnsureVisibleWhenFocusedState createState() =>
  new EnsureVisibleWhenFocusedState();
}

class EnsureVisibleWhenFocusedState extends State<EnsureVisibleWhenFocused> 
{
@override
void initState() {
  super.initState();
  widget.focusNode.addListener(_ensureVisible);
}

@override
void dispose() {
  super.dispose();
  widget.focusNode.removeListener(_ensureVisible);
}

Future<Null> _ensureVisible() async {
// Wait for the keyboard to come into view
// TODO: position doesn't seem to notify listeners when metrics change,
// perhaps a NotificationListener around the scrollable could avoid
// the need insert a delay here.
await Future.delayed(const Duration(milliseconds: 300));

if (!widget.focusNode.hasFocus) return;

final RenderObject object = context.findRenderObject();
final RenderAbstractViewport viewport = RenderAbstractViewport.of(object);
assert(viewport != null);

ScrollableState scrollableState = Scrollable.of(context);
assert(scrollableState != null);

ScrollPosition position = scrollableState.position;
double alignment;
if (position.pixels > viewport.getOffsetToReveal(object, 0.0)) {
  // Move down to the top of the viewport
  alignment = 0.0;
} else if (position.pixels < viewport.getOffsetToReveal(object, 1.0)) {
  // Move up to the bottom of the viewport
  alignment = 1.0;
} else {
  // No scrolling is necessary to reveal the child
  return;
}
position.ensureVisible(
  object,
  alignment: alignment,
  duration: widget.duration,
  curve: widget.curve,
);
}

Widget build(BuildContext context) => widget.child;

Ответы [ 2 ]

0 голосов
/ 10 мая 2019

нам нужно передать значение смещения функции viewport.getOffsetToReveal

viewport.getOffsetToReveal(object, 1.0).offset
0 голосов
/ 10 ноября 2018

Хорошо, я нашел решение. нам нужно добавить .offset к этим функциям getOffsetToReveal. Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...