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