首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >提供者:^6.0.1,类型“String”不是类型类型“Address”的子类型

提供者:^6.0.1,类型“String”不是类型类型“Address”的子类型
EN

Stack Overflow用户
提问于 2021-12-25 09:13:25
回答 2查看 307关注 0票数 0

请指导我如何解决这个错误。

下面是日志的一部分

引发了以下_CastError构建MainScreen(脏、依赖关系:_InheritedProviderScope、state:_MainScreenState#8d426):类型'String‘不是类型类型“Address”在类型强制转换中的子类型

以下是类和代码:

代码语言:javascript
复制
class Address {
  String placeFormattedAddress;
  String placeName;
  String placeId;
  double latitude;
  double longitude;

  Address({
    this.placeFormattedAddress="Google Building 40, 1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA",
    this.placeName="Google Building 40",
    this.placeId="ChIJj38IfwK6j4ARNcyPDnEGa9g",
    this.latitude=37.4237151802915,
    this.longitude= -122.0825955197085
  });
}

import 'package:flutter/cupertino.dart';
import 'package:rider_app_kotlin/Models/address.dart';

class AppData extends ChangeNotifier {
  late Address pickUpLocation;

  void updatePickUpLocationAddress(Address pickUpAddress){
    pickUpLocation = pickUpAddress;
    notifyListeners();
  }
}

我不确定这是否与声音无效安全有关。请帮帮忙。

下面是与updatePickupLocationAddress相关的代码;

代码语言:javascript
复制
import 'package:provider/provider.dart';
import 'package:rider_app_kotlin/Assistants/request_assistant.dart';
import 'package:rider_app_kotlin/DataHandler/app_data.dart';
import 'package:rider_app_kotlin/Models/address.dart';
import 'package:rider_app_kotlin/config_maps.dart';

class Assistant {
  static Future<String> searchCoordinateAddress(Position position, context) async {
    String placeAddress = "";
    String url = "https://maps.googleapis.com/maps/api/geocode/json?latlng="
        "${position.latitude},${position.longitude}&key=$mapKey";

    var  response = await RequestAssistant.getRequest(url);

    if(response != "Failed."){
      placeAddress = response["results"][0]["formatted_address"];  

      Address userPickUpAddress = new Address();
      userPickUpAddress.latitude  = position.latitude; 
      userPickUpAddress.longitude = position.longitude;
      userPickUpAddress.placeName = placeAddress;

      Provider.of<AppData>(context, listen: false)
          .updatePickUpLocationAddress(userPickUpAddress);

    }
    return placeAddress;
  }
}

附加信息: AppData类上的数据应该使用下面代码中的'provider‘包显示在MainScreen类中;

代码语言:javascript
复制
Column(
       crossAxisAlignment: CrossAxisAlignment.start,
       children: [
          Text(
            Provider.of<AppData>(context).pickUpLocation != null
            ? Provider.of<AppData>(context).pickUpLocation.placeName
            :"Add Home", 
          ),
          SizedBox(height: 4,),
          Text("Home address", style:TextStyle(color: Colors.grey, fontSize: 15),)
       ],
     ),

编辑:25JAN 2022;问题仍然出现在应用程序的开始。

在排除故障时,我尝试删除'Provider.of(context).pickUpLocation != null ? Provider.of(context).pickUpLocation.placeName :‘在mainscreen中,只保留这个“address”,然后成功地重新加载应用程序(重新加载),没有错误声明(在主题中),当然这个地址没有显示在主屏幕中。

我再次尝试放置Provider.of(上下文).pickUpLocation != null?Provider.of(上下文).pickUpLocation.placeName:"Add“,该应用程序成功地重新加载(Home),没有出错,地址显示在mainsreen中--如预期的那样。

我试着从一开始就启动这个应用程序(不是热门版本),然后我再次遇到了错误。请建议这里要检查什么。谢谢。

EN

回答 2

Stack Overflow用户

发布于 2021-12-26 04:29:38

用这个:

代码语言:javascript
复制
  class Address {
      var placeFormattedAddress;
      var placeName;
      var placeId;
      var latitude;
      var longitude;
    
      Address({
        this.placeFormattedAddress="Google Building 40, 1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA",
        this.placeName="Google Building 40",
        this.placeId="ChIJj38IfwK6j4ARNcyPDnEGa9g",
        this.latitude=37.4237151802915,
        this.longitude= -122.0825955197085
      });
    }
    
    import 'package:flutter/cupertino.dart';
    import 'package:rider_app_kotlin/Models/address.dart';
    
    class AppData extends ChangeNotifier {
      late Address pickUpLocation;
    
      void updatePickUpLocationAddress(Address pickUpAddress){
        pickUpLocation = pickUpAddress;
        notifyListeners();
      }
    }
票数 0
EN

Stack Overflow用户

发布于 2022-02-05 21:33:08

尝试使用动态

代码语言:javascript
复制
class Address {
  dynamic placeFormattedAddress;
  dynamic PlaceName;
  dynamic PlaceId;
  dynamic latitude;
  dynamic longitude;

  Address({
    this.placeFormattedAddress="Google Building 40, 1600 Amphitheatre Pkwy, 
     Mountain View, CA 94043, USA",
    this.placeName="Google Building 40",
    this.placeId="ChIJj38IfwK6j4ARNcyPDnEGa9g",
    this.latitude=37.4237151802915,
    this.longitude= -122.0825955197085
  });
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70479034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档