如何在MyApp的build方法中调用无状态小部件,该状态的状态由其有状态的父级管理

时间:2020-06-20 12:08:04

标签: flutter

我正在通过flutter教程在此链接上管理其父控件的状态[https://flutter.dev/docs/development/ui/interactive#parent-managed][1] 而且我不知道在这种情况下如何调用小部件

2 个答案:

答案 0 :(得分:0)

一旦掌握了逻辑,这将非常简单。

在实践中,父级(您称为“ true”小部件),即

class ParentWidget extends StatefulWidget {
  @override
  _ParentWidgetState createState() => _ParentWidgetState();
}

是您在代码的其余部分中随时随地都可以调用的代码。

由于这是一个有状态小部件,因此它表示已声明(为简单起见,它将管理UI上的所有更改)。任何更改都会发生,它将更改其状态,因此,此代码:

class _ParentWidgetState extends State<ParentWidget> {
  bool _active = false;

  void _handleTapboxChanged(bool newValue) {
    setState(() {
      _active = newValue;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      child: TapboxB(
        active: _active,
        onChanged: _handleTapboxChanged,
      ),
    );
  }
}

无论如何,一旦使用了有状态的小部件,只要想调用该函数,就可以更改其状态

setState(() {
      oldValue= newValue;
    });

它将重建整个窗口小部件,从而更改所需的内容(例如文本,图像,窗口小部件等)。 以一种不正确的方式,将其视为可以在一段时间内更改其UI的特定小部件。

答案 1 :(得分:0)

  • 如果要在MyApp的build方法中调用它,则必须使MyApp成为有状态的小部件,以便它可以管理所述小部件的状态
innerHTML

或者用其他有状态的小部件包装小部件,该小部件将在MyApp的构建方法中使用

void main() => runApp(MyApp());

//we make MyApp to be a stateful widget
class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  //we define the state which will be used in the widget here
  var myState = "something";
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Material App',
      home: Scaffold(
        appBar: AppBar(
          title: Text('Material App Bar'),
        ),
        body: Center(
          child: Container(
            //the data used by MyWidget is managed by MyApp which is a statefull widget.
            child: MyWidget(state: myState),
          ),
        ),
      ),
    );
  }
}