패키지, 저장소 및 앱 카테고리 검색

material_table_view 표지
패키지 상세v5.5.2

material_table_view

다양한 데이터 테이블 사용 사례를 위한 포괄적이고 기능이 풍부하며 직관적인 UI/UX 위젯 솔루션으로, 어떤 Flutter 앱에도 쉽게 통합할 수 있습니다.

AndroidiOSWebmacOSWindowsLinux
30일 다운로드
1.3만
좋아요
254
Pub 점수
150

패키지 설치

flutter pub add material_table_view

패키지 개요

공개 정보를 바탕으로 생성한 선택 가이드입니다.

다양한 테이블 사용 사례를 처리할 수 있도록 설계된 포괄적이고 직관적인 Flutter용 데이터 테이블 위젯으로, 풍부한 기능과 원활한 통합을 제공합니다. 안드로이드, iOS, 웹, macOS, 윈도우, 리눅스를 포함한 모든 주요 플랫폼에서 매끄러운 UI/UX 경험을 제공합니다. 정렬, 필터링, 페이지네이션 및 반응형 레이아웃을 지원하는 복잡한 테이블 구현을 간소화하여, 구조화된 데이터 표시가 필요한 앱에 이상적입니다. 깔끔한 API는 개발자가 광범위한 맞춤 설정 없이도 강력한 테이블 기능을 빠르게 추가할 수 있게 해줍니다.

사용 사례

  • 구조화된 데이터셋 표시
  • 관리자 대시보드 만들기
  • 데이터 중심 보고 인터페이스 구축
  • 정렬 및 필터링 가능한 테이블 구현
  • 반응형 테이블 레이아웃 지원

주요 기능

  • 내장된 정렬 및 필터링
  • 다중 플랫폼에 걸친 반응형 디자인
  • 페이지네이션 지원
  • 기존 Flutter 앱과의 간편한 통합
  • 사용자 정의 스타일 및 열 정의

적합한 대상

  • 데이터 집약형 애플리케이션을 개발하는 개발자
  • 크로스 플랫폼 테이블 일관성을 필요로 하는 팀
  • 고급 테이블 상호작용을 필요로 하는 프로젝트
  • 대규모 데이터셋을 갖춘 UI 중심의 Flutter 앱

고려 사항

  • 복잡한 로직을 처리하기 위해 추가적인 상태 관리가 필요할 수 있습니다
  • 최적화 없이 매우 큰 데이터 세트를 사용할 경우 성능이 저하될 수 있습니다
  • 제한된 내장 내보내기 기능
  • 간단한 목록보다는 중간에서 대규모 데이터 세트에 적합

원본 README

연결된 소스 저장소의 README 원문 스냅샷입니다. 최신 내용은 저장소에서 확인하세요.

material_table_view

pub package MIT License Netlify Status

Comprehensive, feature-rich and intuitive UI/UX widget solution for many data table use cases that is easy to integrate into any Flutter app.

Demo app

The source code for the demo app is included in the package example and is available here.

Demo app compiled as an Android app is available on the Google Play.

Demo app compiled as a web app is hosted here.

Project goals

  1. To provide intuitive, visually consistent and customizable UI/UX with opinionated defaults.
  2. To make the solution adaptable to any screen size, any input method and any platform.
  3. To keep public API as stable as possible.
  4. To keep as many features optional as possible.
  5. To leave state management completely up to the developer: although some state management solutions might work better than others, the project should never dictate the choice.
  6. To avoid dependencies as much as possible.
  7. To keep performance in mind as much as possible

Features

  • Customizability and reactivity: all headers, footers, rows and cells are widgets, which makes it easier to handle state changes as well as to infinitely customize the content.
  • Both horizontal and vertical scrolling allowing to display large amount of data to the user.
  • Lazily built fixed-height rows allowing for billions of rows to be in one table. Practice commonly known as virtualization.
  • Optional dynamic height for each row allowing for more use cases.
  • ExpandableTableRow widget that animates row expansion and shrinking.
  • Fixed-width columns that can be frozen (fixed) at the edge of a screen instead of getting scrolled off-screen. This helps the user not to lose a row-identifying information while scrolling horizontally. Columns will automatically be unfrozen in case of insufficient horizontal space based on a developer-defined freeze priorities enabling a responsive design when the table will adjust to any screen size be it mobile or desktop.
  • sticky column property, which causes frozen columns to scroll off of the edge but come back upon scrolling in the other direction to conserve the horizontal space when it's limited.
  • Support for a custom individual row widget wrapper allowing the developer to wrap each individual row in on InkWell while containing all cell widgets inside enabling for many material interactions within that row.
  • Support for placeholder rows.
  • Support for custom optionally animated shading of the placeholder rows allowing the shader to depend on a vertical scrolling offset and to start or stop animating whenever any or none of the placeholders are visible.
  • Included shimmer shader that allows for animated linear gradient to be applied to placeholder rows.
  • Scroll behaviour defined by an application theme used including scroll physics, overscroll effects, etc. It means that the platform-default scrolling behaviour will be used by default unless overridden.
  • Customizable vertical and horizontal scrollbar.
  • Customizable animated wiggly dividers separating frozen and scrolled columns.
  • Horizontally scrollable header and footer support.
  • SliverTableView - sliver variant of a table view which can be used in a CustomScrollView alongside other slivers (including other instances of the SliverTableView) to be scrolled vertically by a single view. It features sticky header and footer, and the same capabilities as a regular TableView.
  • TableColumnControlHandlesPopupRoute - a route that displays a custom popup as well as column control handles over a TableView or a SliverTableView that allow user to resize and reorder the columns.
  • Row reordering feature implemented with Flutter's reorderable list mechanisms.
  • Full RTL layout support.

Usage

TableView.builder(
  columns: [
    const TableColumn(
      width: 56.0,
      freezePriority: 100,
    ),
    for (var i = 1; i < 100; i++)
      const TableColumn(width: 64),
  ],
  rowCount: 1048576,
  rowHeight: 56.0, // optional, but highly recommended
  rowBuilder: (context, row, contentBuilder) {
    if (noDataYetFor(row)) {
      return null; // to use a placeholder
    }

    // When [freezePriority] or [placeholderShade] are used, some widgets may not be used here.
    // For more information see the paragraph below.
    // To set the background color the row can be wrapped in a [ColoredBox].
    return Material(
      type: MaterialType.transparency, // only this type may be used to wrap the entire row
      child: InkWell(
        onTap: () => print('Row $row clicked'),
        child: contentBuilder(
          context,
          (context, column) => Text('$column'), // build a cell widget, any widget can be used here
        ),
      ),
    );
  },
  // specify other parameters for other features
),

Limitations

Row wrapping widgets restriction

Whenever at least one column gets frozen or placeholder shading is being used, the table starts using custom composition to paint itself for optimization purposes. In this case, restrictions described below start to apply.

Some widgets can not be used to wrap row widget built in a rowBuilder and placeholderBuilder functions. Any widget that may need to utilize compositing will either cause an exception or will not work as expected. This includes widgets like RepaintBoundary, Opacity, ShaderMask, clipping widgets and more.

Material widget may only be used with a specified type of MaterialType.transparency, which is the only type not requiring compositing. To set the background color ColoredBox can be used instead.

Column, Row and Flex widgets will throw a runtime exception upon painting when their children are overflowing their bounds, because they'll try to clip their children in case of overflow.

For some of these, special alternatives are provided by the package that will work for that purpose (and that purpose only):

  • TableRowOpacity - an alternative for Opacity widget;
  • TableRowFadeTransition - an alternative for FadeTransition widget;
  • tableRowDefaultAnimatedSwitcherTransitionBuilder function - an alternative for the AnimatedSwitcher.defaultTransitionBuilder function which can be used as a transitionBuilder for the AnimatedSwitcher in that context as a default one will not work.

If any alternative you need is not available, feel free to use GitHub Discussions to search for an existing idea or to create a new one.

Drawing on top of cells in the row widget might not work as expected.

These limitations do not apply to cell widgets built by a cellBuilder closure.

Known issues

  • After the first column gets frozen on the right side, all columns after it suddenly disappear when they should either stay or get animated away. This issue appears only when a large enough right scroll padding specified so users are not expected to come across it.
  • Vertical scrollbar is affected by horizontal stretching when using a stretching overscroll effect for the horizontal scroll that is default on Android causing the scrollbar to stretch off the screen on overscroll.
  • Enabling/disabling either horizontal or vertical scrollbar for currently active tables will lead to a state loss and to possible runtime errors.

Community

Feel free to use GitHub Discussions if you want:

  • to ask a question to get help;
  • to influence the project;
  • to share ideas;
  • to share interesting things this project allowed you to make;
  • or to just discuss something related.
Reporting bugs

If you encounter any bugs, feel free to use GitHub Issue Tracker to search for an existing issue or to open up a new one.

Contribution

If you have something to contribute to the package, feel free to send out a GitHub Pull Request.

License

All the source code is open and distributed under the MIT license.

카테고리

의존성

의존성 목록 1 개

  • sliver_passthrough^1.0.0

소스 저장소

이 패키지를 사용하는 프로젝트

아직 데이터가 없습니다.