我有页面将数据作为参数发送到其他页面,第二个页面在其中接收参数(Widget build(BuildContext context)),所以Future函数位于页面Class的开头,如下代码:
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
class Days extends StatefulWidget {
@override
_DaysState createState() => _DaysState();
}
class _DaysState extends State<Days> {
var cm_id;
var d_id;
var w_id;
var u_id;
Map rdata = {};
Map data = {};
List digrees;
Future getDigrees() async {
var url = 'http://10.0.2.2/jiyan/test/api/digrees/day_digree.php?u_id=' +
u_id +
'&m_id=' +
cm_id +
'&d_id=' +
d_id;
var response = await http.get(url);
data = jsonDecode(response.body);
}
@override
void initState() {
super.initState();
getDigrees();
}
@override
Widget build(BuildContext context) {
rdata = ModalRoute.of(context).settings.arguments;
setState(() {
cm_id = int.parse(rdata['current_m_id'].toString());
d_id = int.parse(rdata['d_id'].toString());
w_id = int.parse(rdata['w_id'].toString());
u_id = int.parse(rdata['u_id'].toString());
});
return Scaffold()
现在,该函数无法接收这些数据,我该怎么办?
您应该考虑不要将所有内容作为成员变量置于状态中。尝试尽可能多地使用依赖项注入(将所需的所有内容用作方法参数)。
在Dart中,使用$这样的字符串连接很容易:
int a = 5;
int b = 10;
String result = "$a + $b = ${a+b}";
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
class Days extends StatelessWidget {
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: fetchDigrees(context),
builder: (context, snapshot) {
if (snapshot.connectionState != ConnectionState.done) {
return Center(
child: Text("Loading...."),
);
}
List digrees = snapshot.data;
return Text(digrees.length.toString());
},
);
}
Future<List> fetchDigrees(BuildContext context) async {
Map rdata = ModalRoute.of(context).settings.arguments;
int cm_id = int.parse(rdata['current_m_id'].toString());
int d_id = int.parse(rdata['d_id'].toString());
int w_id = int.parse(rdata['w_id'].toString());
int u_id = int.parse(rdata['u_id'].toString());
var url =
'http://10.0.2.2/jiyan/test/api/digrees/day_digree.php?u_id=$u_id&m_id=$cm_id&d_id=$d_id';
var response = await http.get(url);
var data = jsonDecode(response.body);
return data["digrees"]; //or however you have to extract this from the json
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句