我尝试将数据从第一页传递到第二页,数据可以通过,但现在有一个问题。 这是我的代码:
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。那么我该如何访问呢?
答案 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: