dart 未处理异常:主机查找失败:

b4lqfgs4  于 2023-04-27  发布在  其他
关注(0)|答案(1)|浏览(116)

我创建了一个项目来寻找我所在城市的体育场馆。它从网站的Swagger API获取所有数据,如地址,价格,图像和名称。
Swagger主机:http://admin.sports.com.kg/swagger/
我创建了ApiRemote来从swagger主机获取数据。第一周它工作得很好,但后来它返回了异常。可能是因为http。
终端返回以下错误:
E/扑动(26867):[错误:flutter/lib/ui/ui_dart_state.cc(198)]无法处理的异常:主机查找失败:网站admin.sports.com.kgMap
它说它在这一行有一个异常:
var responses = await client.get(uri);

import 'dart:async';
import 'dart:convert';
import 'package:untitled/models/post.dart';
import 'package:http/http.dart' as http;

class RemoteService {
  Future<List<Result>?> getPosts() async {

    List<Result> list;

    var client  = http.Client();

    var uri = Uri.parse('http://admin.sports.com.kg/api/sports_areas');

    var responses = await client.get(uri);

    if (responses.statusCode == 200) {

      final parsed = json.decode(responses.body) as Map<String, dynamic>;
      list = parsed['results'].map<Result>((e) =>Result.fromJson(e)).toList();
      print(parsed['results']);
      // final p = Post.fromJson(parsed);
      // list.add(p);
      return list;
    }
  }
}

包含来自Swagger的所有数据的发布文件

import 'dart:convert';

Post postFromJson(String str) => Post.fromJson(json.decode(str));

String postToJson(Post data) => json.encode(data.toJson());

class Post {
  Post({
    required this.next,
    this.previous,
    required this.count,
    required this.pageSize,
    required this.numPages,
    required this.results,
  });

  int next;
  dynamic previous;
  int count;
  int pageSize;
  int numPages;
  List<Result> results;

  factory Post.fromJson(Map<String, dynamic> json) => Post(
        next: json["next"],
        previous: json["previous"],
        count: json["count"],
        pageSize: json["page_size"],
        numPages: json["num_pages"],
        results:
            List<Result>.from(json["results"].map((x) => Result.fromJson(x))),
      );

  Map<String, dynamic> toJson() => {
        "next": next,
        "previous": previous,
        "count": count,
        "page_size": pageSize,
        "num_pages": numPages,
        "results": List<dynamic>.from(results.map((x) => x.toJson())),
      };
}

class Result {
  Result({
    required this.id,
    required this.title,
    required this.price,
    required this.address,
    required this.image,
  });

  int id;
  String title;
  int price;
  String address;
  String image;

  factory Result.fromJson(Map<String, dynamic> json) => Result(
        id: json["id"],
        title: json["title"],
        price: json["price"],
        address: json["address"],
        image: json["image"],
      );

  Map<String, dynamic> toJson() => {
        "id": id,
        "title": title,
        "price": price,
        "address": address,
        "image": image,
      };
}

主页类

class _HomePageState extends State<HomePage> {
  int _selind = 0;
  List<Result>? _stadiums;
  var isLoaded = false;

  @override
  void initState() {
    super.initState();
    getData();
  }

  void getData() async {
    _stadiums = (await RemoteService().getPosts()) as List<Result>?;
    if (_stadiums != null) {
      setState(() {
        isLoaded = true;
      });
    }
  }
  
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        backgroundColor: Colors.indigo[50],
        body: Padding(
          padding: const EdgeInsets.symmetric(horizontal: 5, vertical: 30),
          child: Visibility(
            visible: isLoaded,
            child: ListView.builder(
                itemCount: _stadiums?.length,
                itemBuilder: (context, index) {
                  return Column(
                    // child: _widgetopt.elementAt(_selind),
                    children: [
                      Card(
                        shape: RoundedRectangleBorder(
                          borderRadius: BorderRadius.circular(15.0),
                        ),
                        child: Column(
                            children: [
                              Image.network(_stadiums![index].image),
                              Text('Sportclubs "${_stadiums![index]
                                  .title}"', textDirection: TextDirection.ltr,
                                style: TextStyle(fontSize: 20,
                                    fontWeight: FontWeight.bold),),
                              Row(
                                children: [
                                  Icon(Icons.location_on_outlined,
                                    color: Colors.redAccent, size: 40,),
                                  Text(_stadiums![index].address),
                                ],
                              )
                            ]
                        ),
                      ),
                      SizedBox(
                        height: 10,
                      ),
                    ],
                  );
                }),
            replacement: Center(child: CircularProgressIndicator()),
          ),
        ),),);
  }
}
7fhtutme

7fhtutme1#

我正在解析一个不完整的URL。请确保您的URL是正确的。以下是我犯的错误。

http://nest-services-app-production.up.railway.app //base URL

终点为:

static const String getAllProducts = "products/all";

完整的URL将是:

http://nest-services-app-production.up.railway.appproducts/all";

我在基本URL的末尾缺少一个反斜杠,因此导致它返回Unhandled Exception: Failed host lookup:错误。

相关问题