Flutter网格布局插件page_grid的使用

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

Flutter网格布局插件page_grid的使用

示例演示

flutter_flex

如何使用

创建Page Grid
PageGrid(
    head: Container(color: Colors.yellow),
    body: Container(color: Colors.red),
    footer: Container(color: Colors.pink),
)
镜像Page Grid
PageGrid(
    mirror: true,
    head: Container(color: Colors.yellow),
    body: Container(color: Colors.red),
    footer: Container(color: Colors.pink),
)
自定义网格
PageGrid(
    mirror: true,
    mobileFlex: const BodyFlex(footer: 0),
    desktopFlex: const BodyFlex(),
    head: Container(color: Colors.yellow),
    body: Container(color: Colors.red),
    footer: Container(color: Colors.pink),
)

完整示例代码

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

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

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

  // 这个小部件是你的应用的根。
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        // 这是你的应用的主题。
        //
        // 尝试运行你的应用。你会看到应用有一个蓝色工具栏。然后,在不退出应用的情况下,
        // 尝试将下面的primarySwatch改为Colors.green并触发“热重载”(在控制台按“r”键,或者直接保存文件以触发热重载)。
        // 注意计数器并没有重置回零;应用并没有重启。
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(),
    );
  }
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return SafeArea(
      child: Material(
        child: PageGrid(
          mirror: true,
          mobileFlex: const BodyFlex(footer: 0),
          desktopFlex: const BodyFlex(),
          head: Container(color: Colors.yellow),
          body: Container(color: Colors.red),
          footer: Container(color: Colors.pink),
        ),
      ),
    );
  }
}

更多关于Flutter网格布局插件page_grid的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter网格布局插件page_grid的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter中使用page_grid插件来实现网格布局的示例代码。page_grid是一个用于创建分页网格布局的Flutter插件,非常适合展示图片或卡片等项。

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

dependencies:
  flutter:
    sdk: flutter
  page_grid: ^0.4.0  # 请检查最新版本号

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

接下来是一个完整的示例代码,展示如何使用page_grid插件来创建一个简单的网格布局:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Page Grid Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: Text('Page Grid Example'),
        ),
        body: PageGrid.builder(
          itemCount: 50, // 总项目数
          gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
            crossAxisCount: 3, // 每行项目数
            crossAxisSpacing: 4.0, // 横轴间距
            mainAxisSpacing: 4.0, // 纵轴间距
          ),
          itemBuilder: (context, index) {
            return Container(
              color: Colors.primaries[index % Colors.primaries.length],
              child: Center(
                child: Text(
                  'Item $index',
                  style: TextStyle(color: Colors.white),
                ),
              ),
            );
          },
          controller: PageController(viewportFraction: 0.8), // 可选:分页控制器
          pageBreakPredicate: (index) => index % 10 == 9, // 每10个项目分页
        ),
      ),
    );
  }
}

代码说明:

  1. 导入依赖

    import 'package:flutter/material.dart';
    import 'package:page_grid/page_grid.dart';
    
  2. 创建应用

    void main() {
      runApp(MyApp());
    }
    
  3. 定义主应用类

    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          // ... 省略其他代码 ...
        );
      }
    }
    
  4. 使用PageGrid.builder构建网格布局

    • itemCount:总项目数。
    • gridDelegate:定义网格布局,这里使用SliverGridDelegateWithFixedCrossAxisCount来设置每行项目数和间距。
    • itemBuilder:构建每个项目的Widget。
    • controller:分页控制器,这里设置viewportFraction为0.8,表示每页显示80%的视口高度。
    • pageBreakPredicate:分页条件,这里设置为每10个项目分页。
PageGrid.builder(
  itemCount: 50,
  gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
    crossAxisCount: 3,
    crossAxisSpacing: 4.0,
    mainAxisSpacing: 4.0,
  ),
  itemBuilder: (context, index) {
    return Container(
      color: Colors.primaries[index % Colors.primaries.length],
      child: Center(
        child: Text(
          'Item $index',
          style: TextStyle(color: Colors.white),
        ),
      ),
    );
  },
  controller: PageController(viewportFraction: 0.8),
  pageBreakPredicate: (index) => index % 10 == 9,
)

这个示例展示了如何使用page_grid插件来创建一个简单的分页网格布局,每个网格项显示不同的颜色和文本。你可以根据自己的需求调整itemCountgridDelegateitemBuilder等参数来定制网格布局。

回到顶部