【问题标题】:Flutter: Upon OnTap() from Page A navigate to Page B and perform a particular function, which is declared at Page BFlutter:根据页面 A 的 OnTap() 导航到页面 B 并执行在页面 B 声明的特定功能
【发布时间】:2021-02-11 04:59:32
【问题描述】:

抱歉,我是 Flutter 和 Dart 语言的新手,因此我不太熟悉它的用法。

目前,我有一个来自Page AListTile,其中包含信息(纬度和经度),并且在单击来自ListTile 的任何项目时,它应该传递该特定项目的信息到Page B 并执行在Page B 声明的功能(根据从Page A 传递的纬度和经度在谷歌地图上放大)。

我知道要从一个页面转到另一个页面,我们可以使用Navigator,但我仍然不知道如何调用该函数并传递信息。因此,我希望能够得到一些指导或帮助。

这是我尝试在Page B 中调用的函数:

_goToLocation(Information information) {
    mapController.animateCamera(
      CameraUpdate.newCameraPosition(
        CameraPosition(
          target: LatLng(
            double.parse(infomration.latitude),
            double.parse(information.longitude),
          ),
          zoom: 18.0,
        ),
      ),
    );   }

我设法使用下面的代码转到Page BPage A,这将在单击ListTile(通过onTap())中的任何项目时执行,但我不确定如何调用Page B 中的函数使用此代码运行。我想知道我是否可以使用以下代码调用该函数?

void navigationToExplore(Information information) async {
    await Navigator.push(context, MaterialPageRoute(builder: (context) {
      return Explore();
    }));
  }

提前致谢。

【问题讨论】:

    标签: flutter google-maps dart


    【解决方案1】:

    首先,您需要将数据从屏幕 A 传递给屏幕 B

    void navigationToExplore(Information information) async {
        await Navigator.push(context, MaterialPageRoute(builder: (context) {
          return Explore(
              lat : latitude,
              long : longitude,
          );
        }));
      }
    

    现在你的屏幕 B :-

    class Explore extends StatefulWidget {
      final double lat;
      final double long;
    
      Explore({this.lat, this.long});
    
      @override
      _Explore createState() => _Explore();
    }
    
    class _Explore extends State<Explore> {
      GoogleMapController _controller;
      Completer<GoogleMapController> _googleMapCompleter = Completer();
    
      updateCameraPosition(){
        LatLng userCoordinates = LatLng(widget.jobData.lat, widget.jobData.long);
        CameraPosition cameraPosition = CameraPosition(
          target: userCoordinates,
          zoom: 15,
        );
        final GoogleMapController controller = await _googleMapCompleter.future;
        controller.animateCamera(CameraUpdate.newCameraPosition(cameraPosition));
      }
    
      @override
      void initState() {
         super.initState();
         updateCameraPosition();
      }
    
    @override
      Widget build(BuildContext context) {
        return Scaffold(
           body: GoogleMap(
            mapType: MapType.normal,
            initialCameraPosition: CameraPosition(target: LatLng(0, 0)),
            myLocationEnabled: true,
            onMapCreated: (GoogleMapController controller) async {
              _controller = controller;
              _googleMapCompleter.complete(_controller);
            },
            // this wont allow screen scrolling from google maps
            gestureRecognizers: Set()
              ..add(
                  Factory<EagerGestureRecognizer>(() => EagerGestureRecognizer())),
          )
        );
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 2017-02-14
      • 1970-01-01
      相关资源
      最近更新 更多