Flutter 有很多输入字段的颤振网格-有智能方法吗?
我在这件事上疯了 我构建了一个包含多个输入字段的网格,它可以工作,但是代码以一种可怕的方式重复,我似乎找不到解决方案 正如您在图像上看到的,我已经有45个输入字段加上带有名称的字段。 因为我需要所有这些文本字段的输入,所以我硬编码了这个网格中的每一项Flutter 有很多输入字段的颤振网格-有智能方法吗?,flutter,dart,grid,Flutter,Dart,Grid,我在这件事上疯了 我构建了一个包含多个输入字段的网格,它可以工作,但是代码以一种可怕的方式重复,我似乎找不到解决方案 正如您在图像上看到的,我已经有45个输入字段加上带有名称的字段。 因为我需要所有这些文本字段的输入,所以我硬编码了这个网格中的每一项 var erdbeerenABController = TextEditingController(); var erdbeeren13UhrController = TextEditingController(); var erdb
var erdbeerenABController = TextEditingController();
var erdbeeren13UhrController = TextEditingController();
var erdbeeren15UhrController = TextEditingController();
var erdbeeren17UhrController = TextEditingController();
var erdbeerenEBController = TextEditingController();
var erdbeerenGesternABController = TextEditingController();
var erdbeerenGestern13UhrController = TextEditingController();
var erdbeerenGestern15UhrController = TextEditingController();
var erdbeerenGestern17UhrController = TextEditingController();
var erdbeerenGesternEBController = TextEditingController();
...
Container(
height: 400,
padding: EdgeInsets.only(bottom: 30),
child: GridView.count(
padding: const EdgeInsets.all(10),
crossAxisSpacing: 10,
mainAxisSpacing: 10,
crossAxisCount: 6,
children: <Widget>[
Container(
padding: const EdgeInsets.all(8),
color: Colors.blue[500],
),
Container(
padding: const EdgeInsets.all(8),
child: const Text('AB'),
color: Colors.blue[500],
),
Container(
padding: const EdgeInsets.all(8),
child: const Text('13 Uhr'),
color: Colors.blue[500],
),
Container(
padding: const EdgeInsets.all(8),
child: const Text('15 Uhr'),
color: Colors.blue[500],
),
Container(
padding: const EdgeInsets.all(8),
child: const Text('17 Uhr'),
color: Colors.blue[500],
),
Container(
padding: const EdgeInsets.all(8),
child: const Text('EB'),
color: Colors.blue[500],
),
Container(
padding: const EdgeInsets.all(8),
child: const Text('Erd'),
color: Colors.blue[500],
),
Container(
padding: const EdgeInsets.all(8),
child: TextField(controller: erdbeerenABController),
color: Colors.blue[200],
),
Container(
padding: const EdgeInsets.all(8),
child: TextField(controller: erdbeeren13UhrController),
color: Colors.blue[300],
),
Container(
padding: const EdgeInsets.all(8),
child: TextField(controller: erdbeeren15UhrController),
color: Colors.blue[400],
),
Container(
padding: const EdgeInsets.all(8),
child: TextField(controller: erdbeeren17UhrController),
color: Colors.blue[500],
),
Container(
padding: const EdgeInsets.all(8),
child: TextField(controller: erdbeerenEBController),
color: Colors.blue[500],
),
Container(
padding: const EdgeInsets.all(8),
child: const Text('Erd G'),
color: Colors.blue[500],
),
Container(
padding: const EdgeInsets.all(8),
child: TextField(controller: erdbeerenGesternABController),
color: Colors.blue[200],
),
...
var erdbeerenABController=TextEditingController();
var erdbeeren13UhrController=TextEditingController();
var erdbeeren15UhrController=TextEditingController();
var erdbeeren17UhrController=TextEditingController();
var erdbeerenEBController=TextEditingController();
var erdbeerenGesternABController=TextEditingController();
var erdbeerenGestern13UhrController=TextEditingController();
var erdbeerenGestern15UhrController=TextEditingController();
var erdbeerenGestern17UhrController=TextEditingController();
var erdbeerengesternbcontroller=TextEditingController();
...
容器(
身高:400,
填充:仅限边缘设置(底部:30),
子项:GridView.count(
填充:常量边集。全部(10),
横轴间距:10,
平均间距:10,
交叉轴计数:6,
儿童:[
容器(
填充:常量边集。全部(8),
颜色:颜色。蓝色[500],
),
容器(
填充:常量边集。全部(8),
子项:常量文本('AB'),
颜色:颜色。蓝色[500],
),
容器(
填充:常量边集。全部(8),
子:常量文本('13 Uhr'),
颜色:颜色。蓝色[500],
),
容器(
填充:常量边集。全部(8),
子项:常量文本('15 Uhr'),
颜色:颜色。蓝色[500],
),
容器(
填充:常量边集。全部(8),
子:常量文本('17 Uhr'),
颜色:颜色。蓝色[500],
),
容器(
填充:常量边集。全部(8),
子项:常量文本('EB'),
颜色:颜色。蓝色[500],
),
容器(
填充:常量边集。全部(8),
子项:常量文本('Erd'),
颜色:颜色。蓝色[500],
),
容器(
填充:常量边集。全部(8),
子项:TextField(控制器:erdbeerenABController),
颜色:颜色。蓝色[200],
),
容器(
填充:常量边集。全部(8),
子项:文本字段(控制器:erdbeeren13UhrController),
颜色:颜色。蓝色[300],
),
容器(
填充:常量边集。全部(8),
子项:TextField(控制器:Erdbeeren15UHR控制器),
颜色:颜色。蓝色[400],
),
容器(
填充:常量边集。全部(8),
子项:TextField(控制器:erdbeeren17UhrController),
颜色:颜色。蓝色[500],
),
容器(
填充:常量边集。全部(8),
子项:TextField(控制器:erdbeerenEBController),
颜色:颜色。蓝色[500],
),
容器(
填充:常量边集。全部(8),
子项:常量文本('Erd G'),
颜色:颜色。蓝色[500],
),
容器(
填充:常量边集。全部(8),
子项:TextField(控制器:erdbeerengesternbcontroller),
颜色:颜色。蓝色[200],
),
...
是否有必要以干净的代码方式构建此网格?如果我使用不同的方法,我不知道如何跟踪所有的输入字段,但这感觉非常错误。从官方的flifter文档中尝试以下内容: 或者有几种选择:
GridView.count(...)
GridView.count(
crossAxisCount: 2,
children: <Widget>[
FlutterLogo(),
FlutterLogo(),
FlutterLogo(),
FlutterLogo(),
],
)
GridView.extent(…)
GridView.extent(
maxCrossAxisExtent:400,
儿童:[
徽标(),
徽标(),
徽标(),
徽标(),
],
)
举个例子。我不是根据你的情况做的,但它也应该适合你。使用这个pin码文本字段包 指定maxLength=5以在行中创建5个字段。
这真的很有帮助,可以将TextEditingController()减少到9,使用装饰来填充每个字段的颜色,而不是容器。我知道这些存在,但我不知道如何实现它们,同时仍然跟踪inputfields中的输入。你能帮我吗?
GridView.builder(...)
GridView.builder(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2),
itemBuilder: (_, index) => FlutterLogo(),
itemCount: 4,
)
GridView(...)
GridView(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2),
children: <Widget>[
FlutterLogo(),
FlutterLogo(),
FlutterLogo(),
FlutterLogo(),
],
)
GridView.custom(...)
GridView.custom(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2),
childrenDelegate: SliverChildListDelegate(
[
FlutterLogo(),
FlutterLogo(),
FlutterLogo(),
FlutterLogo(),
],
),
)
GridView.extent(...)
GridView.extent(
maxCrossAxisExtent: 400,
children: <Widget>[
FlutterLogo(),
FlutterLogo(),
FlutterLogo(),
FlutterLogo(),
],
)