如何从StatefulWidget到State类颤动访问变量

时间:2020-08-17 15:40:59

标签: flutter

我尝试将数据从第一页传递到第二页,数据可以通过,但现在有一个问题。 这是我的代码:


class SecondScreen extends StatefulWidget {
  final int itemHolder ;
  SecondScreen({Key key, @required this.itemHolder}) : super(key: key);

  @override
  State<StatefulWidget> createState() {
    return new mainState();

  }
}

class mainState extends State <SecondScreen> {
  bool value = false ;
  MyPreferences _myPreferences = MyPreferences();
  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    initial();

  }

  void initial() async {
    setState(() {

    });
  }
  final String apiURL = 'http://xxxxxxxxx/getFlowersList.php';
  Future<List<Flowerdata>> fetchFlowers() async {
    var response = await http.get(apiURL);
    if (response.statusCode == 200) {
      final items = json.decode(response.body).cast<Map<String, dynamic>>();
      List<Flowerdata> listOfFruits = items.map<Flowerdata>((json) {
        return Flowerdata.fromJson(json);
      }).toList();

      return listOfFruits;
    }
    else {
      throw Exception('Failed to load data from Server.');
    }
  }

我尝试像这样在链接中使用var(itemHolder):

  final String apiURL = 'http://xxxxxxx/getFlowersList.php?id=' +itemHolder;

但我收到错误消息:

Undefined name 'itemHolder'. Try correcting the name to one that is defined, or defining the name.

我可以访问itemHolder。那么我该如何访问呢?

2 个答案:

答案 0 :(得分:2)

尝试一下:

 ... 
 String apiURL; 

 @override
  void initState() { 
    super.initState();
    apiURL = 'http://xxxxxxx/getFlowersList.php?id=' +widget.itemHolder.toString(); 
  }
  ...

答案 1 :(得分:0)

要使用在SecondScreen中声明的变量,必须使用前缀“ widget”和点运算符(而不是直接使用)来访问它。这是代码:

  final String apiURL = 'http://xxxxxxx/getFlowersList.php?id=' + widget.itemHolder;

将变量定为final时,必须在声明时或通过构造函数对其进行初始化,否则请删除关键字final: