【问题标题】:why getting Instance of 'Album' as output not the json output?为什么将“专辑”实例作为输出而不是 json 输出?
【发布时间】:2021-06-28 09:33:54
【问题描述】:

//常备飞镖文件

 Future<Album> createAlbum(String cn,String amt,String op ) async {
      var queryParams = {
      'cn':cn,
      'amt':amt,   'op':op   }; Xml2Json xml2json=new Xml2Json(); final endpointUrl
 ='https://alpha1.mobikwik.com/recharge.do?uid=***********&pwd=**********&cir=5&reqid=12544172981251';
 final queryString = Uri.parse('queryParameters: $queryParams').query;
 final requestUrl = endpointUrl + '?' + queryString; final response =
 await http.get(Uri.parse(requestUrl), headers:
 {'ContentType':'application/json','X-MClient':'14','checksSum':'c/Jb9GVtPI+fW1sOgKlgdRyfVICd/u6LiiLH9IOLcIM=','Charset':
 'utf-8'});
 
   if (response.statusCode == 200) {                                   
 
     // If the server did return a 201 CREATED response,
     // then parse the JSON.
     print(response.body);    xml2json.parse(response.body);    var jsonData=xml2json.toGData();    return
 Album.fromJson(json.decode(jsonData));
        } else {
     // If the server did not return a 201 CREATED response,
     // then throw an exception.
     throw Exception('Failed to create album.');   } }

我的模特:

 class Album {
      final String status;   final String txId;   final String balance;   final String discountprice;   Album({   required this.status,  
 required this.txId, required this.balance,  required
 this.discountprice });
 
   factory Album.fromJson(Map<String, dynamic json) {
     return Album(
      status: json['cn'] ,
      txId: json['amt'] ,
       balance: json['op'] ,
       discountprice:json['discount']
       
     );   } }

我想如何展示它:

class Recharge extends StatefulWidget {   Recharge({Key? key}) :
 super(key: key);
      @override   _RechargeState createState() = _RechargeState(); }
 
 class _RechargeState extends State<Recharge {
     final TextEditingController _controller = TextEditingController();   final TextEditingController _controller1 = TextEditingController();  
 final TextEditingController _controller2 = TextEditingController();  
 Future<Album>? _futureAlbum;
 
 
    @override   Widget build(BuildContext context) {
     return MaterialApp(
       title: 'Create Data Example',
       theme: ThemeData(
         primarySwatch: Colors.blue,
       ),
       home: Scaffold(
         appBar: AppBar(
           title: Text('Create Data Example'),
         ),
         body: Container(
           alignment: Alignment.center,
           padding: const EdgeInsets.all(8.0),
           child: (_futureAlbum == null) ? buildColumn() : buildFutureBuilder(),
         ),
       ),
     );   }
 
   Column buildColumn() {
     return Column(
       mainAxisAlignment: MainAxisAlignment.center,
       children: <Widget[
         TextField(
           controller: _controller,
           decoration: InputDecoration(hintText: 'Enter Mobile No.'),
         ),
         TextField(
           controller: _controller1,
           decoration: InputDecoration(hintText: 'Enter Amount'),
         ),
         TextField(
           controller: _controller2,
           decoration: InputDecoration(hintText: 'Enter Operator.'),
         ),
         ElevatedButton(
           onPressed: () {
             setState(() {
               _futureAlbum = createAlbum(_controller.text,_controller1.text,_controller2.text);
               
             });
           },
           child: Text('Create Data'),
         ),
       ],
     );   }
 
   FutureBuilder<Album buildFutureBuilder() {
     return FutureBuilder<Album(
       future: _futureAlbum,
       builder: (context, snapshot) {
         if (snapshot.hasData) {
           return Text(snapshot.data.toString());
         } 
        else if (snapshot.hasError) {
           return Text('${snapshot.error}');
         }
 
         return CircularProgressIndicator();
       },
     );
 
   } }

【问题讨论】:

    标签: flutter


    【解决方案1】:

    在你的模型中编写一个 toJson 函数。

    Map<String, dynamic> toJson() => {
    "cn": status,
    "amt": txId,
    "op": balance,
    "discount": discountprice,
    };
    

    然后调用它

    print(album.toJson())
    

    【讨论】:

    • 无法使用静态访问访问实例成员“toJson”时出错。
    • 你必须创建一个对象,然后需要调用它。
    • { cn: , amt: , op: , discount: , } 得到这不是来自 api 的响应。
    猜你喜欢
    • 2017-12-21
    • 1970-01-01
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    • 2018-02-27
    • 2013-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多