मेरे पास सरणियों की एक सूची है, मुझे इसे अन्य स्टेटफुल विजेट में पास करने और वहां सरणी दिखाने की आवश्यकता है

यह मेरा फ़ंक्शन कोड है जो एपीआई से डेटा पुनर्प्राप्त करता है

  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 सूची परिवार सदस्य ["नाम"] और परिवार सदस्य ["लिंग"] है, मुझे इसे स्टेटफुलविजेट में पास करने की आवश्यकता है

मैं इसे इस तरह से पास कर रहा हूं

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

बांसुरी

0
rameez khan 15 सितंबर 2020, 14:25

3 जवाब

सबसे बढ़िया उत्तर

आप गलत कर रहे हैं आप सूची पास कर रहे हैं और स्टेटफुल विजेट में आप इसकी एक स्ट्रिंग का उल्लेख करते हैं, आप ऐसा कुछ कर सकते हैं

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

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

क्षमा करें, मैं कोड का परीक्षण करता हूं इसलिए मैं इसे कार्ड में क्यों जोड़ता हूं

0
Umaiz Khan 15 सितंबर 2020, 15:05

इसे आज़माएं और इसके अनुसार अपना कोड बदलें: चूंकि आपका पहला पेज कोड गुम है, इसलिए मैंने एक डमी फॉर्स्ट पेज बनाया है।

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
Dev 15 सितंबर 2020, 14:54
Text(widget.name)
Text(widget.gender)

या

Text("My name is ${widget.name} and my gender is ${widget.gender}")
0
Autocrab 15 सितंबर 2020, 14:32