簡體   English   中英

如何使用 dio post 請求生成列表?

[英]How can I generate list using dio post request?

我嘗試了很多但無法修復,我正在嘗試我的 json 響應

{
    "data": [
        {
            "id": 1,
            "team_one_id": 1,
            "team_two_id": 2,
            "match_date": "04 Mar 2021",
            "is_started": 0,
            "match_between": "Team1 VS Team2",
            "match_between_nick": "ABC VS XYZ",
            "ground_time": "4:30 pm"
        }
    ]
}

我的 Model

import 'package:flutter/material.dart';
import 'dart:core';
class Matches{
  final int id;
  final String match_date;
  final String match_between;
  final String match_between_nick;
  final String ground_time;
  Matches({
    this.id, 
    this.match_date, 
    this.match_between, 
    this.match_between_nick,
    this.ground_time
  });

  factory Matches.fromJson(Map<String, dynamic> parsedJson){

    return Matches(
      id: parsedJson['id'],
      match_date: parsedJson['match_date'],
      match_between: parsedJson['match_between'],
      match_between_nick: parsedJson['match_between_nick'],
      ground_time: parsedJson['ground_time']
    );
  }
}

使用工作正常的 dio 獲取記錄

_getMatchesWithDio() async {
    var dio = Dio();
    Map<String, String> headers = {
      'Content-Type': 'multipart/form-data',
      'Accept-Charset': 'UTF-8'
    };
    FormData formData = new FormData.fromMap({
      "api_actions": "yes"
    });
    Response response =  await dio.post(
      'http://www.myapiurl.com/project/api.php', 
      data: formData, 
      options: Options(
        headers: {"x-auth": 'xyz' },
      )
    );

    matches = Matches.fromJson(response.data['data']);
    return matches;
  }

以下是我未來的建設者

SafeArea(
        top: true,
        child: FutureBuilder(
          future: _getMatchesWithDio(),
          builder: (context, snapshot){
            if(snapshot.connectionState == ConnectionState.waiting){
              return Center(
                child: CircularProgressIndicator(),
              );
            }
            if(snapshot.hasData){
              return  ListView(
                  children: snapshot.data.map<Widget>((single){
                    return Text('saddasd');
                  }).toList()
              );
            }
          }
        )
      )

而且我想發布我在終端中得到的錯誤日志

I/flutter ( 9314): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
I/flutter ( 9314): The following assertion was thrown building FutureBuilder<dynamic>(dirty, state:
I/flutter ( 9314): _FutureBuilderState<dynamic>#1f5e1):
I/flutter ( 9314): A build function returned null.
I/flutter ( 9314): The offending widget is:
I/flutter ( 9314):   FutureBuilder<dynamic>
I/flutter ( 9314): Build functions must never return null.
I/flutter ( 9314): To return an empty space that causes the building widget to fill available room, return
I/flutter ( 9314): "Container()". To return an empty space that takes as little room as possible, return
I/flutter ( 9314): "Container(width: 0.0, height: 0.0)".
I/flutter ( 9314):
I/flutter ( 9314): The relevant error-causing widget was:
I/flutter ( 9314):   FutureBuilder<dynamic> file:///D:/asdasd/asdas/lib/screens/HomeScreen.dart:52:16
I/flutter ( 9314):
I/flutter ( 9314): When the exception was thrown, this was the stack:
I/flutter ( 9314): #0      debugWidgetBuilderValue.<anonymous closure> (package:flutter/src/widgets/debug.dart:302:7)
I/flutter ( 9314): #1      debugWidgetBuilderValue (package:flutter/src/widgets/debug.dart:323:4)
I/flutter ( 9314): #2      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4632:7)
I/flutter ( 9314): #3      StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4800:11)
I/flutter ( 9314): #4      Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
I/flutter ( 9314): #5      BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2730:33)
I/flutter ( 9314): #6      WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:913:20)
I/flutter ( 9314): #7      RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:302:5)
I/flutter ( 9314): #8      SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1117:15)
I/flutter ( 9314): #9      SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1055:9)
I/flutter ( 9314): #10     SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:971:5)
I/flutter ( 9314): #14     _invoke (dart:ui/hooks.dart:251:10)
I/flutter ( 9314): #15     _drawFrame (dart:ui/hooks.dart:209:3)
I/flutter ( 9314): (elided 3 frames from dart:async)
I/flutter ( 9314):
I/flutter ( 9314): ════════════════════════════════════════════════════════════════════════════════════════════════════
I/flutter ( 9314): Another exception was thrown: A build function returned null.

請指導我哪里錯了,以便我可以解決問題。 我很感激。

太感謝了

當您不在if管理的案例中時,它會錯過return

SafeArea(
  top: true,
  child: FutureBuilder(
    builder: (context, snapshot) {
      if (snapshot.connectionState == ConnectionState.waiting) {
        return Center(
          child: CircularProgressIndicator(),
        );
      }
      if (snapshot.hasData) {
        return ListView(
            children: snapshot.data.map<Widget>((single) {
          return Text('saddasd');
        }).toList());
      }
      // add a SizedBox for the other case
      return const SizedBox();
    },
  ),
)

您的回復 json 是Matches列表,但您使用 function 解碼列表以解碼單個 object

您需要在 _getMatchesWithDio() function 的末尾添加此行。

return List<Matches>.from(response.data['data'])

並將您的返回類型放入您的 function List<Matches> _getMatchesWithDio()...

暫無
暫無

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

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