Buscar pacotes, repositórios e categorias de apps

Capa de transformable_list_view
Detalhes do pacotev0.8.0

transformable_list_view

Widget que estende o ListView padrão com a capacidade de adicionar animações de transformação de itens conforme sua posição de rolagem

AndroidiOSWebmacOSWindowsLinux
Downloads em 30 dias
212
Curtidas
133
Pontos Pub
150

Instalar pacote

flutter pub add transformable_list_view

Visão geral do pacote

Orientação gerada a partir de informações públicas. Apenas para referência.

Um widget Flutter que estende o ListView para permitir animações suaves de transformação para itens da lista com base na posição de rolagem. Permite que desenvolvedores criem listas dinâmicas e interativas com efeitos visuais como escala, rotação ou desvanecimento quando os itens entram ou saem da janela visível. Ideal para melhorar a experiência do usuário em interfaces com muita rolagem. O pacote oferece suporte a todas as principais plataformas, incluindo Android, iOS, Web, macOS, Windows e Linux.

Casos de uso

  • Criando listas animadas de rolagem
  • Melhorando a interface com transformações acionadas por rolagem
  • Construindo carrosséis de produtos envolventes
  • Projetando feeds de conteúdo imersivos
  • Implementando efeitos semelhantes ao paralaxe
  • Adicionando feedback visual durante o rolagem

Principais recursos

  • Transformações de item baseadas na posição de rolagem
  • Transições de animação suaves
  • Compatibilidade multiplataforma
  • Integração fácil com código ListView existente
  • Suporte para alterações de escala, rotação e opacidade
  • Curvas e tempo de animação personalizáveis

Indicado para

  • Designers de UI procurando elementos interativos
  • Desenvolvedores criando animações acionadas por rolagem
  • Aplicativos que exigem interações envolventes com listas
  • Projetos direcionados para múltiplas plataformas
  • Equipes focadas em experiências de usuário refinadas

Considerações

  • Pode afetar o desempenho com grandes conjuntos de dados
  • Requer ajuste cuidadoso dos parâmetros de animação
  • Mais adequado para tamanhos moderados de lista
  • Não é ideal para animações altamente complexas
  • Necessita de testes em diferentes dispositivos e plataformas

README original

Snapshot do README original do repositório-fonte vinculado. Consulte o repositório para o conteúdo mais recente.

Scrollable widgets with easily customizable transform animations.

Features

The package contains 3 widgets:

  • TransformableListView that extends ListView
  • TransformableSliverList that extends SliverList
  • TransformableSliver that extends SliverToBoxAdapter

Each of then has getTransformMatrix callback. In the callback you need to return Matrix4 that represetns transormation of the child at the current moment. If you don't need any transformations you can simply return Matrix4.identity().

In getTransformMatrix callback you receive TransformableListItem with the data about list item:

  • Offset offset is main axis offset of the child. By default (with vertical, non reversed scroll view) offset.dx is always 0 while offset.dy is the distance between top edge of the child and top edge of the viewport.
  • Size size is the child size received from its RenderBox.
  • SliverConstraints constraints describes the current scroll state of the viewport from the point of view of the sliver receiving the constraints.
  • int? index is the index of the child. Will be null when using TransformableSliver.
  • TransformableListItemPosition position is child position on the main axis viewport. Can be .topEdge, .middle or .bottomEdge.
  • double visibleExtent is currently visible portion of item. For example, if item is hidden it will be 0 while it's completely displayed will equal to size.height or size.width depending on axis.

Usage

First you need to add TransformableListView where you need transformations

TransformableListView.builder(
  getTransformMatrix: getTransformMatrix,
  itemBuilder: (context, index) {
    return Container(
      height: 100,
      margin: const EdgeInsets.symmetric(
        horizontal: 16,
        vertical: 4,
      ),
      decoration: BoxDecoration(
        color: index.isEven ? Colors.grey : Colors.blueAccent,
        borderRadius: BorderRadius.circular(20),
      ),
      alignment: Alignment.center,
      child: Text(index.toString()),
    );
  },
  itemCount: 30,
),

Second you need to implement getTransformMatrix callback

Matrix4 getTransformMatrix(TransformableListItem item) {
  /// final scale of child when the animation is completed
  const endScaleBound = 0.3;

  /// 0 when animation completed and [scale] == [endScaleBound]
  /// 1 when animation starts and [scale] == 1
  final animationProgress = item.visibleExtent / item.size.height;

  /// result matrix
  final paintTransform = Matrix4.identity();

  /// animate only if item is on edge
  if (item.position != TransformableListItemPosition.middle) {
    final scale = endScaleBound + ((1 - endScaleBound) * animationProgress);

    paintTransform
      ..translate(item.size.width / 2)
      ..scale(scale)
      ..translate(-item.size.width / 2);
  }

  return paintTransform;
}

You can implement your own callback or check more at /example folder.

Additional information

You can read more about matrix transfomations in Flutter here. Any feedback and PRs are welcome.

Developed by TBR Group.

Categorias

Repositório-fonte

Projetos que usam este pacote

Ainda não há dados.