我在Flutter中有DropdownButton的问题

时间:2020-07-07 15:23:26

标签: flutter

早上好朋友,我正在尝试使用DropdownButton,它为我带来了信息,但在显示信息之前却显示了一个错误。

我打印了数据以确认它不是空的,并且可以有效地将列表带上而没有问题

这是显示的错误: enter image description here

这是我正在使用的代码

import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key}) : super(key: key);

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String _mySelection;
  final String url = "http://webmyls.com/php/getdata.php";
  List data;

  Future<String> getSWData() async {
    var res = await http
        .get(Uri.encodeFull(url), headers: {"Accept": "application/json"});
    var resBody = json.decode(res.body);
    setState(() {
      data = resBody;
    });

    print(data);
    return "Sucess";
  }

  @override
  void initState() {
    super.initState();
    this.getSWData();
  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      body: new Center(
        child: new DropdownButton(
          //data != null,
          isDense: true,
          hint: new Text("Select"),
          items: data.map((item) {
            return new DropdownMenuItem(
              child: new Text(item['item_name']),
              value: item['id'].toString(),
            );
          }).toList(),
          onChanged: (newVal) {
            setState(() {
              _mySelection = newVal;
            });
          },
          value: _mySelection,
        ),
      ),
    );
  }
}

2 个答案:

答案 0 :(得分:0)

创建此小部件:

  Widget _myDropDown() {
   if (data == null) return Center();
   return new DropdownButton(
  //data != null,
  isDense: true,
  hint: new Text("Select"),
  items: data.map((item) {
    return new DropdownMenuItem(
      child: new Text(item['item_name']),
      value: item['id'].toString(),
    );
  }).toList(),
  onChanged: (newVal) {
    setState(() {
      _mySelection = newVal;
    });
  },
  value: _mySelection,
);
}

然后将_myDropDown放入您的Center

答案 1 :(得分:0)

Yeimer初始化 数据 List data = List();您的问题将得到解决。