gpt4 book ai didi

flutter - 从另一个小部件调用一个小部件的方法

转载 作者:IT王子 更新时间:2023-10-29 06:51:58 26 4
gpt4 key购买 nike

我刚开始 flutter ,这是一个基本问题,但我无法解决。我创建了一个有状态的小部件,我需要在单击按钮时调用 setState() 方法。该按钮不是此有状态小部件的一部分。该按钮位于应用程序的页脚中。

完整的应用代码:

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
@override
build(BuildContext context) {
return new MaterialApp(
title: "My app title",
home: new Scaffold(
appBar: new AppBar(
title: new Text("My App"),
backgroundColor: Colors.amber,
),
body: new Container(
child: new Center(
child: new MyStateFullWidget(),
),
),
persistentFooterButtons: <Widget>[
new FlatButton(
onPressed: () {
// I need to call the update() of MyStateFullWidget/MyStateFullWidgetState class
},
child: new Text("Click Here"),
color: Colors.amber,
textColor: Colors.white,
),
],
));
}
}

class MyStateFullWidget extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return new MyStateFullWidgetState();
}
}

class MyStateFullWidgetState extends State<MyStateFullWidget> {
int count = 0;

@override
Widget build(BuildContext context) {
return new Text("Count: $count");
}

update() {
setState() {
count++;
}
}
}

最佳答案

I need to call the setState() method on click of a button

您可能有几个选项(或备选方案)来实现最终结果(所有选项都有不同的权衡):

  • 将状态(即 count)提升到 Inherited Widget在按钮和显示小部件上方。这可能是最简单或最合适的。
  • 利用某种基于操作的通信,例如 Flutter Redux (您在此处调度 一个操作,该操作通过 StoreConnector 影响显示小部件并重建)。这可以看作是“提升”状态的另一种方式。但是,鉴于您的简单示例,这需要全新的依赖项和大量开销,但我想指出这一点。
  • 您可以创建某种 StreamStreamController显示小部件订阅/收听。但是,这可能有点矫枉过正,而且我不确定在流中表示按钮点击是否合适。

可能还有其他我没有想到的解决方案;但是,请记住响应式(Reactive) UI 的目标是 keep state simple .

因此,如果您有多个关注某个状态的叶小部件(想要了解它,想要更改它),则可能意味着它属于更高级别的组件(例如,一个 App 级别的状态,或者可能是其他一些共同的祖先——但两者都可以使用 Inherited Widget 来防止到处传递状态片段)

关于flutter - 从另一个小部件调用一个小部件的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49432432/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com