标题基本上说明了一切.一个非常无聊的问题...我有以下基本代码来创建应用程序的初始状态:

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(),
        ]
      ),
    );
  }
}

现在,当用户单击按钮时,我如何呈现新的Widget?假设我想实例化另一个InputWidget.

谢谢

推荐答案

我希望我正确理解了你的问题.

我认为主要的一点是,您不应该考虑"另一个"小部件-如果您将MyHomePage的内容从第一个子元素改为两个子元素,那么实际上并不是第一个子元素有keep个子元素,然后是add another个子元素.你只需先说"我想要一个子元素",然后又改变主意说"我想要两个子元素".

在您的代码中,您可以通过调用_MyHomePageState内部的setState来实现这一点.Ffltter负责保留第一个子元素并添加第二个子元素.

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相关问答推荐

为什么在穷举switch 表达式中需要显式向下转换?

我不明白在DART的`if()`语句中使用`case

将所有内容放在有序组中,但将括号中的字符组合在一起

浮动操作按钮:如何像 RaisedButton 一样更改启动 colored颜色 和突出显示 colored颜色 ?

默认情况下不可为空(Non-nullable ):如何启用experiment?

无法在Flutter中为 TabBarView 设置动态高度

运行时出现Flutter错误:Error waiting for a debug connection: Bad state: No element

你如何在 Polymer 中调度和监听自定义事件?

如何处理 ListView 滚动方向

如何在 Flutter 中渲染单个像素?

使用 Dart 计算字符串中字母的数量

如何在Dart中switch 枚举?

Flutter 中 ChangeNotifier 的构建器小部件

将DateTime转换为ISO 8601

GestureDetector onTap 卡

如何在 Dart 2 中将 List 更改为 List

Dart:Iterable 与 List,总是使用 Iterable?

Null aware函数调用运算符

dart中是否可以有一个私有构造函数?

在 Dart 中克​​隆list列表、map或set集合