Flutter网格页面视图插件gridded_pageview的使用
Flutter网格页面视图插件gridded_pageview的使用
gridded_pageview
是一个基于 Flutter 的简单小部件,该小部件在多个私人项目中被多次使用。通过向 GriddedPageView
传递一组大小相似的小部件,并设置首选大小,可以将其显示为 GridView
和 PageView
的组合。GriddedPageView
根据可用空间将子项分布在这些页面上。
该小部件使用了 page_indicator
。
使用
例如(参见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
更多关于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}'),
),
);
},
),
),
);
}
}
在这个示例中,我们做了以下几件事:
- 导入必要的包。
- 在
pubspec.yaml
文件中添加gridded_pageview
依赖。 - 创建一个简单的Flutter应用,包含一个
Scaffold
,其中包含一个AppBar
和一个填充了Padding
的GriddedPageView.builder
。 - 使用
SliverGridDelegateWithFixedCrossAxisCount
来定义网格布局,这里我们设置每行显示2个网格项,并定义了网格项之间的间距。 - 在
itemBuilder
回调中,我们为每个网格项创建了一个GridTile
,其中包含一个从网络加载的图片和一个底部栏GridTileBar
,显示图片的索引。
这个示例展示了如何使用gridded_pageview
插件来创建一个简单的网格页面视图,你可以根据需要进一步自定义和扩展这个示例。