【问题标题】:Flutter/Dart - How to process Json data which contains a comma separated list?Flutter/Dart - 如何处理包含逗号分隔列表的 Json 数据?
【发布时间】:2020-11-23 12:20:11
【问题描述】:

我有一个PageViewBuilder,它使用一个Map<String> 的json 数据,其中包含一个名为name 的字符串和另一个名为tagname 的字符串。问题是tagname 字符串实际上是一个逗号分隔的三个标签列表,打印输出为“boat,grass,toads”;但我想分开这个字符串,这样我就可以让每个项目成为一个可点击的按钮。即:

FlatButton( onPressed: () => boat(),
              text: "boat", 
            );

FlatButton( onPressed: () => grass(),
              text: "grass", 
            );

FlatButton( onPressed: () => toads(),
              text: "toads", 
            );

我尝试过这样使用 Dart 的拆分功能;

var splitag = tagname.split(",");
var splitag1 = splitag[0];
var splitag2 = splitag[1];
var splitag3 = splitag[2];

但是,如果三个标签名称中的任何一个是无效的,则会出现错误。

所以我尝试了这个;

String splitagone = splitag1 ?? "";
String splitagtwo = splitag2 ?? "";
String splitagthree = splitag3 ?? "";

但这仍然给了我一个错误。那么任何人都可以提出一种不同的方法来完成我需要的东西吗?这是完整的代码;

  class SpeakContent {
  final String name, tagname;

  SpeakContent({
    this.name,
    this.tagname
  });

  factory SpeakContent.fromJson(Map<String, dynamic> jsonData) {
    return SpeakContent(
      name: jsonData['name'],
      tagname: jsonData['tagname'],
    );
  }
}

 class StageBuilder extends StatelessWidget {

  final List<SpeakContent> speakcrafts;
  StageBuilder(this.speakcrafts);

  @override
  Widget build(context) {
    return PageView.builder(
      itemCount: speakcrafts.length,
      itemBuilder: (context, int currentIndex) {
        return createViewItem(speakcrafts[currentIndex], context);
      },
    );
  }

  Widget createViewItem(SpeakContent speakcraft, BuildContext context) {

    return Column(
      children: <Widget>[
        Container(
          child: Text(
            speakcraft.name,
          ),
        ),
        Container(child:
            FlatButton( onPressed: () => boat(),
              child: Text('boat'),
            ),
        ),
        Container(child:
        FlatButton( onPressed: () => grass(),
          child: Text('grass'),
        ),
        ),
        Container(child:
        FlatButton( onPressed: () => toads(),
          child: Text('toads'),
        )
        ),
      ],
    );
  }
}

【问题讨论】:

    标签: arrays json flutter dart


    【解决方案1】:

    你可以做这样的事情..

      Widget createViewItem(SpeakContent speakcraft, BuildContext context) {
        
        List<Widget> columnChildren = [];
        Text name = Text(speakcraft.name);
        columnChildren.add(name);
    
        speakcraft.tagname.split(',').forEach((String tag) {
          FlatButton tagButton = FlatButton(
            child: Text(tag),
            onPressed: (){},
          );
          columnChildren.add(tagButton);
        });
    
        return Column(
          children: columnChildren,
        );
        
      }
    

    【讨论】:

    • 不幸的是,这引发了同样的错误;在 null 上调用了方法“split”。 Receiver: null 尝试调用:split(",") 我猜我从 PHP/mySQL Post 收到的 json 返回的不是列表。
    • 这意味着tagname 在这种情况下为空。您可以将整个 forEach 循环放在一个 if 条件中,例如 if(speakcraft.tagname != null)
    • @JigarPatel 我也陷入了类似的问题。您能否检查并提出建议。 stackoverflow.com/questions/63779722/…
    【解决方案2】:

    你可以试试:

    var response = await http.get(
            Uri.encodeFull("...."),
            headers: {
              ...
            }
        );
    
    this.setState(() {
      testList = json.decode (response.body) as List;
    **testList[0];
    testList[1];**
    

    【讨论】:

      猜你喜欢
      • 2020-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-02
      • 2015-11-28
      • 1970-01-01
      相关资源
      最近更新 更多