簡體   English   中英

在顫動的下拉按鈕上顯示選定的數據

[英]displaying selected data on Dropdownbutton on flutter

它實際上是我上一個問題的延續,在這里我已經成功地用我從 Get 方法檢索到的 Json 填充了我的列表。 作為建議,我使用 futurebuilder 小部件來構建我的 Dropdownbutton。 但我的問題是:在我選擇下拉列表后它無法顯示任何內容。 它崩潰了。

我還有其他事情與我有關。 我的項目是通過 esp8266 通過 http GET 方法接收掃描的附近 wifi(然后使用 POST 方法通過應用程序發送密碼)。 我的問題是:當我使用這個 Futurebuilder 小部件時,這個應用程序實際發出 http 請求的“時間”是什么? 會一直刷新嗎?

我可以只在一種情況下(可能在 initstate 中)填充下拉菜單項,然后僅在需要時才要求刷新(即使用按鈕)。 我一直在嘗試這樣做,但一直失敗。

這是我的代碼

Future<List<Post>> getAllPosts(String url) async {

  final response = await http.get(url);
  return allPostsFromJson(response.body);
}

List<Post> allPostsFromJson(String str) {
  final jsonData = json.decode(str);
  return new List<Post>.from(jsonData.map((x) => Post.fromJson(x)));
}

class Post {
  String name;
  String perc;
  String pass;

  Post({
    this.name,
    this.perc,
    this.pass,
  });

  factory Post.fromJson(Map<String, dynamic> json) => new Post(
        name: json["SSID"],
        perc: json["RSSI"],
        pass: json["PASS"],
      );

  Map<String, dynamic> toJson() => {
        "SSID": name,
        "RSSI": perc,
        "PASS": pass,
      };
}

class LoginPhaseState extends State<LoginPhase>{
  Post selected;

  final String uri = 'http://10.0.2.2/data/connection.json';


  @override
  Widget build(BuildContext context) {
    return FutureBuilder<List<Post>>(
                future: getAllPosts(uri),
                builder: (BuildContext context,
                    AsyncSnapshot<List<Post>> snapshot) {
                  if (!snapshot.hasData) return CircularProgressIndicator();
                  return DropdownButton<Post>(
                    items: snapshot.data
                        .map((ssid) => DropdownMenuItem<Post>(
                              child: Text(ssid.name),
                              value: ssid,
                            ))
                        .toList(),
                    onChanged: (Post value) {
                      setState(() {
                        selected = value;
                      });
                    },
                    isExpanded: false,
                    // value: selected,
                    hint: Text('Select User'),
                  );
                });
  }

} 

嘗試這個,

Future<List<Post>> getAllPosts(String url) async {

  final response = await http.get(url);
  return allPostsFromJson(response.body);
}

List<Post> allPostsFromJson(String str) {
  final jsonData = json.decode(str);
  return new List<Post>.from(jsonData.map((x) => Post.fromJson(x)));
}

class Post {
  String name;
  String perc;
  String pass;

  Post({
    this.name,
    this.perc,
    this.pass,
  });

  factory Post.fromJson(Map<String, dynamic> json) => new Post(
        name: json["SSID"],
        perc: json["RSSI"],
        pass: json["PASS"],
      );

  Map<String, dynamic> toJson() => {
        "SSID": name,
        "RSSI": perc,
        "PASS": pass,
      };
}

class LoginPhaseState extends State<LoginPhase>{
  Post selected;

  final String uri = 'http://10.0.2.2/data/connection.json';

  String _selectedChild= "";

  @override
  Widget build(BuildContext context) {
    return FutureBuilder<List<Post>>(
                future: getAllPosts(uri),
                builder: (BuildContext context,
                    AsyncSnapshot<List<Post>> snapshot) {
                  if (!snapshot.hasData)
                   return                                          CircularProgressIndicator();
                  return DropdownButton<Post>(
                    value: _selectedChild == "" ? null : _selectedChild,
                    items: snapshot.data
                        .map((ssid) => DropdownMenuItem<Post>(
                              child: Text(ssid.name),
                              value: ssid,
                            ))
                        .toList(),
                    onChanged: (Post value) {
                      setState(() {
                         _selectedChild = value.name;
                        selected = value;
                      });
                    },
                    isExpanded: false,
                    // value: selected,
                    hint: Text('Select User'),
                  );
                });
  }

}  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM