【问题标题】:type 'List<dynamic>' is not a subtype of type 'Iterable<Connection>' - Flutter'List<dynamic>' 类型不是 'Iterable<Connection>' 类型的子类型 - Flutter
【发布时间】:2022-01-20 06:35:35
【问题描述】:

当我尝试通过模型从 API 获取数据时,我在调试控制台中发现了这个错误..

**I/flutter (31507): type 'List<dynamic>' is not a subtype of type 'Iterable<Connection>'

**

如何从该模型中获取数据?如果没有模型,我无法在 StreamBuilder 中显示 API 数据,如果没有模型,我可以轻松获取要在我的应用中显示的数据。

API 演示:

[
    {
        "id": 1,
        "confrm_date": "2022-01-17T07:14:06",
        "User_name": "গণপরিবহনে অঘোষিত নিয়ম",
        "Phone_Number": "01854555",
        "Description": "পরিবহন খাতের সঙ্গে মো. রুবেল হোসেন যুক্ত সেই ১৯৯৭ সাল থেকে। শুরু থেকেই তিনি ‘পুলিশ পাস’-এর কথা শুনে আসছেন। আদৌ এ নিয়ে কোনো আইন বা নিয়ম আছে কি না, তা জানেন না তিনি। তাঁর মতো অনেক পরিবহনমালিক ও শ্রমিকের একই অবস্থা।\r\n\r\nএত দিন শিক্ষার্থীদের জন্য বাসে অর্ধেক ভাড়ার (হাফ পাস) কথা শোনা গেলেও গণপরিবহনে ভাড়াসংক্রান্ত আরেকটি বিষয় প্রচলিত আছে। সেটিই হলো ওই ‘পুলিশ পাস’। এ ক্ষেত্রে অর্ধেক ভাড়া নয়, কোনো ভাড়াই দিচ্ছেন না অনেক পুলিশ সদস্য।",
        "Connection_status": false,
        "cat_img": "http://103.137.75.74:82/media/cat_img/LOGO-01.png",
        "Connection_by": 1
    },
    {
        "id": 2,
        "confrm_date": "2022-01-17T07:14:06",
        "User_name": "অবৈধ রসিদে টোল",
        "Phone_Number": "01854555",
        "Description": "অবৈধ রসিদ তৈরি করে রাজধানীর যাত্রাবাড়ীর মেয়র হানিফ উড়ালসড়ক থেকে টোল আদায় করার অভিযোগ উঠেছে সংঘবদ্ধ একটি চক্রের বিরুদ্ধে। বিভিন্ন যানবাহনের চালকদের ভয় দেখিয়ে টোলের নামে চাঁদা আদায় করছিল চক্রটি। না দিলে প্রাণনাশের হুমকি দিচ্ছিল তারা।",
        "Connection_status": false,
        "cat_img": "http://103.137.75.74:82/media/cat_img/LOGO-01.png",
        "Connection_by": 1
    },
    {
        "id": 3,
        "confrm_date": "2022-01-17T10:42:36",
        "User_name": "User",
        "Phone_Number": "01854555",
        "Description": "নরমাল ডেলিভারি হসপিটাল",
        "Connection_status": false,
        "cat_img": "http://103.137.75.74:82/media/cat_img/LOGO-01.png",
        "Connection_by": 1
    },
    {
        "id": 4,
        "confrm_date": "2022-01-17T10:42:46",
        "User_name": "User",
        "Phone_Number": "01854555",
        "Description": "কাশেম মঞ্জিল, তানযীমুল উম্মাহ হিফয মাদ্রাসা।",
        "Connection_status": false,
        "cat_img": "http://103.137.75.74:82/media/cat_img/LOGO-01.png",
        "Connection_by": 1
    },
    {
        "id": 5,
        "confrm_date": "2022-01-17T10:42:57",
        "User_name": "User",
        "Phone_Number": "78339399",
        "Description": "হাউজিং মারকাজ মসজিদের পিছনে - nstu teacher 2300 tk router +\r\nline charge 1000+ 360",
        "Connection_status": false,
        "cat_img": "http://103.137.75.74:82/media/cat_img/LOGO-01.png",
        "Connection_by": 1
    },
    {
        "id": 6,
        "confrm_date": "2022-01-17T10:43:04",
        "User_name": "User",
        "Phone_Number": "01854555",
        "Description": "মাষ্টার পাড়া - হালিমা ভিলা ৩ তলায়",
        "Connection_status": false,
        "cat_img": "http://103.137.75.74:82/media/cat_img/LOGO-01.png",
        "Connection_by": 1
    },
    {
        "id": 7,
        "confrm_date": "2022-01-17T10:44:25",
        "User_name": "User",
        "Phone_Number": "0185455545",
        "Description": "মিঠুর কানেকশন আছে এখন , ১ তারিখ নিবে।",
        "Connection_status": false,
        "cat_img": "http://103.137.75.74:82/media/cat_img/LOGO-01.png",
        "Connection_by": 1
    },
    {
        "id": 8,
        "confrm_date": "2022-01-17T10:44:49",
        "User_name": "User",
        "Phone_Number": "01855545",
        "Description": "এতিম খানার পিছনে।",
        "Connection_status": false,
        "cat_img": "http://103.137.75.74:82/media/cat_img/LOGO-01.png",
        "Connection_by": 1
    }
]

