颤振如何传递数组并在其他小部件中显示

时间:2020-09-15 11:25:57

标签: flutter dart

我有一个数组列表,我需要将其传递给其他有状态的小部件并在其中显示该数组

这是我从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"]);
    }

  }

您会看到有2个列表familyMember [“ name”]和familyMember [“ gender”]我需要将其传递给statefulwidget

我很简单地像这样传递它

                        Navigator.push(
                            context,
                            MaterialPageRoute(builder: (context) => PersonalPage(familyMember["name"], 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 ')
      ),
    );
  }
}

长笛

3 个答案:

答案 0 :(得分:1)

尝试此操作并按照以下步骤更改代码:由于缺少您的首页代码,因此我创建了一个虚拟的Forst Page。

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),
            
          ]
        )
      ),
    );
  }
}

答案 1 :(得分:0)

Text(widget.name)
Text(widget.gender)

Text("My name is ${widget.name} and my gender is ${widget.gender}")

答案 2 :(得分:0)

您在传递列表时做错了,在有状态的窗口小部件中提及其字符串,您可以执行以下操作

  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])
                          ],
                        ),

                      ],
                    ),
                  ),
                ),
              );
            })
    );
  }
}

对不起,我测试了代码,这就是为什么我将其添加到卡中