【发布时间】:2020-05-24 07:23:39
【问题描述】:
_futureData 用于在从_loadPhobias() 函数检索值后用于FutureBuilder。
entry_screen.dart
Future _futureData;
final TextEditingController _textEditingController = TextEditingController();
_loadPhobias()函数好像没有问题。
entry_screen.dart
Future<List<String>> _loadPhobias() async =>
await rootBundle.loadString('assets/phobias.txt').then((phobias) {
List _listOfAllPhobias = [];
List<String> _listOfSortedPhobias = [];
_textEditingController.addListener(() {
...
});
return _listOfSortedPhobias;
});
@override
void initState() {
super.initState();
_futureData = _loadPhobias();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: TextField(
// When the value is changed, the value returned from the _loadPhobias will also change. So I want the FutureBuilder to be rebuilt.
onChanged: (text) { setState(() => _futureData = _loadPhobias()) },
),
),
body: FutureBuilder(
future: _futureData,
builder: (context, snapshot) {
return snapshot.hasData
? ListView.builder(
itemCount: snapshot.data.length,
itemBuilder: (context, index) => Column(
children: <Widget>[
PhobiasCard(sentence: snapshot.data[index]),
)
],
))
: Center(
child: CircularProgressIndicator(),
);
},
),
),
);
}
这是我得到的错误:
FlutterError(setState() 回调参数返回一个 Future。
_EntryScreenState#51168 上的 setState() 方法是使用返回 Future 的闭包或方法调用的。也许它被标记为“异步”。
不是在 setState() 调用中执行异步工作,而是先执行工作(不更新小部件状态),然后在 setState() 调用中同步更新状态。)
【问题讨论】:
-
您好,您能分享一下
textEditingController文本更改侦听器中的内容吗? -
@juliano
for (String i in LineSplitter().convert(phobias)) { _textEditingController.addListener(() { for (String t in _textEditingController.text.split('')) { if (i.split('-').first.toString().contains(t)) { _listOfSortedPhobias.add(i); } } }); } return _listOfSortedPhobias; -
@juliano texteditingcontroller 返回的数据没有问题可以使用,问题是futurebuilder更新
标签: flutter dart flutter-layout flutter-futurebuilder