Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 下拉列表不显示数据抖动_Flutter - Fatal编程技术网

Flutter 下拉列表不显示数据抖动

Flutter 下拉列表不显示数据抖动,flutter,Flutter,我试图在下拉菜单中显示数据,但我有一个奇怪的问题,我似乎无法解决。问题是,当打开包含下拉菜单的视图时,api数据从服务器获取数据,它可以正常工作,但数据没有第一次显示在下拉菜单中,在调试模式下,当我按下hot realod时,数据显示在下拉菜单中,而不是第一次显示视图时 下拉菜单 Flexible( flex: 0, child: Padding(

我试图在下拉菜单中显示数据,但我有一个奇怪的问题,我似乎无法解决。问题是,当打开包含下拉菜单的视图时,api数据从服务器获取数据,它可以正常工作,但数据没有第一次显示在下拉菜单中,在调试模式下,当我按下hot realod时,数据显示在下拉菜单中,而不是第一次显示视图时

下拉菜单

                  Flexible(
                    flex: 0,
                    child: Padding(
                      padding: const EdgeInsets.all(8.0),
                      child: Container(
                        height: 45,
                        width: 300,
                        decoration: BoxDecoration(
                            color: Colors.white,
                            borderRadius: BorderRadius.circular(5),
                            border: Border.all(
                                color: Color.fromRGBO(92, 52, 76, 1))),
                        child: DropdownButton<String>(
                            isExpanded: true,
                            itemHeight: 50,
                            underline: SizedBox(),
                            value: _selectedVehicle,
                            items: vehicle_list.map((vehicle) {
                              return DropdownMenuItem<String>(
                                value: vehicle.id,
                                child: new Text(
                                  vehicle.model,
                                  style: TextStyle(
                                      fontSize: 15,
                                      color: Color.fromRGBO(
                                          92, 52, 76, 1)),
                                ),
                              );
                            }).toList(),
                            hint: Padding(
                              padding: const EdgeInsets.all(8.0),
                              child: Text("Please Select Vehicle"),
                            ),
                            onChanged: (newValues) {
                              setState(() {
                                _selectedVehicle = newValues;
                              });
                            }),
                      ),
                    ),
                  )

我认为这将解决您的问题:

Future getVehicles()异步{
车辆列表。清除();
未来令牌=SharedPreference().getToken();
然后((数据)异步{
令牌=数据;
var response=wait http.get(URL.BASE\u URL+URL.get\u车辆,标题:{
“授权”:“持票人”+代币,
“内容类型”:“应用程序/json”
});
如果(response.statusCode==200){
打印(“vechiles”+response.body.toString());
Map value=json.decode(response.body);
试一试{
var数据=值[‘数据’];
对于(int i=0;isetState((){}));
}捕获(e){
打印(如toString());
}
}否则{
打印(response.body.toString());
}
});
}

我认为这将解决您的问题:

Future getVehicles()异步{
车辆列表。清除();
未来令牌=SharedPreference().getToken();
然后((数据)异步{
令牌=数据;
var response=wait http.get(URL.BASE\u URL+URL.get\u车辆,标题:{
“授权”:“持票人”+代币,
“内容类型”:“应用程序/json”
});
如果(response.statusCode==200){
打印(“vechiles”+response.body.toString());
Map value=json.decode(response.body);
试一试{
var数据=值[‘数据’];
对于(int i=0;isetState((){}));
}捕获(e){
打印(如toString());
}
}否则{
打印(response.body.toString());
}
});
}

您必须在函数末尾调用
设置状态
,以修改状态!
像这样的,

Future<String> getVehicles() async {
    vehicle_list.clear();
    Future tokens = SharedPrefrence().getToken();
    tokens.then((data) async{
      token=data;
      var response = await http.get(Urls.BASE_URL + Urls.GET_VEHICLES, headers: {
        "Authorization": "Bearer " + token,
        "Content-Type": "application/json"
      });
      if (response.statusCode == 200) {
        print("vechiles " + response.body.toString());
        Map<String, dynamic> value = json.decode(response.body);
        try {
          var data = value['data'];
          for (int i = 0; i < data.length; i++) {
            var obj = data[i];
            vehicle_list.add(VehicleModel(
                obj['id'].toString(),
                obj['user_id'].toString(),
                obj['type'].toString(),
                obj['model'],
                obj['reg_no'],
                obj['fuel_type'].toString()));
          }
          setState(() {});
        } catch (e) {
          
          print(e.toString());
        }
      } else {
        print(response.body.toString());
      }
    });
  }
Future getVehicles()异步{
车辆列表。清除();
未来令牌=SharedPreference().getToken();
然后((数据)异步{
令牌=数据;
var response=wait http.get(URL.BASE\u URL+URL.get\u车辆,标题:{
“授权”:“持票人”+代币,
“内容类型”:“应用程序/json”
});
如果(response.statusCode==200){
打印(“vechiles”+response.body.toString());
Map value=json.decode(response.body);
试一试{
var数据=值[‘数据’];
对于(int i=0;i

希望能成功

您必须在函数末尾调用
设置状态
,以修改状态!
像这样的,

Future<String> getVehicles() async {
    vehicle_list.clear();
    Future tokens = SharedPrefrence().getToken();
    tokens.then((data) async{
      token=data;
      var response = await http.get(Urls.BASE_URL + Urls.GET_VEHICLES, headers: {
        "Authorization": "Bearer " + token,
        "Content-Type": "application/json"
      });
      if (response.statusCode == 200) {
        print("vechiles " + response.body.toString());
        Map<String, dynamic> value = json.decode(response.body);
        try {
          var data = value['data'];
          for (int i = 0; i < data.length; i++) {
            var obj = data[i];
            vehicle_list.add(VehicleModel(
                obj['id'].toString(),
                obj['user_id'].toString(),
                obj['type'].toString(),
                obj['model'],
                obj['reg_no'],
                obj['fuel_type'].toString()));
          }
          setState(() {});
        } catch (e) {
          
          print(e.toString());
        }
      } else {
        print(response.body.toString());
      }
    });
  }
Future getVehicles()异步{
车辆列表。清除();
未来令牌=SharedPreference().getToken();
然后((数据)异步{
令牌=数据;
var response=wait http.get(URL.BASE\u URL+URL.get\u车辆,标题:{
“授权”:“持票人”+代币,
“内容类型”:“应用程序/json”
});
如果(response.statusCode==200){
打印(“vechiles”+response.body.toString());
Map value=json.decode(response.body);
试一试{
var数据=值[‘数据’];
对于(int i=0;i
希望能成功

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    getVehicles();
   
  }
Future<String> getVehicles() async {
    vehicle_list.clear();
    Future tokens = SharedPrefrence().getToken();
    tokens.then((data) async{
      token=data;
      var response = await http.get(Urls.BASE_URL + Urls.GET_VEHICLES, headers: {
        "Authorization": "Bearer " + token,
        "Content-Type": "application/json"
      });
      if (response.statusCode == 200) {
        print("vechiles " + response.body.toString());
        Map<String, dynamic> value = json.decode(response.body);
        try {
          var data = value['data'];
          for (int i = 0; i < data.length; i++) {
            var obj = data[i];
            vehicle_list.add(VehicleModel(
                obj['id'].toString(),
                obj['user_id'].toString(),
                obj['type'].toString(),
                obj['model'],
                obj['reg_no'],
                obj['fuel_type'].toString()));
          }
          setState(() {});
        } catch (e) {
          
          print(e.toString());
        }
      } else {
        print(response.body.toString());
      }
    });
  }