0
votes

Comment puis-je itération sur un tableau d'objets qui appartiennent à une valeur de clé - flotter

J'ai une liste de données appelées ancrages qui a un lien vers un écran détaillé. Et chaque ancre a des centres de distribution qui sont une gamme d'objets imbriqués. J'ai donc pu analyser un identifiant de chacun des ancres à un écran détaillé et OID strong> J'ai un défi de faire boucle à travers les enfants, c'est-à-dire les centres de distribution des ancres. S'il vous plaît quelqu'un peut-il m'aider, j'ai pu extraire toutes les valeurs appartenant à une ancrage à l'écran détaillé, mais comment boucler les valeurs imbriquées dans l'écran détaillé est le problème. Les valeurs imbriquées sont des centres de distribution dans la matrice ci-dessous. S'il vous plaît quelqu'un peut m'aider à m'aider toujours en apprendre davantage sur flutter?

JSON TRAY: P>

  import 'package:flutter/material.dart';


class detailsPage extends StatefulWidget {
  dynamic value;
  detailsPage({Key key, @required this.value}) : super(key: key);
  @override
  _detailsPageState createState() => _detailsPageState(value);
}

class _detailsPageState extends State<detailsPage> {

  dynamic value;
  _detailsPageState(this.value);
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Anchors Details Page"),
        iconTheme: IconThemeData(color: Colors.white),
        backgroundColor: Colors.green,
      ),
      // body: Center(
      //   child: Text(
      //     value[1]['Name'].toString(),
      //   ),
      // ),


       body: Column(
     children: <Widget>[
        Padding(
          padding: const EdgeInsets.all(8.0),
          child: Card(
            child: Column(
              children: <Widget>[
                Text(value[1]['Name']),
                Text(value[1]['Oid'].toString()),
                //Text(value [1]['DistributionCentres']),
              ],
            ),
          ),
        ),
    ],
   ),
    );
  }
}


0 commentaires

3 Réponses :


0
votes

Je vous recommande d'utiliser des classes de données pour de telles situations.

import 'package:flutter/material.dart';

List<Anchor> _parseAnchors(Map<String, dynamic> map) {
  final anchors = <Anchor>[];
  for (var anchorMap in map['Anchors']) {
    final anchor = Anchor.fromMap(anchorMap);
    anchors.add(anchor);
  }
  return anchors;
}

class Anchor {
  final int oId;
  final String name;
  final String acronym;
  final List<DistributionCenter> distributionCenters;

  const Anchor({
    @required this.oId,
    @required this.name,
    @required this.acronym,
    @required this.distributionCenters,
  });

  factory Anchor.fromMap(Map<String, dynamic> map) {
    final distributionCenters = <DistributionCenter>[];
    for (var distribution in map['DistributionCentres']) {
      final distributionCenter = DistributionCenter.fromMap(distribution);
      distributionCenters.add(distributionCenter);
    }

    return Anchor(
      oId: map['Oid'] as int,
      name: map['Name'] as String,
      acronym: map['Acronym'] as String,
      distributionCenters: distributionCenters,
    );
  }
}

class DistributionCenter {
  final int id;
  final String name;
  final String address;

  const DistributionCenter({
    @required this.id,
    @required this.name,
    @required this.address,
  });

  factory DistributionCenter.fromMap(Map<String, dynamic> map) {
    return DistributionCenter(
      id: map['Oid'] as int,
      name: map['Name'] as String,
      address: map['Address'] as String,
    );
  }
}

class AnchorPage extends StatelessWidget {
  // details page
  final Anchor anchor;

  @override
  const AnchorPage({Key key, @required this.anchor}) : super(key: key);

  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        child: Text(anchor.name),
      ),
    );
  }
}

