Flutter动态高度网格视图插件dynamic_height_grid_view的使用

发布于 1周前 作者 gougou168 来自 Flutter

Flutter动态高度网格视图插件dynamic_height_grid_view的使用

描述

dynamic_height_grid_view 是一个用于Flutter应用的插件,允许创建具有动态高度的GridView。与传统的GridView不同,您无需使用aspectRatio,从而可以更灵活地定义每个项目的高度。

示例

pub package License: MIT

使用方法

基本用法

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

class MyHomePage extends StatelessWidget {
  const MyHomePage({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: DynamicHeightGridView(
        itemCount: 120, // 子项的数量
        crossAxisCount: 3, // 每行的子项数量
        crossAxisSpacing: 10, // 子项之间的横向间距
        mainAxisSpacing: 10, // 子项之间的纵向间距
        builder: (ctx, index) {
          // 自定义返回的widget逻辑
          return Container(
            height: getHeight(index), // 获取特定index的高度
            color: getColor(index),   // 获取特定index的颜色
          );
        }
      ),
    );
  }

  double getHeight(int index) {
    // 返回对应索引的容器高度
    // 这里仅作为示例,实际中可能根据数据源来确定
    final heights = [100, 120, 140, 160, 180, 200];
    return heights[index % heights.length].toDouble();
  }

  Color getColor(int index) {
    // 返回对应索引的容器颜色
    // 这里仅作为示例,实际中可能根据数据源来确定
    final colors = [
      Colors.red,
      Colors.redAccent,
      Colors.deepOrange,
      Colors.orange,
      Colors.amberAccent,
      Colors.yellow,
      Colors.lightGreenAccent,
      Colors.lightGreen,
      Colors.green,
      Colors.greenAccent,
      Colors.lightBlueAccent,
      Colors.blue,
    ];
    return colors[index % colors.length];
  }
}

在CustomScrollView中使用

如果您想在一个自定义滚动视图(如带有AppBar等组件的页面)中使用动态高度的GridView,可以使用SliverDynamicHeightGridView

class SliverMyHomePage extends StatelessWidget {
  const SliverMyHomePage({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: CustomScrollView(
        slivers: [
          SliverDynamicHeightGridView(
            itemCount: 16, // 子项的数量
            crossAxisCount: 3, // 每行的子项数量
            builder: (ctx, index) {
              return Container(
                height: getHeight(index),
                color: getColor(index),
              );
            },
          )
        ],
      ),
    );
  }

  double getHeight(int index) {
    final heights = [100, 120, 140, 160, 180, 200];
    return heights[index % heights.length].toDouble();
  }

  Color getColor(int index) {
    final colors = [
      Colors.red,
      Colors.redAccent,
      Colors.deepOrange,
      Colors.orange,
      Colors.amberAccent,
      Colors.yellow,
      Colors.lightGreenAccent,
      Colors.lightGreen,
      Colors.green,
      Colors.greenAccent,
      Colors.lightBlueAccent,
      Colors.blue,
    ];
    return colors[index % colors.length];
  }
}

以上代码展示了如何在Flutter项目中集成和使用dynamic_height_grid_view插件,包括基本的GridView以及在CustomScrollView中的实现方式。通过调整itemCountcrossAxisCountcrossAxisSpacingmainAxisSpacing参数,您可以轻松定制网格布局以满足您的需求。此外,通过自定义builder回调函数,您可以为每个网格项指定不同的高度和其他属性。


更多关于Flutter动态高度网格视图插件dynamic_height_grid_view的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter动态高度网格视图插件dynamic_height_grid_view的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,我可以为你提供一个关于如何使用 dynamic_height_grid_view 插件的示例代码。dynamic_height_grid_view 是一个 Flutter 插件,它允许你创建一个网格视图,其中每个单元格的高度可以动态变化。

首先,确保你已经将 dynamic_height_grid_view 添加到了你的 pubspec.yaml 文件中:

dependencies:
  flutter:
    sdk: flutter
  dynamic_height_grid_view: ^x.y.z  # 替换为最新版本号

然后运行 flutter pub get 来获取依赖项。

接下来,你可以在你的 Flutter 项目中使用 DynamicHeightGridView。以下是一个完整的示例代码:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Dynamic Height Grid View Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  // 示例数据
  final List<String> items = [
    'Item 1', 'Item 2', 'Item 3', 'Item 4',
    'Item 5', 'Item 6', 'Item 7', 'Item 8',
    'Longer Item Description', 'Item 9', 'Item 10',
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Dynamic Height Grid View Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(8.0),
        child: DynamicHeightGridView(
          // 设置网格列数
          columnCount: 2,
          // 设置网格项构建器
          itemBuilder: (context, index) {
            return Card(
              child: Padding(
                padding: const EdgeInsets.all(16.0),
                child: Text(
                  items[index],
                  style: TextStyle(fontSize: 18),
                  textAlign: TextAlign.center,
                ),
              ),
              // 根据内容动态设置高度(这里为了演示简单使用固定高度)
              margin: EdgeInsets.symmetric(vertical: 8.0),
              shape: RoundedRectangleBorder(
                borderRadius: BorderRadius.circular(10.0),
              ),
            );
          },
          // 设置网格项数量
          itemCount: items.length,
          // 可选:设置网格最大高度(如果所有项的高度都相同,可以省略)
          maxHeight: 200.0,
          // 可选:设置网格最小高度(如果所有项的高度都相同,可以省略)
          minHeight: 50.0,
        ),
      ),
    );
  }
}

在这个示例中:

  1. 我们创建了一个包含一些字符串的 List 作为示例数据。
  2. 使用 DynamicHeightGridView 组件来显示这些数据。
  3. itemBuilder 是一个函数,用于构建每个网格项。在这个例子中,每个网格项都是一个 Card,里面包含一些文本。
  4. columnCount 设置了网格的列数。
  5. itemCount 设置了网格项的总数。
  6. maxHeightminHeight 设置了网格项的最大和最小高度(这是可选的,如果所有项的高度都相同,可以省略)。

你可以根据实际需求调整 itemBuilder 中的内容,以及 columnCountmaxHeightminHeight 的值。

回到顶部