Flutter 颤振传递数据到Statefulwidget
我需要知道如何通过屏幕传递数据 下面是我发送数据的方式Flutter 颤振传递数据到Statefulwidget,flutter,dart,Flutter,Dart,我需要知道如何通过屏幕传递数据 下面是我发送数据的方式 class _HomePageState extends State<HomePage> { @override initState() { // TODO: implement initState super.initState(); doSomeAsyncStuff(); } Future<List> doSomeAsyncStuff() async { f
class _HomePageState extends State<HomePage> {
@override
initState() {
// TODO: implement initState
super.initState();
doSomeAsyncStuff();
}
Future<List> doSomeAsyncStuff() async {
final storage = new FlutterSecureStorage();
String value = await storage.read(key: 'Cnic');
print(value);
String url = 'http://api.igiinsurance.com.pk:8888/insurance_IgiGen/insurance-api/get_company_employee.php?offset=0&limit=1&cnic=${value}' ;
final msg = jsonEncode({"cnic": value});
Map<String,String> headers = {'Content-Type':'application/json'};
String token = value;
final response = await http.get(url);
var Data = json.decode(response.body);
print(Data);
var familyMembers = Data["records"][0]["family_members"];
print(familyMembers);
for (var familyMember in familyMembers){ //prints the name of each family member
var familyMemberName = familyMember["name"];
var familyMemberGender = familyMember["gender"];
var familyMemberAge = familyMember["age"];
var familyMemberRelationship = familyMember["relationship"];
print(familyMemberName);
}
}
@override
Widget build(BuildContext context) {
double statusBarHeight = MediaQuery.of(context).padding.top;
double width = MediaQuery.of(context).size.width;
double height = MediaQuery.of(context).size.height;
return Scaffold(
appBar: AppBar(
centerTitle: true,
automaticallyImplyLeading: false,
title: Text('IGI GENERAL INSURANCE'),
),
body: Center(
child: GestureDetector(
onTap: (){
Navigator.push(
context,
MaterialPageRoute(builder: (context) => PersonalPage(familyMemberName, familyMemberGender)),
);
},
child: Column(
children: <Widget>[
ClipRRect(
borderRadius: BorderRadius.circular(35),
child: Image(
image: AssetImage("assets/images/reg.png"),
height: height * 0.1,
)),
Text(
'Personal',
style: TextStyle(
fontSize: 17, fontWeight: FontWeight.bold),
)
],
),
),
)
);
}
}
现在我想在另一个有状态小部件中显示该值
class PersonalPage extends StatefulWidget {
@override
_PersonalPageState createState() => _PersonalPageState();
}
class _PersonalPageState extends State<PersonalPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
children: <Widget>[
Text('Show name here '),
Text('Show gender here ')
],
),
);
}
}
class PersonalPage扩展StatefulWidget{
@凌驾
_PersonalPageState createState()=>\u PersonalPageState();
}
类_PersonalPageState扩展状态{
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:专栏(
儿童:[
文本(“在此处显示名称”),
文本('在此处显示性别')
],
),
);
}
}
正如您所看到的,我将值传递给另一个有状态小部件。我现在需要在文本小部件中显示该值
添加了_homeState,现在也是一个问题您可以使用
PersonalPage
类的构造函数接收值:
import "package:flutter/material.dart";
class PersonalPage extends StatefulWidget {
final List<String> names;
final List<String> genders;
PersonalPage(this.names,this.genders);
@override
_PersonalPageState createState() => _PersonalPageState();
}
class _PersonalPageState extends State<PersonalPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
body:
ListView.builder( //use ListView here to show all the names and genders
itemCount: widget.names.length,
itemBuilder: (BuildContext context,int index){
return ListTile(
title: Text(widget.names[index]),
subtitle: Text(widget.genders[index])
],
);
})
);
}
}
您可以使用
PersonalPage
类的构造函数接收值:
import "package:flutter/material.dart";
class PersonalPage extends StatefulWidget {
final List<String> names;
final List<String> genders;
PersonalPage(this.names,this.genders);
@override
_PersonalPageState createState() => _PersonalPageState();
}
class _PersonalPageState extends State<PersonalPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
body:
ListView.builder( //use ListView here to show all the names and genders
itemCount: widget.names.length,
itemBuilder: (BuildContext context,int index){
return ListTile(
title: Text(widget.names[index]),
subtitle: Text(widget.genders[index])
],
);
})
);
}
}
当我在类似此PersonalPage(familyMemberName,familyMemberGender)的函数中传递值时它在一个值中显示错误getter“familyMemberGender”没有为类“\u HomePageState”定义我在你的问题中看不到任何
\u HomePageState
类,但是你需要在函数外部和\u HomePageState
类内部定义familyMemberName
和familyMemberGender
,只需分配它们在函数中的值错误的原因是变量的作用域在函数中,并且在函数完成后它们将被销毁。这就是为什么您需要在\u HomePageState
类中定义它们,以便在调用onTap函数时可以使用这些值。您可以使用Listview生成器在PersonPage中显示所有名称,如下所示:Listview.builder(itemCount:names.length,shrinkWrap:true,itemguilder:(上下文,索引){return listile(标题:Text(名称[index]),副标题:Text(性别[index]),);}),我更新了PersonalPage
code以及@jivanpatel建议的代码。请使用我们收到的代码2List
,当我在类似于此PersonalPage的函数(familyMemberName,familyMemberGender)中传递值时,我们使用ListView
显示所有姓名和性别它在一个值中显示错误getter“familyMemberGender”没有为类“\u HomePageState”定义我在你的问题中看不到任何\u HomePageState
类,但是你需要在函数外部和\u HomePageState
类内部定义familyMemberName
和familyMemberGender
,只需分配它们在函数中的值错误的原因是变量的作用域在函数中,并且在函数完成后它们将被销毁。这就是为什么需要在\u HomePageState
类中定义它们,以便在调用onTap函数时这些值可用。您可以使用Listview生成器PersnolPage中的所有名称如下所示:ListView.builder(itemCount:names.length,shrinkWrap:true,itemBuilder:(上下文,索引){返回ListTile(标题:Text(名称[索引]),副标题:Text(genders[index]),;}),我更新了PersonalPage
code以及@jivanpatel建议的代码。请使用我们收到的代码2List
,我们使用ListView
class _HomePageState extends State<HomePage> {
//define your variables here so they are accessible throughout your widget tree
List<String> familyMemberName = [];
List<String> familyMemberGender = [];
List<String> familyMemberAge = [];
List<String> familyMemberRelationship = [];
@override
initState() {
// TODO: implement initState
super.initState();
doSomeAsyncStuff();
}
Future<List> doSomeAsyncStuff() async {
final storage = new FlutterSecureStorage();
String value = await storage.read(key: 'Cnic');
print(value);
String url = 'http://api.igiinsurance.com.pk:8888/insurance_IgiGen/insurance-api/get_company_employee.php?offset=0&limit=1&cnic=${value}' ;
final msg = jsonEncode({"cnic": value});
Map<String,String> headers = {'Content-Type':'application/json'};
String token = value;
final response = await http.get(url);
var Data = json.decode(response.body);
print(Data);
var familyMembers = Data["records"][0]["family_members"];
print(familyMembers);
for (var familyMember in familyMembers){ //prints the name of each family member
//assign the values here
familyMemberName.add(familyMember["name"]);
familyMemberGender.add(familyMember["gender"]);
familyMemberAge.add(familyMember["age"]);
familyMemberRelationship.add(familyMember["relationship"]);
}
}
@override
Widget build(BuildContext context) {
double statusBarHeight = MediaQuery.of(context).padding.top;
double width = MediaQuery.of(context).size.width;
double height = MediaQuery.of(context).size.height;
return Scaffold(
appBar: AppBar(
centerTitle: true,
automaticallyImplyLeading: false,
title: Text('IGI GENERAL INSURANCE'),
),
body: Center(
child: GestureDetector(
onTap: (){
if(familyMemberName.isNotEmpty() && familyMemberGender.isNotEmpty()){
//we pass the lists here
Navigator.push(
context,
MaterialPageRoute(builder: (context) => PersonalPage(familyMemberName, familyMemberGender)),
}
//only navigate to the new page if the values of familyMemberName and familyMemberGender are retrieved from the function(because your function returns a future so it might take sometimes before the values are assigned)
);
},
child: Column(
children: <Widget>[
ClipRRect(
borderRadius: BorderRadius.circular(35),
child: Image(
image: AssetImage("assets/images/reg.png"),
height: height * 0.1,
)),
Text(
'Personal',
style: TextStyle(
fontSize: 17, fontWeight: FontWeight.bold),
)
],
),
),
)
);
}
}