簡體   English   中英

如何修復錯誤類型'String'不是'index'的'int'類型的子類型?

[英]How to fix the error type 'String' is not a subtype of type 'int' of 'index'?

我是 flutter 的新手,在遵循 StackOverflow 指南之后,我設法找到了如何訪問 json 樹中值的特定部分並在 map 中打印特定鍵的這些值。 但現在我得到錯誤類型'String'不是'index'的'int'類型的子類型

這是我的代碼。

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return CupertinoApp(
      localizationsDelegates: <LocalizationsDelegate<dynamic>>[
        DefaultMaterialLocalizations.delegate,
        DefaultWidgetsLocalizations.delegate,
        DefaultCupertinoLocalizations.delegate,
      ],
      home: TransactionHistoryScreen(),
    );
  }
}

class TransactionHistoryScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return CupertinoPageScaffold(
      child: Scaffold(body: Container(child: MakeList(),),),
    );
  }
}

class MakeList extends StatelessWidget {
final List<Map<String, String>> json = [
  {"branch": "B1", "xyz": "0", "ABC": "2", "MN": "2"},
  {"branch": "B2", "xyz": "0", "ABC": "0", "MN": "0"},
];

@override
Widget build(BuildContext context) {
  return ListView.builder(
    itemCount: json.length,
    itemBuilder: (BuildContext context, int index) {
      return ListTileClass(jsonObject: json[index]);
    },
   );
  }
}

class ListTileClass extends StatefulWidget {
final Map<String, String> jsonObject;

ListTileClass({this.jsonObject});

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

class _ListTileClassState extends State<ListTileClass> {
  @override
  Widget build(BuildContext context) {
    return ListTile(
      title: Container(
        child: Row(
          children: makeWidgetChildren(widget.jsonObject),
        ),
      ),
    );
  }

  List<Widget> makeWidgetChildren(jsonObject) {
    List<Widget> children = [];
    jsonObject.keys.forEach(
      (key) => {
        children.add(
          Padding(
              child: Text('${key['branch']}'), padding: EdgeInsets.all(8.0)),
        ),
      },
    );
    return children;
  }
}

請問我可以知道如何解決這個錯誤嗎? 謝謝!

您正在迭代jsonObject.keys

var keys = ["branch", "xyz", "ABC", "MN"] 
keys.forEach((key) => print('${key['branch']}')); # A value of type 'String' can't be assigned to a variable of type 'int'.

所以你正在嘗試迭代字符串。

要解決 t:

Text('${jsonObject[key]}')

你的錯誤在這里:

itemBuilder: (BuildContext context, int index) {
      return ListTileClass(jsonObject: json[index]);

json 是 map 不是列表。 所以你會通過 `json["branch"] 調用一個元素

不確定,解決這個問題的最簡單方法是什么,但使用鍵創建一個列表可能會有所幫助: keyList = json.keys (也許你必須稍微調整一下才能使其工作,未經測試)。 然后你可以使用它return ListTileClass(jsonObject: json[keyList[index]]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM