我正在尝试实现自动完成的小部件和项目存在于一个文本文件。当阅读文件面对“一个值的类型'未来〈列表?〉'不能被分配给一个变量的类型'列表?'。”我错过了什么?
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
class ContractControl extends StatefulWidget {
const ContractControl({super.key});
@override
State<ContractControl> createState() => _ContractControlState();
}
class _ContractControlState extends State<ContractControl> {
//static const List<String> listItems = <String>['Apple', 'Banana'];
Future<List<String>?> getData() async {
try {
String fileData = await rootBundle.loadString('assets/instruments.txt');
List<String> lines = fileData.split('\n');
return lines;
} catch (e) {
throw (e.toString());
}
}
@override
Widget build(BuildContext context) {
List<String>? listItems = getData(); **--> here**
return Scaffold(
appBar: AppBar(title: const Text('Contract Control')),
body: Autocomplete<String>(
optionsBuilder: (TextEditingValue textEditingValue) {
Future<List<String>?> listItems = getData();
if (textEditingValue.text == '') {
return const Iterable<String>.empty();
}
return listItems.where((String item) {
return item.contains(textEditingValue.text.toUpperCase());
});
},
onSelected: (String item) {
print('Item selected');
},
),
);
}
}
1条答案
按热度按时间e0bqpujr1#
getData()是异步方法,是Future方法,意味着需要一些时间来执行,应该是这样的:
List<String>? listItems = await getData();
但它显示错误,因为您使用的构建方法不是异步的。* 最佳*解决方案是FutureBuilder
小部件!