如果在initState()中创建,则Flutter Switch小部件不起作用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果在initState()中创建,则Flutter Switch小部件不起作用相关的知识,希望对你有一定的参考价值。

我正在尝试创建一个Switch小部件,将其添加到initState中的小部件列表中,然后将此列表添加到构建方法中Column的children属性中。该应用程序成功运行,并且Switch小部件确实显示但单击它不会更改它,就好像它不起作用。我尝试在构建方法中创建相同的小部件,并且Switch按预期工作。

我在_onClicked中添加了一些注释,我已将这些注释分配给Switch小部件的onChanged属性,该属性显示了value属性的流。

import 'package:flutter/material.dart';

void main() {
  runApp(new MaterialApp(
    home: App(),
  ));
}

class App extends StatefulWidget {
  @override
  AppState createState() => new AppState();
}

class AppState extends State<App> {

  List<Widget> widgetList = new List<Widget>();
  bool _value = false;

  void _onClicked(bool value) {
    print(_value); // prints false the first time and true for the rest
    setState(() {
      _value = value;
    });
    print(_value); // Always prints true
  }

  @override
  void initState() {
    Switch myWidget = new Switch(value: _value, onChanged: _onClicked);
    widgetList.add(myWidget);
  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text('My AppBar'),
      ),
      body: new Container(
        padding: new EdgeInsets.all(32.0),
        child: new Center(
          child: new Column(children: widgetList),
        ),
      ),
    );
  }
}
答案

initState是初始化状态,而不是小部件。 build是创建小部件。

它失败的原因是因为当值改变时(当你调用setState时)需要重建小部件,但这不是因为当调用build()时,之前(在initState中)创建的小部件被重用。

  @override
  Widget build(BuildContext context) {
    List<Widget> widgetList = [];
    Switch myWidget = new Switch(value: _value, onChanged: _onClicked);
    widgetList.add(myWidget);

    return new Scaffold(
      appBar: new AppBar(
        title: new Text('My AppBar'),
      ),
      body: new Container(
        padding: new EdgeInsets.all(32.0),
        child: new Center(
          child: new Column(children: widgetList),
        ),
      ),
    );
  }

以上是关于如果在initState()中创建,则Flutter Switch小部件不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何在c#neo4jClient中创建一个唯一节点(如果已经存在则不重复)?

如何在 Airflow 中创建条件任务

在循环中在 Highcharts 中创建多个系列

在单词VBA中创建单选按钮

如何在 OPL 的替代函数中创建 if 和 else?

如果不存在但不更新,如何在猫鼬中创建