Flutter 颤振如何通过数组并在其他小部件中显示

Flutter 颤振如何通过数组并在其他小部件中显示,flutter,dart,Flutter,Dart,我有一个数组列表,我需要将它传递给另一个有状态小部件并在那里显示数组 这是我从API检索数据的函数代码 Future<List> doSomeAsyncStuff() async { final storage = new FlutterSecureStorage(); String value = await storage.read(key: 'Cnic'); print(value); String url = 'http://api.ph

我有一个数组列表,我需要将它传递给另一个有状态小部件并在那里显示数组

这是我从API检索数据的函数代码

  Future<List> doSomeAsyncStuff() async {
    final storage = new FlutterSecureStorage();
    String value = await storage.read(key: 'Cnic');
    print(value);

    String url = 'http://api.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
      print(familyMember["name"]);
      print(familyMember["gender"]);
    }

  }
这是我的另一个有状态小部件,我需要在这里显示名称和性别的数组

import 'package:flutter/material.dart';

class PersonalPage extends StatefulWidget {
  final String name;
  final String gender;
  PersonalPage(this.name, this.gender);

  @override
  _PersonalPageState createState() => _PersonalPageState();
}

class _PersonalPageState extends State<PersonalPage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Text('I need to print name and gender here ')
      ),
    );
  }
}
导入“包装:颤振/材料.省道”;
类PersonalPage扩展StatefulWidget{
最后的字符串名;
最终字符串性别;
个人页面(this.name,this.gender);
@凌驾
_PersonalPageState createState()=>\u PersonalPageState();
}
类_PersonalPageState扩展状态{
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:中(
孩子:文本('我需要在这里打印姓名和性别')
),
);
}
}
弗鲁特


尝试此操作,并根据以下内容更改代码:由于缺少第一页代码,我已创建了一个虚拟forst页

import 'package:flutter/material.dart';

void main() {
  runApp(MaterialApp(
    title: 'My APP',
    home: FirstRoute(),
  ));
}

class FirstRoute extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('List of ....'),
      ),
      body: Center(
        child: RaisedButton(
          child: Text('Open details'),
          onPressed: () {
            Navigator.push(
              context,
              MaterialPageRoute(builder: (context) => PersonalPage("NAME","GENDER")),
            );
          },
        ),
      ),
    );
  }
}

class PersonalPage extends StatefulWidget {
  final String name;
  final String gender;
  PersonalPage(this.name, this.gender);

  @override
  _PersonalPageState createState() => _PersonalPageState();
}

class _PersonalPageState extends State<PersonalPage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Row(
          children : [
            Text(widget.name),
            Text(widget.gender),
            
          ]
        )
      ),
    );
  }
}
导入“包装:颤振/材料.省道”;
void main(){
runApp(材料应用程序)(
标题:“我的应用程序”,
主页:FirstRoute(),
));
}
类FirstRoute扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“……列表”),
),
正文:中(
孩子:升起按钮(
子项:文本(“打开的详细信息”),
已按下:(){
导航器。推(
上下文
MaterialPageRoute(生成器:(上下文)=>PersonalPage(“姓名”、“性别”),
);
},
),
),
);
}
}
类PersonalPage扩展StatefulWidget{
最后的字符串名;
最终字符串性别;
个人页面(this.name,this.gender);
@凌驾
_PersonalPageState createState()=>\u PersonalPageState();
}
类_PersonalPageState扩展状态{
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:中(
孩子:排(
儿童:[
文本(widget.name),
文本(widget.gender),
]
)
),
);
}
}

您做错了,您正在传递列表,在有状态小部件中,您提到它是一个字符串,您可以这样做

                        Navigator.push(
                            context,
                            MaterialPageRoute(builder: (context) => PersonalPage(familyMember["name"], familyMember["gender"])),
                        );
  List<String> familyMemberName = [];
  List<String> familyMemberGender = [];


  Future<List> doSomeAsyncStuff() async {
    final storage = new FlutterSecureStorage();
    String value = await storage.read(key: 'Cnic');
    print(value);

    String url = 'http://api.php' ;
    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){ 
      familyMemberName.add(familyMember["name"]);
      familyMemberGender.add(familyMember["gender"]);
      print(familyMemberName);
    }

  }
import "package:flutter/material.dart";

class PersonalPage extends StatefulWidget {
  final List<String> names;
  final List<String> relation;

  PersonalPage(this.names,this.relation);
  @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 Padding(
                padding: EdgeInsets.only(left: 10, right: 10, bottom: 10, top: 10),
                child: Card(
                  child: Padding(
                    padding: EdgeInsets.all(5),
                    child: Column(
                      children: <Widget>[
                        Row(
                          children: <Widget>[
                            Text('Name:', style: TextStyle(color: Colors.blue, fontWeight: FontWeight.bold),),
                            Text(widget.names[index])
                          ],
                        ),
                        Row(
                          children: <Widget>[
                            Text('Gender:', style: TextStyle(color: Colors.blue, fontWeight: FontWeight.bold),),
                            Text(widget.genders[index])
                          ],
                        ),

                      ],
                    ),
                  ),
                ),
              );
            })
    );
  }
}
List familyMemberName=[];
列表familyMemberGender=[];
Future doSomeAsyncStuff()异步{
最终存储=新存储();
字符串值=wait storage.read(键:“Cnic”);
印刷品(价值);
字符串url='0http://api.php' ;
最终msg=jsonEncode({“cnic”:value});
映射头={'Content-Type':'application/json'};
字符串标记=值;
最终响应=等待http.get(url);
var Data=json.decode(response.body);
打印(数据);
var familyMembers=数据[“记录”][0][“家庭成员”];
打印(家庭成员);
对于(var familyMember in familyMember){
添加(familyMember[“name”]);
添加(familyMember[“性别]);
打印(家庭成员名称);
}
}
在你的个人小部件里,就像这样

                        Navigator.push(
                            context,
                            MaterialPageRoute(builder: (context) => PersonalPage(familyMember["name"], familyMember["gender"])),
                        );
  List<String> familyMemberName = [];
  List<String> familyMemberGender = [];


  Future<List> doSomeAsyncStuff() async {
    final storage = new FlutterSecureStorage();
    String value = await storage.read(key: 'Cnic');
    print(value);

    String url = 'http://api.php' ;
    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){ 
      familyMemberName.add(familyMember["name"]);
      familyMemberGender.add(familyMember["gender"]);
      print(familyMemberName);
    }

  }
import "package:flutter/material.dart";

class PersonalPage extends StatefulWidget {
  final List<String> names;
  final List<String> relation;

  PersonalPage(this.names,this.relation);
  @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 Padding(
                padding: EdgeInsets.only(left: 10, right: 10, bottom: 10, top: 10),
                child: Card(
                  child: Padding(
                    padding: EdgeInsets.all(5),
                    child: Column(
                      children: <Widget>[
                        Row(
                          children: <Widget>[
                            Text('Name:', style: TextStyle(color: Colors.blue, fontWeight: FontWeight.bold),),
                            Text(widget.names[index])
                          ],
                        ),
                        Row(
                          children: <Widget>[
                            Text('Gender:', style: TextStyle(color: Colors.blue, fontWeight: FontWeight.bold),),
                            Text(widget.genders[index])
                          ],
                        ),

                      ],
                    ),
                  ),
                ),
              );
            })
    );
  }
}
导入“包装:颤振/材料.省道”; 类PersonalPage扩展StatefulWidget{ 最后名单名称; 最终列表关系; 个人页面(此.名称,此.关系); @凌驾 _PersonalPageState createState()=>\u PersonalPageState(); } 类_PersonalPageState扩展状态{ @凌驾 小部件构建(构建上下文){ 返回脚手架( 正文: builder(//在此处使用ListView显示所有姓名和性别 itemCount:widget.names.length, itemBuilder:(构建上下文,int索引){ 返回填充( 填充:仅限边集(左:10,右:10,底部:10,顶部:10), 孩子:卡片( 孩子:填充( 填充:边缘设置。全部(5), 子:列( 儿童:[ 划船( 儿童:[ Text('名称:',样式:TextStyle(颜色:Colors.blue,fontwweight:fontwweight.bold), 文本(widget.names[索引]) ], ), 划船( 儿童:[ Text('性别:',样式:TextStyle(颜色:Colors.blue,fontwweight:fontwweight.bold), 文本(widget.genders[索引]) ], ), ], ), ), ), ); }) ); } }
很抱歉,我测试了代码,因此我将其添加到卡中

我尝试这样做,但当我传递代码时,会显示此错误方法“[]”被调用为null。接收者:null尝试调用:[”(“名称”)alsi我隐藏api请将其从应答中删除谢谢:)我这样尝试,但在传递时显示此错误方法“[]”是在null上调用的。接收方:null尝试呼叫:[](“名称”)