Mobile 颤振-在单击时呈现新窗口小部件
标题基本上说明了一切。一个非常有趣的问题。。。我有以下基本代码来创建我的应用程序的初始状态:Mobile 颤振-在单击时呈现新窗口小部件,mobile,dart,flutter,Mobile,Dart,Flutter,标题基本上说明了一切。一个非常有趣的问题。。。我有以下基本代码来创建我的应用程序的初始状态: class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return new MaterialApp( title: 'Flutter Demo', theme: new ThemeData( primarySwatch: Colors
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Flutter Demo',
theme: new ThemeData(
primarySwatch: Colors.blue,
),
home: new MyHomePage(title: 'Some title'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => new _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(title: new Text(config.title)),
body: new Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
new InputWidget(),
]
),
);
}
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回新材料PP(
标题:“颤振演示”,
主题:新主题数据(
主样本:颜色。蓝色,
),
主页:新MyHomePage(标题:“一些标题”),
);
}
}
类MyHomePage扩展StatefulWidget{
MyHomePage({Key,this.title}):超级(Key:Key);
最后的字符串标题;
@凌驾
_MyHomePageState createState()=>new_MyHomePageState();
}
类_MyHomePageState扩展状态{
@凌驾
小部件构建(构建上下文){
归还新脚手架(
appBar:new appBar(标题:new Text(config.title)),
正文:新栏目(
mainAxisAlignment:mainAxisAlignment.space,
儿童:[
新建InputWidget(),
]
),
);
}
}
现在,当用户单击按钮时,如何呈现新的小部件?假设我想实例化另一个InputWidget
谢谢您的构建函数是“纯代码”,因此您可以使用以下方法动态构建传递给列的数组
var children = [];
children.add(new InputWidget());
if (_showAnother)
children.add(new InputWidget());
...
body: new Column(
...
children: children,
...
…其中
\u显示另一个是您在点击按钮时设置的某种布尔字段。我希望我正确理解您的问题
我认为主要的一点是,你不应该想到“另一个”小部件——如果你改变MyHomePage
的内容,先生一个孩子,然后生两个孩子,你就不会真正保留第一个孩子,然后再添加另一个孩子。你只需先说“我想要一个孩子”,然后改变主意说“我想要两个孩子”
在代码中,您可以通过调用内部的设置状态\u MyHomePageState
来完成此操作。颤振负责保留第一个孩子并添加第二个孩子
import 'dart:core';
import 'package:flutter/material.dart';
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Flutter Demo',
theme: new ThemeData(
primarySwatch: Colors.blue,
),
home: new MyHomePage(title: 'Some title'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => new _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int count = 1;
@override
Widget build(BuildContext context) {
List<Widget> children = new List.generate(count, (int i) => new InputWidget(i));
return new Scaffold(
appBar: new AppBar(title: new Text(widget.title)),
body: new Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: children
),
floatingActionButton: new FloatingActionButton(
child: new Icon(Icons.add),
onPressed: () {
setState(() {
count = count + 1;
});
},
)
);
}
}
class InputWidget extends StatelessWidget {
final int index;
InputWidget(this.index);
@override
Widget build(BuildContext context) {
return new Text("InputWidget: " + index.toString());
}
}
导入“dart:core”;
进口“包装:颤振/材料.省道”;
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回新材料PP(
标题:“颤振演示”,
主题:新主题数据(
主样本:颜色。蓝色,
),
主页:新MyHomePage(标题:“一些标题”),
);
}
}
类MyHomePage扩展StatefulWidget{
MyHomePage({Key,this.title}):超级(Key:Key);
最后的字符串标题;
@凌驾
_MyHomePageState createState()=>new_MyHomePageState();
}
类_MyHomePageState扩展状态{
整数计数=1;
@凌驾
小部件构建(构建上下文){
List children=new List.generate(count,(inti)=>newinputwidget(i));
归还新脚手架(
appBar:newappbar(标题:newtext(widget.title)),
正文:新栏目(
mainAxisAlignment:mainAxisAlignment.space,
儿童:儿童
),
floatingActionButton:新的floatingActionButton(
子:新图标(Icons.add),
已按下:(){
设置状态(){
计数=计数+1;
});
},
)
);
}
}
类InputWidget扩展了无状态Widget{
最终整数指数;
InputWidget(this.index);
@凌驾
小部件构建(构建上下文){
返回新文本(“InputWidget:+index.toString());
}
}
这就是你的意思吗?那么,这是用户可以通过单击按钮在页面之间导航的方式,还是有其他方法?我认为对此,你应该研究MaterialApp
的onGenerateRoute
属性-存储库中的gallery示例应用程序有一些示例。但我也不太会飞!我会打开一个新的线程,我一发现就会告诉你。谢谢:)完美的答案,非常感谢!!了解,但在尝试上述代码时显示此错误::错误::类型“List”应为“List”,以实现预期的类型“List”。上述错误的解决方案:而不是将节点名称定义为将为List的变量