Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.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_Dart_Layout_Flutter Layout_Flutter Widget - Fatal编程技术网

Flutter 如何在颤振中从布局中添加或删除零部件?

Flutter 如何在颤振中从布局中添加或删除零部件?,flutter,dart,layout,flutter-layout,flutter-widget,Flutter,Dart,Layout,Flutter Layout,Flutter Widget,如何从颤振应用程序中添加和删除任何小部件,如容器或文本?就像在屏幕上,按下任何按钮,它都会添加或删除由ViewItems和Edititems小部件组成的组件 在Android中,您可以在父视图上调用addChild()或removeChild(),动态添加或删除子视图。那么,有没有像这样的一种飘飘然的方式呢 如何在颤振中从布局中添加和删除小部件?在颤振中,由于小部件是不可变的,因此没有直接等效于addChild()。相反,您可以将函数传递给返回小部件的父级,并使用布尔标志控制该子级的创建 例如,

如何从颤振应用程序中添加和删除任何小部件,如容器或文本?就像在屏幕上,按下任何按钮,它都会添加或删除由ViewItems和Edititems小部件组成的组件

在Android中,您可以在父视图上调用
addChild()
removeChild()
,动态添加或删除子视图。那么,有没有像这样的一种飘飘然的方式呢


如何在颤振中从布局中添加和删除小部件?

在颤振中,由于小部件是不可变的,因此没有直接等效于
addChild()
。相反,您可以将函数传递给返回小部件的父级,并使用布尔标志控制该子级的创建

例如,单击
FloatingActionButton
,可以在两个小部件之间切换:

import 'package:flutter/material.dart';

void main() => runApp(SampleApp());

class SampleApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Sample App',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: SampleAppPage(),
    );
  }
}

class SampleAppPage extends StatefulWidget {
  SampleAppPage({Key key}) : super(key: key);

  @override
  _SampleAppPageState createState() => _SampleAppPageState();
}

class _SampleAppPageState extends State<SampleAppPage> {
  // Default value for toggle
  bool toggle = true;
  void _toggle() {
    setState(() {
      toggle = !toggle;
    });
  }

  _getToggleChild() {
    if (toggle) {
      return Container(
          width: 200,
          height: 40,
          color: Colors.amber,
          child: Center(child: Text('Tony Stark')));
    } else {
      return Container(
          width: 200,
          height: 40,
          color: Colors.grey.shade200,
          child: Center(
              child: TextField(
            autofocus: true,
            decoration: new InputDecoration(
                contentPadding:
                    EdgeInsets.only(left: 10, bottom: 11, top: 11, right: 15),
                hintText: "Edit name"),
          )));
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Sample App"),
      ),
      body: Center(
        child: _getToggleChild(),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _toggle,
        tooltip: 'Update Text',
        child: Icon(Icons.update),
      ),
    );
  }
}
导入“包装:颤振/材料.省道”;
void main()=>runApp(SampleApp());
类SampleApp扩展了无状态小部件{
//此小部件是应用程序的根。
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“示例应用程序”,
debugShowCheckedModeBanner:false,
主题:主题数据(
主样本:颜色。蓝色,
),
主页:SampleAppPage(),
);
}
}
类SampleAppPage扩展StatefulWidget{
SampleAppPage({Key}):super(Key:Key);
@凌驾
_SampleAppPageState createState()=>_SampleAppPageState();
}
类_SampleAppPageState扩展状态{
//切换的默认值
布尔切换=真;
void _toggle(){
设置状态(){
切换=!切换;
});
}
_getToggleChild(){
如果(切换){
返回容器(
宽度:200,
身高:40,
颜色:颜色。琥珀色,
child:Center(child:Text('tonystark'));
}否则{
返回容器(
宽度:200,
身高:40,
颜色:Colors.grey.shade200,
儿童:中心(
孩子:TextField(
自动对焦:对,
装饰:新的输入装饰(
内容填充:
仅限边集(左:10,下:11,上:11,右:15),
hintText:“编辑名称”),
)));
}
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“示例应用程序”),
),
正文:中(
子项:_getToggleChild(),
),
浮动操作按钮:浮动操作按钮(
按下按钮:_切换,
工具提示:“更新文本”,
子:图标(Icons.update),
),
);
}
}

在flatter中,由于小部件是不可变的,因此没有直接等价于
addChild()
。相反,您可以将函数传递给返回小部件的父级,并使用布尔标志控制该子级的创建

例如,单击
FloatingActionButton
,可以在两个小部件之间切换:

import 'package:flutter/material.dart';

void main() => runApp(SampleApp());

class SampleApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Sample App',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: SampleAppPage(),
    );
  }
}

class SampleAppPage extends StatefulWidget {
  SampleAppPage({Key key}) : super(key: key);

  @override
  _SampleAppPageState createState() => _SampleAppPageState();
}

class _SampleAppPageState extends State<SampleAppPage> {
  // Default value for toggle
  bool toggle = true;
  void _toggle() {
    setState(() {
      toggle = !toggle;
    });
  }

  _getToggleChild() {
    if (toggle) {
      return Container(
          width: 200,
          height: 40,
          color: Colors.amber,
          child: Center(child: Text('Tony Stark')));
    } else {
      return Container(
          width: 200,
          height: 40,
          color: Colors.grey.shade200,
          child: Center(
              child: TextField(
            autofocus: true,
            decoration: new InputDecoration(
                contentPadding:
                    EdgeInsets.only(left: 10, bottom: 11, top: 11, right: 15),
                hintText: "Edit name"),
          )));
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Sample App"),
      ),
      body: Center(
        child: _getToggleChild(),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _toggle,
        tooltip: 'Update Text',
        child: Icon(Icons.update),
      ),
    );
  }
}
导入“包装:颤振/材料.省道”;
void main()=>runApp(SampleApp());
类SampleApp扩展了无状态小部件{
//此小部件是应用程序的根。
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“示例应用程序”,
debugShowCheckedModeBanner:false,
主题:主题数据(
主样本:颜色。蓝色,
),
主页:SampleAppPage(),
);
}
}
类SampleAppPage扩展StatefulWidget{
SampleAppPage({Key}):super(Key:Key);
@凌驾
_SampleAppPageState createState()=>_SampleAppPageState();
}
类_SampleAppPageState扩展状态{
//切换的默认值
布尔切换=真;
void _toggle(){
设置状态(){
切换=!切换;
});
}
_getToggleChild(){
如果(切换){
返回容器(
宽度:200,
身高:40,
颜色:颜色。琥珀色,
child:Center(child:Text('tonystark'));
}否则{
返回容器(
宽度:200,
身高:40,
颜色:Colors.grey.shade200,
儿童:中心(
孩子:TextField(
自动对焦:对,
装饰:新的输入装饰(
内容填充:
仅限边集(左:10,下:11,上:11,右:15),
hintText:“编辑名称”),
)));
}
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“示例应用程序”),
),
正文:中(
子项:_getToggleChild(),
),
浮动操作按钮:浮动操作按钮(
按下按钮:_切换,
工具提示:“更新文本”,
子:图标(Icons.update),
),
);
}
}

据我所知,您希望像下面这样使用用户

Row row = new Row();
row.children.add(Text("data"));
body: row,
但不要像这样用在颤振

我在下面写了一段代码供大家理解。在我看来,首先要学习设置状态的概念

import 'package:flutter/material.dart';

import 'main.dart';

class WidgetAdd extends StatefulWidget {
  @override
  _WidgetAddState createState() => _WidgetAddState();
}

class _WidgetAddState extends State<WidgetAdd> {
  List<Widget> widgets = new List<Widget>();
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        actions: [
          FlatButton(onPressed: (){
            setState(() {
              _addWidget();
            });
          }, child: Text("Add Widget")),
          FlatButton(onPressed: (){
            setState(() {
              _addWidget();
            });
          }, child: Text("Remove Widget"))
        ],
      ),
      body: Column(
        children: widgets,
      ),
    );
  }

  _addWidget() {
    Widget widget = Text("data");
    widgets.add(widget);
  }

  _removeWidget() {
    if(widgets.length >0){
      widgets.removeLast();
    }
  }
}
导入“包装:颤振/材料.省道”;
导入“main.dart”;
类WidgetAdd扩展StatefulWidget{
@凌驾
_WidgetAddState createState();
}
类_WidgetAddState扩展状态{
列表小部件=新列表();
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
行动:[
扁平按钮(按下时:(){
设置状态(){
_addWidget();
});
},子项:文本(“添加小部件”),
扁平按钮(按下时:(){
设置状态(){
_addWidget();
});
},子项:文本(“删除小部件”))
],
),
正文:专栏(
孩子们:小部件,
),
);
}
_addWidget(){
小部件=文本(“数据”);
widgets.add(widget);
}
_removeWidget(){
如果(widgets.length>0){
widgets.removeLast();
}
}
}

据我所知,您希望像下面这样使用用户

Row row = new Row();
row.children.add(Text("data"));
body: row,
但不要像这样用在颤振

我写了一封信