使数据对所有 类 flutter 可用
Make data available to all classes flutter
我正在我的主页上制作一个 http get request
returns Iterable
的列表。单击 tab
时,我需要将此结果传递到屏幕。当导航到新的 sscreen 时,它没有像预期的那样正常工作,因为它 returns null。所以我猜这不是正确的方法。
首页
class DashBoardPage extends StatefulWidget {
@override
_DashBoardPageState createState() => _DashBoardPageState();
}
class _DashBoardPageState extends State<DashBoardPage> {
List<MentorIndex> mentorIndexes = [];
SharedPreferences sharedPreferences;
Iterable newList;
Widget callPage(int currentIndex) {
switch (currentIndex) {
case 0:
showTabs = true;
return TabBarView(
//trying to pass this list to new tab screen
children: [new HomePage(), new SchedulePage(), RequestsPage(menteeIds: newList,)]);
break;
default:
return HomePage();
}
}
@override
void initState() {
super.initState();
fetchIndex();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
title: '',
}
}
Future fetchIndex() async {
SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
var uri = NetworkUtils.host + AuthUtils.endPointIndex;
try {
final response = await http.get(
uri,
headers: {'Accept': 'application/json', 'Content-Type': 'application/json','Authorization': 'Bearer ' + sharedPreferences.get("token"), },
);
final responseJson = json.decode(response.body);
for (var u in responseJson["data"]) {
MentorIndex user = MentorIndex(
u["id"],
u["mentor_id"],
u["mentee_id"],
u["status"],
u["session_count"],
u["current_job"],
u["email"],
u["phone_call"],
u["video_call"],
u["face_to_face"],
u["created_at"],
u["updated_at"]);
mentorIndexes.add(user);
newList = mentorIndexes.map((MentorIndex) => MentorIndex.mentee_id);
}
return responseJson;
} catch (exception) {
print(exception);
}
}
}
您需要在有状态小部件中设置状态以更改其状态并重建小部件,现在您只需传递在创建时分配的 newList
的 null
值。
在您的 fetchIndex
方法中,用 setState
包装您的 newList
赋值代码,就像这样
setState((){
newList = mentorIndexes.map((MentorIndex) => MentorIndex.mentee_id);
})
这样您将通知您的 StatefulWidget
它的 State
对象已更改并且需要重建。
我正在我的主页上制作一个 http get request
returns Iterable
的列表。单击 tab
时,我需要将此结果传递到屏幕。当导航到新的 sscreen 时,它没有像预期的那样正常工作,因为它 returns null。所以我猜这不是正确的方法。
首页
class DashBoardPage extends StatefulWidget {
@override
_DashBoardPageState createState() => _DashBoardPageState();
}
class _DashBoardPageState extends State<DashBoardPage> {
List<MentorIndex> mentorIndexes = [];
SharedPreferences sharedPreferences;
Iterable newList;
Widget callPage(int currentIndex) {
switch (currentIndex) {
case 0:
showTabs = true;
return TabBarView(
//trying to pass this list to new tab screen
children: [new HomePage(), new SchedulePage(), RequestsPage(menteeIds: newList,)]);
break;
default:
return HomePage();
}
}
@override
void initState() {
super.initState();
fetchIndex();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
title: '',
}
}
Future fetchIndex() async {
SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
var uri = NetworkUtils.host + AuthUtils.endPointIndex;
try {
final response = await http.get(
uri,
headers: {'Accept': 'application/json', 'Content-Type': 'application/json','Authorization': 'Bearer ' + sharedPreferences.get("token"), },
);
final responseJson = json.decode(response.body);
for (var u in responseJson["data"]) {
MentorIndex user = MentorIndex(
u["id"],
u["mentor_id"],
u["mentee_id"],
u["status"],
u["session_count"],
u["current_job"],
u["email"],
u["phone_call"],
u["video_call"],
u["face_to_face"],
u["created_at"],
u["updated_at"]);
mentorIndexes.add(user);
newList = mentorIndexes.map((MentorIndex) => MentorIndex.mentee_id);
}
return responseJson;
} catch (exception) {
print(exception);
}
}
}
您需要在有状态小部件中设置状态以更改其状态并重建小部件,现在您只需传递在创建时分配的 newList
的 null
值。
在您的 fetchIndex
方法中,用 setState
包装您的 newList
赋值代码,就像这样
setState((){
newList = mentorIndexes.map((MentorIndex) => MentorIndex.mentee_id);
})
这样您将通知您的 StatefulWidget
它的 State
对象已更改并且需要重建。