flutter_anchorlable

Videotogif (1) This package provides freely scrollable widgets and their controllers, with key as the anchor.
You can play the demo here!

install

In the pubspec.yaml of your flutter project, add the following dependency:

dependencies:
  flutter_anchorlable: <latest_version>

In your library add the following import:

import 'package:flutter_anchorlable/flutter_anchorlable.dart';

Usage

AnchorlableController is a controller that enables scrolling for widgets owned by the attached client.
By specifying initialAnchorKey, the initial scroll position of the attached client can be specified.

final controller=AnchorlableController();

jumpToAnchor jumps to the specified key.

controller.jumpToAnchor(anchorKey);

animateToAnchor performs animated scrolling for widgets with the target key.
If you are not sure which Curve to choose, you may find the this helpful.

onPressed: () async {
  await controller.animateToAnchor(anchor,
                duration: const Duration(seconds: 1),
                curve: Curves.fastOutSlowIn);
}

AnchorlableScrollColumn can be used to arrange widgets vertically.
It requires a Key and AnchorlableController.
By using AnchorlableController, it is possible to scroll the widget with the Key existing in the children.

final controller=AnchorlableController();
const anchorKey = GlobalObjectKey('anchor');
AnchorlableScrollColumn(
  controller:controller,
  children:[
    ...
    Container(
      child: Text(
        key:anchorKey,
        'Widgets you want to anchor'
        ),
    ),
    ...
  ],
)

AnchorlableScrollRow is a side-by-side version of AnchorlableScrollColumn.

final controller=AnchorlableController();
const anchorKey = GlobalObjectKey('anchor');
AnchorlableScrollRow(
  controller:controller,
  children:[
    ...
    Container(
      child: Text(
        key:anchorKey,
        'Widgets you want to anchor'
        ),
    ),
    ...
  ],
);

AnchorlableSliverColumn is an AnchorlableWidget that can be used with CustomScrollView. Unlike AnchorlableScrollColumn, it requires some work to handle AnchorlableController.

final controller = AnchorlableController();
const anchorKey = GlobalObjectKey('anchor');
CustomScrollView(
  controller: controller,
  slivers: [
    AnchorlableSliverColumn(,
      children: [
        ...
        Container(
          child: Text(
            key:anchorKey,
            'Widgets you want to anchor'
            ),
        ),
        ...
      ],
    ),
  ],
);

AnchorlableSliverRow is a side-by-side version of AnchorlableSliverColumn.

final controller = AnchorlableController();
const anchorKey = GlobalObjectKey('anchor');
CustomScrollView(
  controller: controller,
  slivers: [
    AnchorlableSliverRow(
      children: [
        ...
        Container(
          child: Text(
            key:anchorKey,
            'Widgets you want to anchor'
            ),
        ),
        ...
      ],
    ),
  ],
);

Contact

If you have anything you want to inform me (@yama-yeah), such as suggestions to enhance this package or functionalities you want etc, feel free to make issues on GitHub