Flutter固定网格布局插件flutterzilla_fixed_grid的使用
Flutter固定网格布局插件flutterzilla_fixed_grid的使用
插件介绍
默认的Flutter GridView
会根据屏幕大小调整其容器的比例,因此在小屏幕上看起来可能很正常,但在大屏幕上可能会显得不美观。flutterzilla_fixed_grid
插件允许你为 GridView
设置固定的高度,从而确保在不同屏幕尺寸下布局的一致性。
安装步骤
-
在
pubspec.yaml
文件中添加最新版本的插件依赖(并运行flutter pub get
):dependencies: flutterzilla_fixed_grid: ^0.0.4
-
在你的 Flutter 应用中导入并使用该插件:
import 'package:flutterzilla_fixed_grid/flutterzilla_fixed_grid.dart';
示例代码
以下是一个完整的示例 Demo,展示了如何使用 flutterzilla_fixed_grid
插件创建一个固定高度的 GridView
。
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutterzilla_fixed_grid/flutterzilla_fixed_grid.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
// 设置状态栏颜色为透明
SystemChrome.setSystemUIOverlayStyle(
const SystemUiOverlayStyle(statusBarColor: Colors.transparent));
return const MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Flutterzilla Fixed Grid',
home: MyHomePage(title: 'Flutterzilla Fixed Grid'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
[@override](/user/override)
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(
widget.title,
style: const TextStyle(color: Colors.grey, fontSize: 17),
),
backgroundColor: Colors.white,
elevation: 0,
),
body: Container(
padding: const EdgeInsets.symmetric(horizontal: 20),
child: GridView.builder(
gridDelegate: const FlutterzillaFixedGridView(
crossAxisCount: 2, // 每行显示的列数
mainAxisSpacing: 20, // 主轴方向的间距
crossAxisSpacing: 20, // 横轴方向的间距
height: 143, // 固定的高度
),
padding: const EdgeInsets.only(top: 30),
itemCount: 6, // 网格项的数量
shrinkWrap: true, // 自动调整高度
clipBehavior: Clip.none, // 不裁剪子组件
physics: const NeverScrollableScrollPhysics(), // 禁止滚动
itemBuilder: (context, index) {
return InkWell(
splashColor: Colors.transparent, // 点击时的水波纹颜色
highlightColor: Colors.transparent, // 点击时的高亮颜色
onTap: () {}, // 点击事件
child: Container(
alignment: Alignment.center,
decoration: BoxDecoration(
color: Colors.purple, // 背景颜色
borderRadius: BorderRadius.circular(8), // 圆角
boxShadow: [
BoxShadow(
color: Colors.purple.withOpacity(0.32), // 阴影颜色
spreadRadius: -2, // 扩展半径
blurRadius: 13, // 模糊半径
offset: const Offset(0, 8), // 阴影偏移
),
],
),
padding: const EdgeInsets.symmetric(horizontal: 19, vertical: 15),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: const [
Icon(
Icons.ac_unit, // 图标
size: 25,
color: Colors.white,
),
SizedBox(height: 8), // 间距
Text(
"Software Engineers", // 标题
textAlign: TextAlign.left,
maxLines: 2,
overflow: TextOverflow.ellipsis,
style: TextStyle(
color: Colors.white,
fontSize: 15,
fontWeight: FontWeight.bold,
),
),
SizedBox(height: 8), // 间距
Text(
"20 Chapters", // 子标题
textAlign: TextAlign.center,
maxLines: 2,
overflow: TextOverflow.ellipsis,
style: TextStyle(
color: Colors.white,
fontSize: 12,
),
),
],
),
),
);
},
),
),
);
}
}
更多关于Flutter固定网格布局插件flutterzilla_fixed_grid的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter固定网格布局插件flutterzilla_fixed_grid的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter中使用flutterzilla_fixed_grid
插件来创建固定网格布局的示例代码。首先,确保你已经在pubspec.yaml
文件中添加了该插件的依赖项:
dependencies:
flutter:
sdk: flutter
flutterzilla_fixed_grid: ^最新版本号 # 请替换为实际最新版本号
然后,运行flutter pub get
来安装依赖。
接下来是具体的代码示例,展示如何使用flutterzilla_fixed_grid
来创建一个固定网格布局:
import 'package:flutter/material.dart';
import 'package:flutterzilla_fixed_grid/flutterzilla_fixed_grid.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Fixed Grid Layout',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutterzilla Fixed Grid Example'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: FixedGrid(
columns: 3, // 指定列数
rowHeight: 150.0, // 指定行高
childAspectRatio: 1.0, // 子项宽高比
mainAxisSpacing: 16.0, // 主轴间距
crossAxisSpacing: 16.0, // 交叉轴间距
children: List.generate(9, (index) {
return GridItem(
child: Card(
color: Colors.primary.shade300,
child: Center(
child: Text(
'Item ${index + 1}',
style: TextStyle(color: Colors.white),
),
),
),
);
}),
),
),
);
}
}
在这个示例中:
FixedGrid
组件用于创建固定网格布局。columns
参数指定网格的列数。rowHeight
参数指定每一行的高度。childAspectRatio
参数指定每个子项的宽高比。mainAxisSpacing
和crossAxisSpacing
参数分别指定主轴和交叉轴上的间距。children
参数是一个包含所有子项的列表,这里使用List.generate
方法生成了9个子项,每个子项是一个带有文本标签的Card
。
这个示例展示了如何使用flutterzilla_fixed_grid
插件来创建一个3列的固定网格布局,每个单元格是一个带文本的卡片。你可以根据需要调整这些参数和子项内容来适应你的应用需求。