我正在尝试使用地理编码 api 获取地名,但它不起作用它说地名为空

问题描述

我为地理定位器创建了单独的文件,称为帮助方法和地名和地址属性的地址类,并将它们包含在搜索页面中,这是给定的错误

======== 小部件库捕获的异常 ================================== ====================== 在 null 上调用了 getter 'placename'。 接收器:空 尝试调用:地名

这是搜索页面文件


    import 'package:Flutter/material.dart';
    import 'package:provider/provider.dart';
    import 'package:reviver_app/dataproviders/appdata.dart';
    import 'package:reviver_app/globalvariables.dart';
    import 'package:reviver_app/helpers/requesthelper.dart';
    class SearchPage extends StatefulWidget {
      @override
      _SearchPageState createState() => _SearchPageState();
    }
    
    
    
    
    class _SearchPageState extends State<SearchPage> {
      var pickupController = TextEditingController();
      var destinationController = TextEditingController();
      var focusDestination = FocusNode();
      bool focused = false;
      void setFocus() {
        if (!focused) {
          FocusScope.of(context).requestFocus(focusDestination);
          focused = true;
        }
      }
      void searchPlace(String placeName) async {
        if (placeName.length >1){
          String url = 'https://maps.googleapis.com/maps/api/place/autocomplete/json?input=$placeName+Amphitheatre&key=$mapKey&sessiontoken=123456789';
          var response = await RequestHelper.getRequest(url);
          if (response == 'Failed'){
            return;
          }
          print(response);
    
        }
    
      }
    
    
      @override
      Widget build(BuildContext context) {
        setFocus();
       String address = Provider.of<AppData>(context).pickupaddress.placename ?? ""; this is the error which is null
       pickupController.text = address;
    
        return Scaffold(
          body: Column(
            children: <Widget>[
              Container(
                height: 210,decoration: Boxdecoration(
                  color: Colors.white,BoxShadow: [
                    BoxShadow(
                      color: Colors.redAccent,blurRadius: 5.0,spreadRadius: 0.5,offset: Offset(
                        0.7,0.7,),]
                ),child:  Padding(
                  padding:  EdgeInsets.only(left: 24,top: 48,right:24,bottom: 20 ),child: Column(
                    children: <Widget> [
                      SizedBox(height: 5),Stack(
                        children: <Widget>[
                          GestureDetector(
                            onTap: (){
                              Navigator.pop(context);
                                      },child: Icon(
                                Icons.arrow_back,color: Colors.redAccent,)
                          ),Center(
                            child: Text('Set Booking',style:
                            TextStyle(fontSize: 20,fontFamily: 'Brand-Bold'),],SizedBox(height: 18,Row(
                        children: <Widget> [
                          Image.asset('images/pickicon.png',height:16,width: 16,SizedBox(width: 18,Expanded(
                            child: Container(
                              decoration: Boxdecoration(
                                color: Colors.redAccent,borderRadius: BorderRadius.circular(4),child: Padding(
                                padding:  EdgeInsets.all(2.0),child: TextField(
                                 controller: pickupController,decoration: Inputdecoration(
                                    hintText: 'Your Location',fillColor: Colors.redAccent,filled: true,border: InputBorder.none,isDense: true,contentPadding: EdgeInsets.only(left: 10,top: 0,bottom: 0)
                                  ),SizedBox(height: 10,Row(
                        children: <Widget> [
                          Image.asset('images/desticon.png',child: TextField(
                                  //destination which will be removed
                                  onChanged: (value){
                                    searchPlace(value);
                                  },focusNode: focusDestination,controller: destinationController,decoration: Inputdecoration(
                                      hintText: 'this will be removed ',)
    
            ],);
      }
    }
    ```
this is where I included the geolocotor URL


import 'package:connectivity/connectivity.dart';
import 'package:geolocator/geolocator.dart';
import 'package:reviver_app/datamodels/address.dart';
import 'package:reviver_app/dataproviders/appdata.dart';
import 'package:reviver_app/globalvariables.dart';
import 'package:reviver_app/helpers/requesthelper.dart';
import 'package:provider/provider.dart';


class HelperMethods {
  static Future<String> findCordinateAddress(Position position,context) async {
    String placeaddress = '';
    var connectivityResult = await Connectivity().checkConnectivity();
    if (connectivityResult != ConnectivityResult.mobile &&
        connectivityResult != ConnectivityResult.wifi) {
      return placeaddress;
    }
    String url =
        'https://maps.googleapis.com/maps/api/geocode/json?latlng=${position.latitude},${position.longitude}&key=$mapKey';


    var response = await RequestHelper.getRequest(url);
    if (response == 'Failed') {
      placeaddress = response['results'][0]['formatted_address'];

      Address pickupaddress = new Address();
      pickupaddress.longitude = position.longitude;
      pickupaddress.latitude = position.latitude;
      pickupaddress.placename = placeaddress;

      Provider.of<AppData>(context,listen: false)
          .updatePickupAddress(pickupaddress);
    }
    return placeaddress;
  }
}
```

这是应用数据文件


    
    import 'package:Flutter/cupertino.dart';
    import 'package:reviver_app/datamodels/address.dart';
    
    class AppData extends ChangeNotifier{
      Address pickupaddress;
       void updatePickupAddress(Address pickup){
         pickupaddress = pickup;
         notifyListeners();
       }
    
    
    
    }

这是我添加地名的地址类

  
    class Address {
      String placename;
      double latitude;
      double longitude;
      String placeId;
      String placeformattedaddress;
    
      Address({
        this.placeId,this.latitude,this.placename,this.longitude,this.placeformattedaddress,});
    }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...