gpt4 book ai didi

flutter :how to call function in statelesswidget?

转载 作者:行者123 更新时间:2023-12-02 19:28:40 24 4
gpt4 key购买 nike

我想用 ListView 和 JSON 显示数据列表。此代码在一个文件中,带有 stateless widget。登录后打开此页面。当我在 stateful widget 中尝试时,代码运行正常。在 stateless widget 中,当我调试它时,代码没有调用函数 getData()。而是直接去了

Widget build(BuildContext context) {    
return new Scaffold( ...

完整代码如下:

class frmClass extends StatelessWidget{
List<dynamic> dta;
get setState => null;

Future<String> getData() async {
var uri ='https://xxxx.com/class';
var map = new Map<String, dynamic>();
map["username"] = "abc";
map["password"] = "1234";

http.Response response = await http.post(
uri,
body: jsonEncode(map),
);

Map<String,dynamic> mp = jsonDecode(utf8.decode(response.bodyBytes));
this.setState(() {
dta = mp["data"];
debugPrint(dta.toString());
});

}

@override
void initState(){
this.getData();
}

@override
Widget build(BuildContext context) {

return new Scaffold(
appBar: new AppBar(
backgroundColor:Colors.transparent,
elevation: 0.0,
iconTheme: new IconThemeData(color: Color(0xFF18D191))),
body: new ListView.builder(
itemCount: dta == null ? 0 : dta.length,
itemBuilder: (BuildContext context, int index){
return new Card(
child: new Text(dta[index]["className"]),
);
}
),
);
}
}

我该如何解决?

最佳答案

您可以使用 FutureBuilder 将 getData() 调用到 StatelessWidget 的 build() 方法中:

https://api.flutter.dev/flutter/widgets/FutureBuilder-class.html

但是,每次重建 statelessWidget 时都会触发 getData()。

另一种方法是使用响应式(Reactive)编程架构(如 Bloc、rxdart 等)。

取决于您想要什么,每次或仅触发一次 getData()(或当您的条件为真/假时)。

关于 flutter :how to call function in statelesswidget?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62145976/

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