Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何在按下按钮时添加自定义小部件_Flutter_Flutter Layout - Fatal编程技术网

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
  }