Flutter 如何将未来对象列表中的值附加到简单的对象列表中

Flutter 如何将未来对象列表中的值附加到简单的对象列表中,flutter,dart,Flutter,Dart,我有一个TextFormField和一个showSearch。 在该showSearch中,我有一个使用虚拟数据硬编码的车辆列表。 我想改变这一点并从DB获得车辆,但我不知道如何将未来转换为列表。 以下是我的代码的外观: class DBHelper { ... ... // Function used to get all Vehicles from the DB. Future<List<Vehicle>> getVehicles() async { va

我有一个
TextFormField
和一个
showSearch
。 在该
showSearch
中,我有一个使用虚拟数据硬编码的车辆列表。 我想改变这一点并从DB获得车辆,但我不知道如何将
未来
转换为
列表
。 以下是我的代码的外观:

class DBHelper {
...
...
// Function used to get all Vehicles from the DB.
  Future<List<Vehicle>> getVehicles() async {
    var dbClient = await db;
    List<Map> maps = await dbClient.query(TABLE_VEHICLE, columns: [
      COLUMN_VEHICLE_ID,
      COLUMN_VEHICLE_REGISTRATION_NUMBER,
      COLUMN_VEHICLE_ODOMETER
    ]);
    List<Vehicle> vehicles = [];
    if (maps.length > 0) {
      for (int i = 0; i < maps.length; i++) {
        vehicles.add(Vehicle.fromMap(maps[i]));
      }
    }
    return vehicles;
  }
}
类DBHelper{
...
...
//用于从数据库获取所有车辆的函数。
Future getVehicles()异步{
var dbClient=await db;
List maps=WAIT dbClient.query(表\u车辆,列:[
列\u车辆\u ID,
列(车辆)(登记)(编号),,
立柱式车辆里程表
]);
列出车辆=[];
如果(maps.length>0){
对于(int i=0;i
class SearchPlateNumber扩展了SearchDelegate{
...
...
//具有虚拟数据的函数
载货车辆清单(){
var车辆=[
车辆(id:1,注册号:'DE99ABC',里程表:1234),
车辆(id:2,注册号:“AB22SDK”,里程表:1234),
车辆(识别号:3,注册号:“KS88ASD”,里程表:1234),
车辆(id:4,注册号:“NV37SSD”,里程表:1234),
车辆(识别号:5,注册号:'PT20KLK',里程表:1234),
车辆(id:6,注册号:'TEST123',里程表:1234),
车辆(识别号:7,注册号:“VT20QWE”,里程表:1234),
车辆(id:8,注册号:“JS23POP”,里程表:1234),
车辆(识别号:9,注册号:“XX12WWW”,里程表:1234),
车辆(识别号:10,注册号:“AB01RCA”,里程表:1234)
];
返回车辆;
}
//函数从数据库获取车辆
列表loadVehiclesDB(){
var dbHelper=dbHelper();
Future vehiclesList=dbHelper.getVehicles();
列表_listVehicles=List();
车辆列表。然后((值){
如果(value!=null)value.forEach((车辆)=>_listVehicles.add(车辆));
});
print(_listVehicles.length);//这里我每次都得到0,并且在DB中我有值
返回_listVehicles==null?[]:_listVehicles;
}
}
当我使用第二个函数时,我的列表中没有任何值

有人知道我做错了什么吗

下面是一个小演示,以反映我的问题:


提前感谢您阅读本文

我认为您需要等待:vehiclesList=await dbHelper.getVehicles()如果您有
未来
使用
FutureBuilder
获取
内部
构建()
method我可以在SearchDelegate中使用FutureBuilder吗?当然:它是一个
小部件
,所以你可以从
构建建议
/
构建结果
返回一个
小部件
,这样你就可以返回由
未来
驱动的
FutureBuilder
class SearchPlateNumber extends SearchDelegate<Vehicle> {
...
...
// Function with dummy data
  List<Vehicle> loadVehicles() {
    var vehicles = <Vehicle>[
      Vehicle(id: 1, regNumber: 'DE99ABC', odometer: 1234),
      Vehicle(id: 2, regNumber: 'AB22SDK', odometer: 1234),
      Vehicle(id: 3, regNumber: 'KS88ASD', odometer: 1234),
      Vehicle(id: 4, regNumber: 'NV37SSD', odometer: 1234),
      Vehicle(id: 5, regNumber: 'PT20KLK', odometer: 1234),
      Vehicle(id: 6, regNumber: 'TEST123', odometer: 1234),
      Vehicle(id: 7, regNumber: 'VT20QWE', odometer: 1234),
      Vehicle(id: 8, regNumber: 'JS23POP', odometer: 1234),
      Vehicle(id: 9, regNumber: 'XX12WWW', odometer: 1234),
      Vehicle(id: 10, regNumber: 'AB01RCA', odometer: 1234)
    ];

    return vehicles;
  }

  // Function to get the vehicles from DB
  List<Vehicle> loadVehiclesDB() {
    var dbHelper = DBHelper();
    Future<List<Vehicle>> vehiclesList = dbHelper.getVehicles();

    List<Vehicle> _listVehicles = List<Vehicle>();
    vehiclesList.then((value) {
      if (value != null) value.forEach((vehicle) => _listVehicles.add(vehicle));
    });
    print(_listVehicles.length); // here I get 0 every time and in DB I have values
    return _listVehicles == null ? [] : _listVehicles;
  }
}