Pakete, Repositories und App-Kategorien suchen

Cover von scroll_to_id
Paketdetailsv1.5.1

scroll_to_id

scroll_to_id ist eine Flutter-Bibliothek, die das automatische Scrollen auf der Seite ermöglicht, indem man die für jedes Widget im ScrollView definierte ID auswählt.

AndroidiOSWebmacOSWindowsLinux
30-Tage-Downloads
177
Likes
61
Pub-Punkte
150

Paket installieren

flutter pub add scroll_to_id

Paketübersicht

Aus öffentlichen Paketdaten erstellte Orientierung.

scroll_to_id ist ein Flutter-Paket, das die automatische Scrollung zu einem bestimmten Widget innerhalb einer scrollbaren Ansicht ermöglicht, indem auf dessen eindeutige ID verwiesen wird. Es vereinfacht die Navigation in langen Listen oder scrollbaren Layouts, indem Entwickler programmgesteuert zu Elementen basierend auf ihren zugewiesenen IDs scrollen können. Ideal für dynamischen Inhalt, Ankerlinks oder Formularvalidierung mit Scroll-zu-Fehler-Funktionen. Das Paket unterstützt alle wichtigen Plattformen und lässt sich nahtlos in bestehende Scrollansichten integrieren.

Anwendungsfälle

  • Navigation zu bestimmten Listenartikeln
  • Scrollen zu Formularfeldern mit Fehlern
  • Ankerlinks in langen Seiten implementieren
  • Glatte Abschnittsübergänge erstellen
  • Automatisches Scrollen nach Navigation
  • Verbesserung der Barrierefreiheit mit Tastenkombinationen

Hauptmerkmale

  • Zum Widget per ID scrollen
  • Unterstützt alle Flutter-Plattformen
  • Minimale Einrichtung erforderlich
  • Funktioniert mit jedem scrollbaren Widget
  • Keine globalen Schlüssel erforderlich
  • Effizienter Leistung mit großen Listen

Geeignet für

  • Entwickler, die Langform-Inhalts-Apps erstellen
  • Teams, die dynamische Listen verwenden
  • Apps, die Anchor-Navigation erfordern
  • Zugänglichkeitsorientierte Anwendungen
  • formularitätsstarke Schnittstellen

Hinweise

  • IDs müssen innerhalb der Scrollansicht eindeutig sein
  • Die Leistung kann bei sehr großen Listen variieren
  • Erfordert die richtige Widget-Struktur
  • Nicht geeignet für nicht scrollbare Container
  • Beschränkt auf direkte Kinder von scrollbaren Widgets

Original-README

Originaler README-Schnappschuss aus dem verknüpften Quell-Repository. Aktuelle Inhalte finden Sie im Repository.

Scroll to id

scroll_to_id is a Flutter library for Scroll to id in ScrollView

Image Image

Installing

You should add the following to your pubspec.yaml file:

dependencies:
  scroll_to_id: ^1.5.1

Getting Started

To start, import the dependency in your code:

import 'package:scroll_to_id/scroll_to_id.dart';

Next, to define ScrollController:

final scrollController = ScrollController();

Next, to create instance with ScrollController:

ScrollToId scrollToId = ScrollToId(scrollController: scrollController);

Next, to set InteractiveScrollViewer and ScrollContent:

InteractiveScrollViewer(
  scrollToId: scrollToId,
  children: <ScrollContent>[
    ScrollContent(
      id: 'a',
      child: Container(
        color: Colors.red,
        width: 300,
        height: 200,
      )
    ),
    ScrollContent(
      id: 'b',
      child: Container(
        color: Colors.green,
        width: 300,
        height: 200,
      )
    ),
  ],
)

id property is destination of scroll. Do not use the same id.

Next, to scroll to id:

/// animate
scrollToId.animateTo(
  'b',
  duration: Duration(milliseconds: 500),
  curve: Curves.ease
);

/// jump
scrollToId.jumpTo('b');

Examples

