Flutter网格页面视图插件gridded_pageview的使用

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

Flutter网格页面视图插件gridded_pageview的使用

gridded_pageview 是一个基于 Flutter 的简单小部件,该小部件在多个私人项目中被多次使用。通过向 GriddedPageView 传递一组大小相似的小部件,并设置首选大小,可以将其显示为 GridViewPageView 的组合。GriddedPageView 根据可用空间将子项分布在这些页面上。

该小部件使用了 page_indicator

Demo GriddedPageView

使用

例如(参见example main.dart):

GriddedPageView(
  controller: _controller,
  minChildWidth: 160,
  minChildHeight: 160,
  children: List<Widget>.generate(20, (int index) {
    return Container(
      color: Color((Random().nextDouble() * 0xFFFFFF).toInt()).withOpacity(1.0),
    );
  }),
  // overlapIndicator: false,
);

GriddedPageView 接受以下参数:

  • controller (必填): 一个 PageController
  • children (必填): 一个 Widget 列表
  • minChildWidth (必填): 每个子项的最小宽度。用于计算一页上可以容纳多少列
  • minChildHeight (必填): 每个子项的最小高度。用于计算一页上可以容纳多少行
  • onPageChanged: 用于报告页面变化的回调函数
  • onPageAmountChanged: 用于报告页面数量变化的回调函数
  • showIndicator: 是否显示页面指示器(默认为 true
  • overlapIndicator: 页面指示器是否应该重叠在子项上(默认为 true
  • pagePadding: 页面内容(GridView)周围的填充
  • indicatorPadding: 页面指示器周围的填充
  • indicatorColor: 页面指示器的颜色
  • indicatorSelectorColor: 当前页面指示器的颜色

完整示例代码

import 'package:flutter/material.dart';
import 'package:gridded_pageview/gridded_pageview.dart';
import 'dart:math';

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'GriddedPageView Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'GriddedPageView Example'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key, required this.title}) : super(key: key);
  final String title;

  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

  PageController _controller = PageController(keepPage: true);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: GriddedPageView(
        controller: _controller,
        minChildWidth: 160,
        minChildHeight: 160,
        children: List<Widget>.generate(20, (int index) {
          return Container(
            color: Color((Random().nextDouble() * 0xFFFFFF).toInt()).withOpacity(1.0),
          );
        }),
        // overlapIndicator: false,
      )
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter中使用gridded_pageview插件来创建一个网格页面视图的示例代码。gridded_pageview插件允许你以网格布局形式显示页面,这在展示图片画廊或类似内容时非常有用。

首先,你需要在你的pubspec.yaml文件中添加gridded_pageview依赖:

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

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

接下来是一个完整的示例代码,展示如何使用gridded_pageview来创建一个简单的网格页面视图:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Gridded PageView Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: GridPageViewExample(),
    );
  }
}

class GridPageViewExample extends StatelessWidget {
  final List<String> imageUrls = [
    'https://via.placeholder.com/300/FF5733/FFFFFF?text=1',
    'https://via.placeholder.com/300/33FF57/FFFFFF?text=2',
    'https://via.placeholder.com/300/3357FF/FFFFFF?text=3',
    'https://via.placeholder.com/300/FF33A1/FFFFFF?text=4',
    'https://via.placeholder.com/300/A133FF/FFFFFF?text=5',
    'https://via.placeholder.com/300/33FFA1/FFFFFF?text=6',
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Gridded PageView Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(8.0),
        child: GriddedPageView.builder(
          gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
            crossAxisCount: 2,  // 每行显示的网格数
            crossAxisSpacing: 8.0,
            mainAxisSpacing: 8.0,
          ),
          itemCount: imageUrls.length,
          itemBuilder: (context, index) {
            return GridTile(
              child: Image.network(imageUrls[index]),
              footer: GridTileBar(
                backgroundColor: Colors.black45,
                title: Text('Image ${index + 1}'),
              ),
            );
          },
        ),
      ),
    );
  }
}

在这个示例中,我们做了以下几件事:

  1. 导入必要的包。
  2. pubspec.yaml文件中添加gridded_pageview依赖。
  3. 创建一个简单的Flutter应用,包含一个Scaffold,其中包含一个AppBar和一个填充了PaddingGriddedPageView.builder
  4. 使用SliverGridDelegateWithFixedCrossAxisCount来定义网格布局,这里我们设置每行显示2个网格项,并定义了网格项之间的间距。
  5. itemBuilder回调中,我们为每个网格项创建了一个GridTile,其中包含一个从网络加载的图片和一个底部栏GridTileBar,显示图片的索引。

这个示例展示了如何使用gridded_pageview插件来创建一个简单的网格页面视图,你可以根据需要进一步自定义和扩展这个示例。

回到顶部