Flutter - Render new Widgets on click

后端 未结 2 883
谎友^
谎友^ 2021-02-14 02:05

The title basically says it all. A very nooby question... I have this basic code to create the initial state of my app :

class MyApp extends StatelessWidget {
           


        
2条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2021-02-14 02:40

    I hope I understand your question correctly...

    I think the main point is that you should not think of "another" widget - if you change the content of MyHomePage from having first one child and then two you don't really keep the first child and then add another child. You simply first say "I want one child" and then you change your mind and say "I want two children".

    In your code you do this by calling setState inside _MyHomePageState. Flutter takes care of keeping the first and adding the second child.

    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 {
    
      int count = 1;
    
      @override
      Widget build(BuildContext context) {
        List 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());
      }
    }
    

    Is this what you meant?

提交回复
热议问题