import 'package:flutter/material.dart';
import 'package:scroll_to_id/scroll_to_id.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  ScrollToId scrollToId;
  final ScrollController scrollController = ScrollController();

  List<Color> _colorList = [
    Colors.green,
    Colors.red,
    Colors.yellow,
    Colors.blue
  ];

  void _scrollListener() {
    print(scrollToId.idPosition());
  }

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

    /// Create ScrollToId instance
    scrollToId = ScrollToId(scrollController: scrollController);

    scrollController.addListener(_scrollListener);
  }

  /// Generate 10 Container
  /// Case [Axis.horizontal] set buildStackHorizontal() to body
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Scroll to id',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Scroll to id'),
        ),
        body: buildStackVertical(),
      ),
    );
  }

  /// [Axis.vertical]
  /// https://raw.githubusercontent.com/wiki/yusukeinouehatchout/scroll_to_id/gif/scroll_to_id_vertical.gif
  Widget buildStackVertical() {
    return Stack(
      alignment: Alignment.topRight,
      children: [
        InteractiveScrollViewer(
          scrollToId: scrollToId,
          children: List.generate(10, (index) {
            return ScrollContent(
              id: '$index',
              child: Container(
                alignment: Alignment.center,
                width: double.infinity,
                height: 200,
                child: Text(
                  '$index',
                  style: TextStyle(color: Colors.white, fontSize: 50),
                ),
                color: _colorList[index % _colorList.length],
              ),
            );
          }),
        ),
        Container(
          decoration: BoxDecoration(
            border: Border.all(color: Colors.white, width: 3),
          ),
          child: Column(
            mainAxisSize: MainAxisSize.min,
            children: List.generate(10, (index) {
              return GestureDetector(
                child: Container(
                  width: 100,
                  alignment: Alignment.center,
                  height: 50,
                  child: Text(
                    '$index',
                    style: TextStyle(color: Colors.white),
                  ),
                  color: _colorList[index % _colorList.length],
                ),
                onTap: () {
                  /// scroll with animation
                  scrollToId.animateTo('$index',
                      duration: Duration(milliseconds: 500),
                      curve: Curves.ease);

                  /// scroll with jump
                  // scrollToId.jumpTo('$index');
                },
              );
            }),
          ),
        )
      ],
    );
  }

  /// [Axis.horizontal]
  /// https://raw.githubusercontent.com/wiki/yusukeinouehatchout/scroll_to_id/gif/scroll_to_id_horizontal.gif
  Widget buildStackHorizontal() {
    return Column(
      children: [
        Container(
          width: double.infinity,
          decoration: BoxDecoration(
            border: Border.all(color: Colors.white, width: 3),
          ),
          child: Row(
            mainAxisSize: MainAxisSize.min,
            children: List.generate(10, (index) {
              return Expanded(
                child: GestureDetector(
                  child: Container(
                    alignment: Alignment.center,
                    height: 80,
                    child: Text(
                      '$index',
                      style: TextStyle(color: Colors.white),
                    ),
                    color: _colorList[index % _colorList.length],
                  ),
                  onTap: () {
                    /// scroll with animation
                    scrollToId.animateTo('$index',
                        duration: Duration(milliseconds: 500),
                        curve: Curves.ease);

                    /// scroll with jump
                    // scrollToId.jumpTo('$index');
                  },
                ),
              );
            }),
          ),
        ),
        Expanded(
          child: InteractiveScrollViewer(
            scrollToId: scrollToId,
            scrollDirection: Axis.horizontal,
            children: List.generate(10, (index) {
              return ScrollContent(
                id: '$index',
                child: Container(
                  alignment: Alignment.center,
                  width: 200,
                  child: Text(
                    '$index',
                    style: TextStyle(color: Colors.white, fontSize: 50),
                  ),
                  color: _colorList[index % _colorList.length],
                ),
              );
            }),
          ),
        ),
      ],
    );
  }
}

Kategorien

Quell-Repository

Projekte, die dieses Paket verwenden

Noch keine Daten verfügbar.