class AnchorsPage extends StatefulWidget {
  const AnchorsPage({Key key}) : super(key: key);

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

class _AnchorsPageState extends State<AnchorsPage> {
  static const anchorsMap = {
    "Anchors": [
      {
        "Oid": 11,
        "Name": "MAIZE ASSOCIATION OF NIGERIA",
        "Acronym": "MAAN",
        "DistributionCentres": [
          {
            "Oid": 11,
            "Name": "Logo Centre (Zone A)",
            "Address": "Private Warehouse, Ugba, Logo LGA"
          },
          {
            "Oid": 12,
            "Name": "Makurdi Centre (Zone B)",
            "Address": "Ministry of Agric, Makurdi "
          },
          {
            "Oid": 13,
            "Name": "Oturkpo Centre (Zone C)",
            "Address": "Private Warehouse, Oturkpo"
          },
          {
            "Oid": 15,
            "Name": "Borno MAAN centre",
            "Address": "Bolori Store, Flavour Mill, Behind Vita Foam, Maiduguri"
          },
          {
            "Oid": 18,
            "Name": "Bauchi Centre",
            "Address": "BASPD, Dass Road, Bauchi"
          }
        ],
        "NoOfDistributionCentres": 5
      },
      {
        "Oid": 2,
        "Name":
            "MAIZE GROWERS, PROCESSORS AND MARKETERS ASSOCIATION OF NIGERIA",
        "Acronym": "MAGPAMAN",
        "DistributionCentres": [
          {
            "Oid": 2,
            "Name": "Guma Centre",
            "Address":
                "P 32, 2nd Avenue Federal Housing Estate, N/Bank, Makurdi"
          },
          {
            "Oid": 3,
            "Name": "Logo Centre",
            "Address": "Terhemen Akema Storage Facility, Ugba, Logo LGA"
          },
          {
            "Oid": 5,
            "Name": "Oturkpo Centre",
            "Address": "Grain Store, Lower Benue Okele Project, Otukpo"
          },
          {
            "Oid": 6,
            "Name": "Gboko Centre",
            "Address":
                "K3 New Road, Opposite former coca cola plant. Solar Schools Street, 
    Gboko"
          },
          {
            "Oid": 7,
            "Name": "Gwer East Centre",
            "Address":
                "Ahua Shardye's Warehouse, Behind Sylkan Filling Station, Ikpayongo , 
  G/East LGA"
          },
          {
            "Oid": 8,
            "Name": "Kwande Centre",
            "Address": "KM 3, Adagi Road, Adikpo"
          },
          {
            "Oid": 9,
            "Name": "Ohimini Centre",
            "Address": "Ajoga Oglewu, Ohimini"
          },
          {
            "Oid": 10,
            "Name": "Oju Centre",
            "Address": "Behind Town Hall, Ohuhu owo, Oju LGA"
          }
        ],
        "NoOfDistributionCentres": 8
      }
    ],
  };
  final _anchors = <Anchor>[];

  @override
  Widget build(BuildContext context) {
    // now you can use the anchors list here
    return Scaffold(
      body: ListView.builder(
        itemCount: _anchors.length,
        itemBuilder: (context, index) {
          final anchor = _anchors[index];
          return ListTile(
            title: Text(anchor.name),
            subtitle: Text(anchor.acronym),
            trailing: Text(anchor.distributionCenters?.length?.toString()),
            onTap: () {
              Navigator.push(
                context,
                MaterialPageRoute(
                  builder: (context) => AnchorPage(anchor: anchor),
                ),
              );
            },
          );
        },
      ),
    );
  }

  @override
  void initState() {
    super.initState();
    final anchors = _parseAnchors(anchorsMap);
    _anchors.addAll(anchors);
  }
}


3 commentaires

ok je tire les données du fichier de préférences partagées qui est pourquoi devrais-je toujours utiliser un modèle qui a été téléchargé immédiatement la connexion utilisateur


Les classes de données sont bonnes lorsque vous gérez des données importantes ou que vous utilisez les mêmes données avec de nombreuses propriétés à de nombreux endroits. Peu importe où vous obtenez les données.


Bonjour @ Elias-Andualem s'il vous plaît si j'appelle les données de la préférence partagée Que puis-je faire ici Statique Const AnchorsMap =



1
votes

Si vous voulez toutes les adresses de distributionCentres xxx

si vous souhaitez une adresse xxx

J'aime rappeler la valeur [1] Vous pouvez transmettre l'identifiant sélectionné à partir de l'écran précédent et l'utiliser ici comme valeur [ID sélectionné],

espère que cela aide ..


11 commentaires

Je mets un défi sur où placer le forach


Puis-je voir croquis si vous avez


Affichez-vous tous les centres de distribution ici, // texte (valeur [1] ['"DistributionCentres']),


Salut j'ai édité la réponse, n'a pas eu le temps de tester le code, de vérifier et de me le faire savoir


ok monsieur, je joins de l'esquisse de ce que je veux atteindre ci-dessous


Bonjour monsieur Tout fonctionne, c'est juste ceci: aime rappeler la valeur [1], vous pouvez transmettre l'identifiant sélectionné à partir de l'écran précédent et l'utiliser ici comme valeur [ID sélectionné], comment puis-je analyser l'ID s'il vous plaît


Si vous trouvez cette réponse comme solution, veuillez l'accepter ..


Non monsieur, je l'ai trouvé que je cherche toujours comment l'obtenir monsieur. S'il vous plaît aidez-moi @ s.am.i


Salut, dans le commentaire, je ne peux pas écrire du code, si avez-vous ajouté cela comme une question s'il vous plaît partage-moi afin que je puisse vous aider à sortir


Ok monsieur voici la question: Stackoverflow.com/questions/62575057/...


Bonjour, j'ai répondu au Qustion, vérifiez-le et laissez-moi savoir, vous pouvez transmettre des données comme je l'ai mentionnée dans cette réponse dans ce cas, vous devez obtenir l'index sélectionné de votre première vue de liste d'écran, qui signifie index de la liste. vue (supposée être variable)



0
votes

Voici le croquis qui décrit ce que je veux atteindre ci-dessous. Lorsque les utilisateurs cliquent sur une ancre, il vous amène à cette page de détails d'ancrage unique où vous verrez tous les centres de distribution appartenant à et ancrez à partir de là, vous pouvez maintenant ajouter un enregistrement ajouter le dossier qui concerne un centre.

 Entrez la description de l'image ici


0 commentaires