Flutter:从文本文件阅读项目时自动完成小部件

mznpcxlj  于 2023-01-31  发布在  Flutter
关注(0)|答案(1)|浏览(89)

我正在尝试实现自动完成的小部件和项目存在于一个文本文件。当阅读文件面对“一个值的类型'未来〈列表?〉'不能被分配给一个变量的类型'列表?'。”我错过了什么?

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');
        },
      ),
    );
  }
}
e0bqpujr

e0bqpujr1#

getData()是异步方法,是Future方法,意味着需要一些时间来执行,应该是这样的:List<String>? listItems = await getData();但它显示错误,因为您使用的构建方法不是异步的。* 最佳*解决方案FutureBuilder小部件!

相关问题