我的模特是:

class Connection {
  int? id;
  String? confrmDate;
  String? userName;
  String? phoneNumber;
  String? description;
  bool? connectionStatus;
  String? catImg;
  int? connectionBy;

  Connection(
      {this.id,
      this.confrmDate,
      this.userName,
      this.phoneNumber,
      this.description,
      this.connectionStatus,
      this.catImg,
      this.connectionBy});

  Connection.fromJson(Map<String, dynamic> json) {
    id = json['id'];
    confrmDate = json['confrm_date'];
    userName = json['User_name'];
    phoneNumber = json['Phone_Number'];
    description = json['Description'];
    connectionStatus = json['Connection_status'];
    catImg = json['cat_img'];
    connectionBy = json['Connection_by'];
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['id'] = this.id;
    data['confrm_date'] = this.confrmDate;
    data['User_name'] = this.userName;
    data['Phone_Number'] = this.phoneNumber;
    data['Description'] = this.description;
    data['Connection_status'] = this.connectionStatus;
    data['cat_img'] = this.catImg;
    data['Connection_by'] = this.connectionBy;
    return data;
  }
}

** ListViewBuilder:**

class NewCollectionTab extends StatefulWidget with BaseController {
  @override
  State<NewCollectionTab> createState() => _NewCollectionTabState();
}

class _NewCollectionTabState extends State<NewCollectionTab>
    with BaseController {
  final keyRefresh = GlobalKey<RefreshIndicatorState>();

  @override
  Widget build(BuildContext context) {
    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        SizedBox(height: 20),
        Padding(
          padding: EdgeInsets.symmetric(horizontal: 20),
          child: KText(
            text: 'Main',
            fontSize: 18,
            fontWeight: FontWeight.w600,
            color: Colors.black,
          ),
        ),
        SizedBox(height: 10),
        ListView.builder(
          shrinkWrap: true,
          primary: false,
          physics: BouncingScrollPhysics(),
          itemCount: connectionDataC.connection.length,
          itemBuilder: (context, index) {
            final item = connectionDataC.connection[index];
            return InkWell( child: Padding(
                padding: EdgeInsets.only(bottom: 10),
                child: ListTile(
                  leading: CircleAvatar(
                    radius: 30,
                    backgroundColor: black12,
                    backgroundImage: NetworkImage(
                      item!.catImg.toString(),
                    ),
                  ), ),
              ),
            );
          },
        ),
      ],
    );
  }
}

我的控制者是:

class ConnectionController extends GetxController {
  final _dio = Dio();
  final   connection = RxList<Connection>();

  //

  getconnectionList() async {
    print('++++++++++++++++++++++++++++++++++');

    try {
      final sharedPreferences = await SharedPreferences.getInstance();
      final token = sharedPreferences.get('accessToken');
      final userName = sharedPreferences.get('loginUserName');
      final res = await _dio.get(
        '$baseUrl/new_connection/?search=$userName',
        options: Options(
          headers: {
            "Content-Type": "application/json",
            "Accept": "application/json",
            "Authorization": 'Token $token'
          },
        ),
      );

      print(res.statusCode);
      print(res.headers);
      // print(res.body);
      // print(res.unauthorized);
      print(res.realUri);
      print(res.statusMessage);
      // print(res.data);
      print(res.realUri);
      print(res.requestOptions);

      print('++++++++++++++++++++++++++++++++++');

      if (res.statusCode == 200) {
        connection.addAll(res.data);
      }
    } catch (e) {
      print(e);
    }
  }
}

我需要帮助,请问如何通过模型获取数据来帮助我。

【问题讨论】:

    标签: flutter dart model


    【解决方案1】:

    试试这个。

          if (res.statusCode == 200) {
            connection.addAll(res.data.map(connection) => Connection.fromJson(connection).toList());
          }
    

    .map 在转换给定列表中的每个元素后生成一个新列表。

    【讨论】:

    • 无法命名函数表达式。尝试删除名称,或将函数表达式移动到函数声明语句中。 dart(named_function_expression) ibb.co/sKKGDwf 请检查此图像
    【解决方案2】:

    试试这个。

    if (res.statusCode! >= 200 && res.statusCode! < 300) {
       connection.addAll((res.data as List).map((e) => Connection.fromJson(e)).toList());
    }
    

    不要忘记将 res.data 分配给列表。 希望它会工作!!!

    【讨论】:

    • 这行得通...谢谢亲爱的
    猜你喜欢
    • 2020-06-17
    • 2021-12-02
    • 2020-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 2022-11-11
    相关资源
    最近更新 更多