gpt4 book ai didi

android - Flutter - setState 不更新内部有状态小部件

转载 作者:IT老高 更新时间:2023-10-28 12:30:28 37 4
gpt4 key购买 nike

基本上,我正在尝试制作一个应用程序,其内容将使用从网站获取信息的异步​​函数进行更新,但是当我尝试设置新状态时,它不会重新加载新内容。如果我调试应用程序,它会显示当前内容是新内容,但在“重建”整个小部件后,它不会显示新信息。

编辑:loadData()方法,基本上是读取一个带有http包的URL,该URL包含一个JSON文件,其内容每5分钟变化一次,有新消息。例如,带有体育实时记分牌的 .json 文件,其分数总是在变化,因此内容应该总是随着新结果而变化。

class mainWidget extends StatefulWidget
{
State<StatefulWidget> createState() => new mainWidgetState();
}

class mainWidgetState extends State<mainWidget>
{

List<Widget> _data;
Timer timer;

Widget build(BuildContext context) {
return new ListView(
children: _data);
}

@override
void initState() {
super.initState();
timer = new Timer.periodic(new Duration(seconds: 2), (Timer timer) async {
String s = await loadData();
this.setState(() {
_data = <Widget> [new childWidget(s)];
});
});
}
}

class childWidget extends StatefulWidget {
childWidget(String s){
_title = s;
}

Widget _title;

createState() => new childState();
}

class childState extends State<gameCardS> {

Widget _title;

@override
Widget build(BuildContext context) {
return new GestureDetector(onTap: foo(),
child: new Card(child: new Text(_title));

}

initState()
{
super.initState();
_title = widget._title;
}
}

最佳答案

这应该可以解决您的问题。基本上,您总是希望在 build 方法层次结构中创建小部件。

import 'dart:async';

import 'package:flutter/material.dart';

void main() => runApp(new MaterialApp(home: new Scaffold(body: new MainWidget())));

class MainWidget extends StatefulWidget {
@override
State createState() => new MainWidgetState();
}

class MainWidgetState extends State<MainWidget> {

List<ItemData> _data = new List();
Timer timer;

Widget build(BuildContext context) {
return new ListView(children: _data.map((item) => new ChildWidget(item)).toList());
}

@override
void initState() {
super.initState();
timer = new Timer.periodic(new Duration(seconds: 2), (Timer timer) async {
ItemData data = await loadData();
this.setState(() {
_data = <ItemData>[data];
});
});
}


@override
void dispose() {
super.dispose();
timer.cancel();
}

static int testCount = 0;

Future<ItemData> loadData() async {
testCount++;
return new ItemData("Testing #$testCount");
}
}

class ChildWidget extends StatefulWidget {

ItemData _data;

ChildWidget(ItemData data) {
_data = data;
}

@override
State<ChildWidget> createState() => new ChildState();
}

class ChildState extends State<ChildWidget> {

@override
Widget build(BuildContext context) {
return new GestureDetector(onTap: () => foo(),
child: new Padding(
padding: const EdgeInsets.symmetric(vertical: 12.0, horizontal: 24.0),
child: new Card(
child: new Container(
padding: const EdgeInsets.all(8.0),
child: new Text(widget._data.title),
),
),
)
);
}

foo() {
print("Card Tapped: " + widget._data.toString());
}
}

class ItemData {
final String title;

ItemData(this.title);

@override
String toString() {
return 'ItemData{title: $title}';
}
}

关于android - Flutter - setState 不更新内部有状态小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48844804/

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