Flattern So zeigen Sie die Liste nach for-Schleife an
Ich habe eine einfache Liste erstellt, um sie nach for-Schleife anzuzeigen.
List categories = [
{
{
'CatID': '0',
'CatName': 'All'
},
{
'CatID': '1',
'CatName': 'Computer Hardware'
},
{
'CatID': '2',
'CatName': 'Computer Software'
},
}
];
dann definiere ich ein Widget wie dieses
List<Widget> CatWidget = List<Widget>();
Dann benutze ich es so
for (int i = 0; i < 8; i++) {
CatWidget.add(
Container(
child: Text(categories[i]['CatName']),
),
);
}
Es zeigt Fehler Class '_CompactLinkedHashSet<Map<String, String>>' has no instance method '[]'.
Antworten
Ihre Liste enthält zu viele Klammern:
List categories = [
{
'CatID': '0',
'CatName': 'All'
},
{
'CatID': '1',
'CatName': 'Computer Hardware'
},
{
'CatID': '2',
'CatName': 'Computer Software'
},
];
Und Ihre Schleife sollte laufen 3 nicht 8 , weil Sie nicht haben 8.
Folgendes würde also funktionieren. Ich empfehle Ihnen jedoch, die andere Antwort auf einen besseren Ansatz im Allgemeinen zu prüfen:
import 'package:flutter/material.dart';
void main() {
List categories = [
{
'CatID': '0',
'CatName': 'All'
},
{
'CatID': '1',
'CatName': 'Computer Hardware'
},
{
'CatID': '2',
'CatName': 'Computer Software'
},
];
final catWidget = List<Widget>();
for (int i = 0; i < 3; i++) {
catWidget.add(
Container(
child: Text(categories[i]['CatName']),
),
);
}
runApp(MyApp(catWidget));
}
class MyApp extends StatelessWidget {
final List<Widget> children;
const MyApp(this.children);
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Column(children: children),
),
);
}
}
Mit list.generate können Sie Ihre Liste durchlaufen und ein Widget zurückgeben.
Column(
children: List.generate(
tags.length,
(index) => Container(
// margin: EdgeInsets.symmetric(),
child: NativeButton(
borderRadius: BorderRadius.circular(4),
padding: EdgeInsets.symmetric(
vertical: sizeConfig.height(.01),
horizontal: sizeConfig.width(.02),
),
color: Colors.grey[200],
child: Text(tags[index]),
),
),
),
),
Sie haben ein JSON-Array, innerhalb des JSON-Arrays haben Sie ein JSON-Objekt und innerhalb dieses JSON-Objekts haben Sie mehrere JSON-Objekte, die Sie einzeln iterieren möchten, was unangemessen ist.
JSON-Array> JSON-Objekte True
JSON-Array> JSON-Array> JSON-Objekt (e) True
JSON-Array> JSON-Objekt> JSON-Objekt (e) Falsch
Die For-Schleife kann nur für Arrays oder Objektlisten verwendet werden, und der JSON sollte wie folgt aussehen:
[
{
'CatID': '0',
'CatName': 'All'
},
{
'CatID': '1',
'CatName': 'Computer Hardware'
},
{
'CatID': '2',
'CatName': 'Computer Software'
},
]