2

我有两个简单的基础示例,一个是 Works,第二个需要一些解释。因此,当我在示例一中单击按钮时,它可以工作并 setStaet 呈现页面。

第二个示例我使用了一个具有按钮 setState 的主体函数。当我单击按钮时,如果括号内的变量未呈现,即使使用 setState 注释也不会发生任何事情。当我在类中创建变量实例时,它工作正常,但我只需要渲染一个按钮怎么办?

完整代码示例一

import 'package:flutter/material.dart';

main() => runApp(MaterialApp(
      home: Home(),
    ));

class Home extends StatefulWidget {
  @override
  _HomeState createState() => _HomeState();
}

class _HomeState extends State<Home> {
  bool istrue = false;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Works fine'),),
      body: Center(child: body()),
    );
  }

  Widget body() {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        RaisedButton(
          onPressed: () {
            setState(() {
              istrue = !istrue;
            });
          },
          child: Text('Click me'),
        ),
        Padding(
          padding: const EdgeInsets.all(8.0),
          child: Text(istrue ? 'Boo!' : ''),
        ),
      ],
    );
  }
}

完整代码示例二

import 'package:flutter/material.dart';

main() => runApp(MaterialApp(
  home: Home(),
));

class Home extends StatefulWidget {
  @override
  _HomeState createState() => _HomeState();
}

class _HomeState extends State<Home> {
  bool istrue = false;
  @override
  Widget build(BuildContext context) {

    return Scaffold(
      appBar: AppBar(title: Text('Works fine'),),
      body: Center(child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          body(),body(),
        ],
      )),
    );
  }

  Widget body() {

    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        RaisedButton(
          onPressed: () {
            setState(() {
              istrue = !istrue;
            });
          },
          child: Text('Click me'),
        ),
        Padding(
          padding: const EdgeInsets.all(8.0),
          child: Text(istrue ? 'Boo!' : ''),
        ),
      ],
    );
  }
}

感谢天空。

4

2 回答 2

0

在第二个示例中,您在 Scaffold 小部件中的另一个 Column 小部件中调用 Column 小部件。为什么要这么做?在 Flutter API 中有很多方法可以构建该布局。

你不能有new Column(new Column(...));它的冗余。

编辑:我从Column 类的颤振网站中提取了这个:

Column 小部件不会滚动(并且通常认为 Column 中的子项数量超过可用房间的容量是错误的)。如果您有一行小部件并希望它们能够在空间不足时滚动,请考虑使用 ListView。

于 2018-07-28T19:22:46.713 回答
0

我在理解你的问题时遇到了一些麻烦,但我也明白英语不是你的第一语言。您似乎在问,“我怎样才能只渲染一个按钮,例如 #2?”。如果这不是您的问题,请告诉我,以便我和其他人可以帮助您。

这只会渲染一个按钮,

import 'package:flutter/material.dart';

main() => runApp(MaterialApp(
  home: Home(),
));

class Home extends StatefulWidget {
  @override
  _HomeState createState() => _HomeState();
}

class _HomeState extends State<Home> {
  bool istrue = false;
  @override
  Widget build(BuildContext context) {

    return Scaffold(
      appBar: AppBar(title: Text('Works fine'),),
      body: Center(child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          RaisedButton(
            onPressed: () {
              setState(() {
                istrue = !istrue;
              });
            },
            child: Text('Click me'),
          ),
          Padding(
            padding: const EdgeInsets.all(8.0),
            child: Text(istrue ? 'Boo!' : ''),
          ),
          Padding(
            padding: const EdgeInsets.all(8.0),
            child: Text(istrue ? 'Boo!' : ''),
          ),
        ],
      )),
    );
  }

}
于 2018-07-28T16:56:19.873 回答