【问题标题】:AutoCompleteTextField not Showing json Data FlutterAutoCompleteTextField 不显示 json 数据颤振
【发布时间】:2020-08-27 07:19:24
【问题描述】:

这里我试图通过 json 在文本字段中显示所有拼贴名称,但我不知道为什么它没有显示我的调试控制台中显示的 allcollagename 列表数据,但它在 AutoCompleteTextField 中不可见

这是我用来获取拼贴名称数据的 api

var api = 'http://universities.hipolabs.com/search';

这是我的获取数据功能。

fetchData() async {
    try {
      var res = await http.get(api);
      var data = jsonDecode(res.body);
      List<CollageName> collageNameList = data.map<CollageName>((sup) {
        return CollageName.fromJson(sup);
      }).toList();

      allCollageList = collageNameList;
      return allCollageList;
    } catch (err) {
      return Future.error("Connection Error Restart App");
    }
  }

我在 initState 中调用这个获取数据函数 这是我的 AutoCompleteTextField 代码

 Container(
            child: AutoCompleteTextField(
                key: key,
                controller: _suggetionTextFieldController,
                suggestions: allCollageList,
                clearOnSubmit: false,
                style: TextStyle(fontSize: 10),
                itemFilter: (item, query) {
                  return item.name
                      .toLowerCase()
                      .startsWith(query.toLowerCase());
                },
                itemSorter: (a, b) {
                  return a.name.compareTo(b.name);
                },
                itemSubmitted: (item) {
                  _suggetionTextFieldController.text = item.name;
                },
                itemBuilder: (context, item) {
                  return Container(
                    child: Text(item.name),
                  );
                })),

拼贴名称(模型类)

class CollageName {
  String country;
  String stateProvince;
  String name;
  List<dynamic> webPages;
  List<dynamic> domains;
  String alphaTwoCode;

  CollageName(
      {this.country,
      this.stateProvince,
      this.name,
      this.webPages,
      this.domains,
      this.alphaTwoCode});

  CollageName.fromJson(Map<String, dynamic> json) {
    country = json['country'] ?? "ohh bhai tu fir aa gaya";
    stateProvince = json['state-province'];
    name = json['name'] ?? "ohh bhai tu fir aa gaya";
    webPages = json['web_pages'].cast<String>();
    domains = json['domains'].cast<String>();
    alphaTwoCode = json['alpha_two_code'] ?? "ohh Bhai";
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['country'] = this.country;
    data['state-province'] = this.stateProvince;
    data['name'] = this.name;
    data['web_pages'] = this.webPages;
    data['domains'] = this.domains;
    data['alpha_two_code'] = this.alphaTwoCode;
    return data;
  }
}

初始化状态

 @override
  void initState() {
    super.initState();
    fetchData();
    print(allCollageList.toString());
  }

【问题讨论】:

    标签: flutter dart flutter-layout flutter-dependencies


    【解决方案1】:

    对您的 fetchData() 方法进行一些更改

    fetchData() async {
    
        try {
          var res = await http.get(api);
          var data = jsonDecode(res.body);
    
          List<CollageName> collageNameList = data.map<CollageName>((sup) {
            return CollageName.fromJson(sup);
          }).toList();
    
          // added these 3 lines also, notice that I have used .addAll() method instead of using the assignment operator
          setState(() {
            allCollageList.addAll(collageNameList); 
          });
    
        } catch (err) {
          return Future.error("Connection Error Restart App: " + err);
        }
      }
    

    【讨论】:

      【解决方案2】:

      我认为你在设置变量后错过了setState

      试试这样的,

      fetchData() async {
          try {
            var res = await http.get(api);
            var data = jsonDecode(res.body);
            List<CollageName> collageNameList = data.map<CollageName>((sup) {
              return CollageName.fromJson(sup);
            }).toList();
      
          
           setState((){  allCollageList = collageNameList });
            
           
          } catch (err) {
            return Future.error("Connection Error Restart App");
          }
        }
      

      以及在您的fromJson 实现中。它应该返回实例。

      factory CollageName.fromJson(Map<String, dynamic> json) {
          
          return CollageName(
            country : json['country'] ?? "ohh bhai tu fir aa gaya",
            stateProvince : json['state-province'],
            name : json['name'] ?? "ohh bhai tu fir aa gaya",
            webPages : json['web_pages'],
            domains : json['domains'],
            alphaTwoCode : json['alpha_two_code'] ?? "ohh Bhai"
          );
          
       }
      

      希望有效!

      【讨论】:

      • 你能发布完整代码或initStateCollageName吗?
      猜你喜欢
      • 2018-12-23
      • 2020-01-12
      • 2022-01-08
      • 1970-01-01
      • 1970-01-01
      • 2018-10-24
      • 1970-01-01
      • 2021-09-28
      • 1970-01-01
      相关资源
      最近更新 更多