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的变量