Flutter自适应高度网格视图插件auto_height_grid_view的使用

Flutter自适应高度网格视图插件auto_height_grid_view的使用

Why auto_height_grid_view?

auto_height_grid_view 是一个Flutter包,它根据内容自动调整网格瓷砖的高度,使得创建动态和响应式的网格布局变得容易。它会根据每个网格项的内容自动调整其高度。

💡 Overview

auto height grid view

💻 Usage

添加依赖

在你的 pubspec.yaml 文件中添加以下依赖:

dependencies:
  auto_height_grid_view: ^latest_version # 请确保替换为最新版本号

导入库

在你的 Dart 代码中导入此库:

import 'package:auto_height_grid_view/auto_height_grid_view.dart';

完整示例Demo

main.dart

下面是一个完整的示例,展示了如何使用 AutoHeightGridView 创建一个自适应高度的网格视图:

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

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Auto Height Grid View',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(primarySwatch: Colors.blue),
      home: const HomeScreen(),
    );
  }
}

class HomeScreen extends StatefulWidget {
  const HomeScreen({Key? key}) : super(key: key);

  @override
  State<HomeScreen> createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Auto Height Grid View'),
        centerTitle: true,
      ),
      body: AutoHeightGridView(
        itemCount: _cats.length,
        crossAxisCount: 2, // 每行显示的项目数
        mainAxisSpacing: 10, // 主轴间距
        crossAxisSpacing: 10, // 交叉轴间距
        physics: const BouncingScrollPhysics(), // 滚动物理效果
        padding: const EdgeInsets.all(12), // 内边距
        shrinkWrap: true, // 是否缩小包裹内容
        builder: (context, index) {
          return Card(
            child: SizedBox(
              height: 160,
              child: Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                children: [
                  ClipRRect(
                    borderRadius: const BorderRadius.only(
                      topLeft: Radius.circular(8),
                      topRight: Radius.circular(8),
                    ),
                    child: Image.asset(
                      width: double.infinity,
                      height: 110,
                      fit: BoxFit.cover,
                      _cats[index].imagePath,
                    ),
                  ),
                  const SizedBox(height: 10),
                  Padding(
                    padding: const EdgeInsets.symmetric(horizontal: 6),
                    child: Text(
                      _cats[index].name,
                      style: const TextStyle(
                        fontWeight: FontWeight.bold,
                        fontSize: 18,
                      ),
                    ),
                  ),
                ],
              ),
            ),
          );
        },
      ),
    );
  }

  final List<CatModel> _cats = [
    CatModel(name: 'Bella', imagePath: 'assets/images/bella.jpeg'),
    CatModel(name: 'Charlie', imagePath: 'assets/images/charlie.jpeg'),
    CatModel(name: 'Luna', imagePath: 'assets/images/luna.jpeg'),
    CatModel(name: 'Max', imagePath: 'assets/images/max.jpeg'),
    CatModel(name: 'Mittens', imagePath: 'assets/images/mittens.jpeg'),
    CatModel(name: 'Oliver', imagePath: 'assets/images/oliver.jpeg'),
    CatModel(name: 'Simba', imagePath: 'assets/images/simba.jpeg'),
    CatModel(name: 'Tiger', imagePath: 'assets/images/tiger.jpeg'),
    CatModel(name: 'Tigger', imagePath: 'assets/images/tigger.jpeg'),
    CatModel(name: 'Whiskers', imagePath: 'assets/images/whiskers.jpeg'),
  ];
}

class CatModel {
  final String name;
  final String imagePath;

  CatModel({required this.name, required this.imagePath});
}

🗞️ Properties

auto_height_grid_view 包含以下属性:

Property Type
key Key
itemCount int
crossAxisCount int
crossAxisSpacing double
mainAxisSpacing double
rowCrossAxisAlignment CrossAxisAlignment
controller ScrollController
shrinkWrap bool
physics ScrollPhysics
padding EdgeInsets
builder IndexedWidgetBuilder

💪🏻 Contribution Guide

如果你有任何问题或新想法,请随时在 GitHub Issues 上提交。如果你修复了bug或实现了新功能,欢迎发送 Pull Request

Maintainer

Kamran Khan 维护。

Copyright and License

Copyright © 2023 3kdveloper. Licensed under the MIT LICENSE.

希望这个指南能帮助你更好地理解和使用 auto_height_grid_view 插件!如果有任何问题或需要进一步的帮助,请随时提问。


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

1 回复

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


当然,下面是一个关于如何使用 auto_height_grid_view 插件来实现自适应高度网格视图的示例代码。auto_height_grid_view 插件可以帮助你创建网格视图,其中每个网格项的高度可以根据内容自适应调整。

首先,确保你已经在 pubspec.yaml 文件中添加了 auto_height_grid_view 依赖:

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

然后运行 flutter pub get 来安装依赖。

接下来是一个完整的 Flutter 应用示例,展示如何使用 AutoHeightGridView

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

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

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

class MyHomePage extends StatelessWidget {
  final List<String> items = List.generate(20, (index) => "Item $index");

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Auto Height Grid View Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(8.0),
        child: AutoHeightGridView(
          // 设置网格列数
          crossAxisCount: 2,
          // 设置网格间距
          crossAxisSpacing: 8.0,
          mainAxisSpacing: 8.0,
          // 设置子项构建器
          childrenDelegate: SliverChildBuilderDelegate(
            (context, index) {
              return Card(
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: <Widget>[
                    Text(
                      items[index],
                      style: TextStyle(fontSize: 18),
                    ),
                    SizedBox(height: 10),
                    // 模拟不同高度的内容
                    Text(
                      'Content for $index\n' * (index % 3 + 1),
                      style: TextStyle(fontSize: 14),
                    ),
                  ],
                ),
              );
            },
            childCount: items.length,
          ),
        ),
      ),
    );
  }
}

代码解释

  1. 依赖引入:确保在 pubspec.yaml 中添加了 auto_height_grid_view 依赖。
  2. 应用入口MyApp 是应用的入口,包含一个 MaterialApp,其中设置了主题和主页 MyHomePage
  3. 主页MyHomePage 是一个无状态组件,包含了一个 Scaffold,其中包含一个 AppBar 和一个填充了 AutoHeightGridViewPadding
  4. AutoHeightGridView
    • crossAxisCount:设置网格的列数。
    • crossAxisSpacingmainAxisSpacing:设置网格项之间的水平和垂直间距。
    • childrenDelegate:使用 SliverChildBuilderDelegate 来构建网格项。在这里,我们为每个网格项生成一个 Card,其中包含一个文本和一个模拟不同高度的内容。

这个示例展示了如何使用 auto_height_grid_view 插件来创建一个自适应高度的网格视图。你可以根据需要调整列数、间距和内容来适应你的应用需求。

回到顶部