Flutter 如何在按下按钮时添加自定义小部件
我使用了几个其他线程创建了一个应用程序,在其中,您可以在文本字段中键入一些文本,当您按下按钮时,一个默认容器将添加到一个列表中,其中一个字段中包含文本。但是,当我键入文本并添加小部件时,所有条目的文本都会更改,而不仅仅是添加的条目。这是我的代码:Flutter 如何在按下按钮时添加自定义小部件,flutter,flutter-layout,Flutter,Flutter Layout,我使用了几个其他线程创建了一个应用程序,在其中,您可以在文本字段中键入一些文本,当您按下按钮时,一个默认容器将添加到一个列表中,其中一个字段中包含文本。但是,当我键入文本并添加小部件时,所有条目的文本都会更改,而不仅仅是添加的条目。这是我的代码: import 'dart:core'; import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class MyApp exte
import 'dart:core';
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Flutter Demo',
theme: new ThemeData(
primarySwatch: Colors.blue,
),
home: new MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => new _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int count = 0;
TextEditingController noteSend = TextEditingController();
@override
Widget build(BuildContext context) {
List<Widget> children = new List.generate(
count,
(int i) => new InputWidget(
i,
noteRec: noteSend.text,
));
return new Scaffold(
appBar: new AppBar(title: new Text('some title')),
body: Column(
children: <Widget>[
Container(
child: TextField(
controller: noteSend,
),
color: Colors.lightBlueAccent,
width: 150,
height: 50,
),
Expanded(
child: ListView(
children: children,
scrollDirection: Axis.vertical,
),
),
],
),
floatingActionButton: new FloatingActionButton(
child: new Icon(Icons.add),
onPressed: () {
setState(() {
count = count + 1;
});
},
));
}
}
class InputWidget extends StatefulWidget {
final int index;
final String noteRec;
InputWidget(this.index, {Key key, this.noteRec}) : super(key: key);
@override
_InputWidgetState createState() => _InputWidgetState();
}
class _InputWidgetState extends State<InputWidget> {
@override
Widget build(BuildContext context) {
return new Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(10),
),
child: Row(
children: <Widget>[
Column(
children: <Widget>[
Icon(
Icons.image,
size: 75,
)
],
),
Container(
margin: EdgeInsets.only(left: 80, right: 30),
child: Column(
children: <Widget>[
Text('Note'),
],
),
),
Column(
children: <Widget>[
Text("${widget.noteRec}"),
],
),
],
),
);
}
}
导入“省道:核心”;
进口“包装:颤振/材料.省道”;
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回新材料PP(
标题:“颤振演示”,
主题:新主题数据(
主样本:颜色。蓝色,
),
主页:新建MyHomePage(),
);
}
}
类MyHomePage扩展StatefulWidget{
@凌驾
_MyHomePageState createState()=>new_MyHomePageState();
}
类_MyHomePageState扩展状态{
整数计数=0;
TextEditingController noteSend=TextEditingController();
@凌驾
小部件构建(构建上下文){
List children=new List.generate(
计数
(int i)=>新的InputWidget(
我
noteRec:noteSend.text,
));
归还新脚手架(
appBar:new appBar(标题:新文本(“某些标题”),
正文:专栏(
儿童:[
容器(
孩子:TextField(
控制器:notessend,
),
颜色:Colors.lightBlueAccent,
宽度:150,
身高:50,
),
扩大(
子:ListView(
儿童:儿童,,
滚动方向:轴垂直,
),
),
],
),
floatingActionButton:新的floatingActionButton(
子:新图标(Icons.add),
已按下:(){
设置状态(){
计数=计数+1;
});
},
));
}
}
类InputWidget扩展了StatefulWidget{
最终整数指数;
最终字符串noteRec;
InputWidget(this.index,{Key,this.noteRec}):super(Key:Key);
@凌驾
_InputWidgetState createState()=>\u InputWidgetState();
}
类_InputWidgetState扩展状态{
@凌驾
小部件构建(构建上下文){
退回新货柜(
装饰:盒子装饰(
颜色:颜色,白色,
边界半径:边界半径。圆形(10),
),
孩子:排(
儿童:[
纵队(
儿童:[
图标(
图标。图像,
尺码:75,
)
],
),
容器(
页边距:仅限边集(左:80,右:30),
子:列(
儿童:[
文本(“注释”),
],
),
),
纵队(
儿童:[
文本(${widget.noteRec}),
],
),
],
),
);
}
}
如何使每个条目的文本不同?List children=new List.generate(
List<Widget> children = new List.generate(
count,
(int i) => new InputWidget(
i,
noteRec: noteSend.text,
));
计数
(int i)=>新的InputWidget(
我
noteRec:noteSend.text,
));
在这段代码中,为子元素中的所有元素设置输入文本。这就是所有条目都更改为相同文本的原因。按“保存”按钮并在列表中调用时,可以将文本保存到字符串列表中。生成:
List<Widget> children = new List.generate(
count,
(int i) => new InputWidget(
i,
noteRec: listString[i],
));
List children=new List.generate(
计数
(int i)=>新的InputWidget(
我
noteRec:listString[i],
));
试试这个代码
使用了另一种解决方案,感谢您的回复!
Container(
height: 200,
child: Column(
children: <Widget>[
Expanded(
child: buildGridView(),
)
],
),
),
Widget buildGridView() {
return Text('text here'); // your future widget
}