如何在 Flutter 中创建可滚动的网格?
How to create an unscrollable grid in Flutter?
@编辑
改了标题误导了,不好意思。研究也有欠缺,会尽量不犯同样的错误。我会保留原来的问题,但是M123 awnser已经足够了,谢谢。
@原创
所以,我是 Flutter 的新手,我做了一些 udemy 类,但我的知识不足以应对这个挑战......
我需要创建一个不可滚动的网格,这个网格必须能够容纳不同类型的小部件,具有不同的大小,有时放置在屏幕的不同区域,就像布局构建器一样。我还必须能够保存布局。
我想创建一个基于屏幕大小的矩阵来保持小部件的位置,如下所示:
W = 小部件,X = 其他小部件已占用的位置
我的一个问题是如何打印矩阵内容,我应该在列中创建行,在行中创建列,在 flutter 中使用网格视图(如何?)?
现在我被这个小代码困住了:
static const String id = 'grade';
@override
_GradeState createState() => _GradeState();
}
class _GradeState extends State<Grade> {
List<List<Widget>> grade = [];
Widget _corpoDaGrade() {
int gridStateLength = grade.length;
double width = MediaQuery.of(context).size.width;
double height = MediaQuery.of(context).size.height;
double y = width / 50;
double x = height / 50;
print('x = $x');
print('y = $y');
print('width = $width');
print('height = $height');
for (int i = 0; i < x.toInt(); i++) {
List<Widget> list = [];
for (int j = 0; j < y.toInt(); j++) {
//print(j);
list.add(
Container(
height: 50,
width: 50,
decoration: BoxDecoration(
border: Border.all(
color: Colors.black,
),
),
),
);
}
grade.add(list);
}
return Column(
children: [
Expanded(
child: Container(),
),
],
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: _corpoDaGrade(),
),
);
}
}
我只是想用简单的小部件打印矩阵。
我确实寻找了一些包,比如这个 https://github.com/letsar/flutter_staggered_grid_view,但几乎所有东西都是可滚动的并且基于列表,因此小部件按顺序放置,而不是在特定位置,也许我错过了一些东西。
您不必使用列和行,有一个小部件可以做到这一点。
Table(
children:[
TableRow(
children[
ANYWDIDGET();
ANYWDIDGET();
ANYWDIDGET();
]),
TableRow(
children[
ANYWDIDGET();
ANYWDIDGET();
ANYWDIDGET();
]),
]
);
ANYWIDGET(){
return...
}
好吧,我花了一些时间才回到这里告诉你们我用什么方法解决了我的问题,M123 绝对是一个了不起的答案,应该对你有帮助,但为了更容易,我在 pub.dev 由 Fastriver 制作 (https://github.com/organic-nailer) that creates a simple unscrollable grid view: https://pub.dev/packages/expanded_grid 。如果你使用它,请给 him/her 一些爱。
@编辑 改了标题误导了,不好意思。研究也有欠缺,会尽量不犯同样的错误。我会保留原来的问题,但是M123 awnser已经足够了,谢谢。
@原创 所以,我是 Flutter 的新手,我做了一些 udemy 类,但我的知识不足以应对这个挑战...... 我需要创建一个不可滚动的网格,这个网格必须能够容纳不同类型的小部件,具有不同的大小,有时放置在屏幕的不同区域,就像布局构建器一样。我还必须能够保存布局。
我想创建一个基于屏幕大小的矩阵来保持小部件的位置,如下所示:
W = 小部件,X = 其他小部件已占用的位置
我的一个问题是如何打印矩阵内容,我应该在列中创建行,在行中创建列,在 flutter 中使用网格视图(如何?)?
现在我被这个小代码困住了:
static const String id = 'grade';
@override
_GradeState createState() => _GradeState();
}
class _GradeState extends State<Grade> {
List<List<Widget>> grade = [];
Widget _corpoDaGrade() {
int gridStateLength = grade.length;
double width = MediaQuery.of(context).size.width;
double height = MediaQuery.of(context).size.height;
double y = width / 50;
double x = height / 50;
print('x = $x');
print('y = $y');
print('width = $width');
print('height = $height');
for (int i = 0; i < x.toInt(); i++) {
List<Widget> list = [];
for (int j = 0; j < y.toInt(); j++) {
//print(j);
list.add(
Container(
height: 50,
width: 50,
decoration: BoxDecoration(
border: Border.all(
color: Colors.black,
),
),
),
);
}
grade.add(list);
}
return Column(
children: [
Expanded(
child: Container(),
),
],
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: _corpoDaGrade(),
),
);
}
}
我只是想用简单的小部件打印矩阵。
我确实寻找了一些包,比如这个 https://github.com/letsar/flutter_staggered_grid_view,但几乎所有东西都是可滚动的并且基于列表,因此小部件按顺序放置,而不是在特定位置,也许我错过了一些东西。
您不必使用列和行,有一个小部件可以做到这一点。
Table(
children:[
TableRow(
children[
ANYWDIDGET();
ANYWDIDGET();
ANYWDIDGET();
]),
TableRow(
children[
ANYWDIDGET();
ANYWDIDGET();
ANYWDIDGET();
]),
]
);
ANYWIDGET(){
return...
}
好吧,我花了一些时间才回到这里告诉你们我用什么方法解决了我的问题,M123 绝对是一个了不起的答案,应该对你有帮助,但为了更容易,我在 pub.dev 由 Fastriver 制作 (https://github.com/organic-nailer) that creates a simple unscrollable grid view: https://pub.dev/packages/expanded_grid 。如果你使用它,请给 him/her 一些爱。