Flutter 如何在Flatter中从另一页的地图中获取值

Flutter 如何在Flatter中从另一页的地图中获取值,flutter,listview,hashmap,Flutter,Listview,Hashmap,所以我有一个listview,我用它来获取数据,它显示得很好。现在,我试图将单击项的值从listview页面解析到另一个页面,该页面将显示单击项的详细信息。请问我如何做到这一点 未来 List dealData = List(); Future<String> _fetchComment() async { setState(() { isLoading = true; debugPrint("emirate state");

所以我有一个listview,我用它来获取数据,它显示得很好。现在,我试图将单击项的值从listview页面解析到另一个页面,该页面将显示单击项的详细信息。请问我如何做到这一点

未来

List dealData = List();
  Future<String> _fetchComment() async {
    setState(() {
      isLoading = true;
      debugPrint("emirate state");
    });
    try {
      debugPrint("emirate try");

      final result = await InternetAddress.lookup('google.com');
      if (result.isNotEmpty && result[0].rawAddress.isNotEmpty) {
        print('connected');
        debugPrint("emirate connect");

        String url;

        debugPrint("my select:$_mySelection");

        if (_mySelection == null && _myFeatureSelection == null) {
          url = "my rest api";
          
        } else if (_myFeatureSelection != null) {
          url =
              "my rest api";
          _mySelection = null;
        } else if (_mySelection != null && _myFeatureSelection == null) {
          url = "my rest api";

        }

        print("our url:$url");

        var res = await http
            .get(Uri.encodeFull(url), headers: {"Accept": "application/json"});
        var resBody = json.decode(res.body);

        debugPrint("emirate url:$url");

        setState(() {
          dealData = resBody;
          isLoading = false;
        });

        print(resBody);
        debugPrint("emirate:$resBody");

        return "Sucess";
      } else {
        throw Exception('Failed to load profile');
      }
    } on SocketException catch (_) {
      print('not connected');
      setState(() => isLoading = false);

      Navigator.popUntil(
          context, (_) => !Navigator.canPop(context));


      Navigator.pushReplacement(
          context,
          new MaterialPageRoute(
              builder: (BuildContext context) => NoInternet()));


    }
  }
List dealData=List();
Future\u fetchComment()异步{
设置状态(){
isLoading=true;
“酋长国”;
});
试一试{
debugPrint(“酋长国try”);
最终结果=等待InternetAddress.lookup('google.com');
if(result.isNotEmpty&&result[0].rawAddress.isNotEmpty){
打印(“连接”);
调试打印(“酋长国连接”);
字符串url;
debugPrint(“我的选择:$\u我的选择”);
如果(_mySelection==null&&u myFeatureSelection==null){
url=“我的restapi”;
}else if(_myFeatureSelection!=null){
网址=
“我的RESTAPI”;
_mySelection=null;
}else if(_mySelection!=null&&u myFeatureSelection==null){
url=“我的restapi”;
}
打印(“我们的url:$url”);
var res=等待http
.get(Uri.encodeFull(url),头:{“接受”:“应用程序/json”});
var resBody=json.decode(res.body);
debugPrint(“酋长国url:$url”);
设置状态(){
dealData=resBody;
isLoading=false;
});
打印(正文);
debugPrint(“酋长国:$resBody”);
返回“成功”;
}否则{
抛出异常(“加载配置文件失败”);
}
}关于SocketException捕获(41;{
打印(“未连接”);
设置状态(()=>isLoading=false);
Navigator.popintil(
context,()=>!Navigator.canPop(context));
导航器。更换(
上下文
新材料路线(
生成器:(BuildContext上下文)=>NoInternet());
}
}
我的listview和onclick


dealData
         .map(
   
           (position) => FutureBuilder<String>(
               future: getDistance(
                   position["lat"],
                   position["lng"])
                   .then((value) =>
                   value.toString()),

       builder: (context, snapshot) {


         double myrate = double.parse(
             position["ratings"] ==
                 null
                 ? "0"
                 : position["ratings"]);

         return Container(
             child:Card(child:
             GestureDetector(
                 onTap: () {

                   print(position); // position printed here

                   Navigator.push(
                       context,
                       MaterialPageRoute(
                           builder: (BuildContext ctx) => Maps(position)));


                 },
     ).toList(),


交易数据
.地图(
(位置)=>FutureBuilder(
未来:getDistance(
位置[“横向”],
位置[“lng”])
。然后((值)=>
value.toString()),
生成器:(上下文,快照){
double myrate=double.parse(
职位[“评级”]==
无效的
? "0"
:职位[“评级]);
返回容器(
儿童:卡片(儿童:
手势检测器(
onTap:(){
打印(位置);//此处打印的位置
导航器。推(
上下文
材料路线(
生成器:(BuildContext ctx)=>映射(位置));
},
).toList(),
我的地图课

class mapsFinal extends StatefulWidget {
 final int position;

 const mapsFinal(this.position);

 @override
 _MapsState createState() => _MapsState ();
}

class _MapsState extends State<mapsFinal> {
 Widget build(BuildContext context) {
   return Text("title" + widget.position.toString());
 }
}



class mapsFinal扩展StatefulWidget{
最终int位置;
const mapsFinal(此位置);
@凌驾
_MapsState createState()=>\u MapsState();
}
类_MapsState扩展状态{
小部件构建(构建上下文){
返回文本(“title”+widget.position.toString());
}
}

请给我第二个页面,显示我在此处单击的项目。

这是将值传递给名为“地图”的小部件的最简单示例:

//使示例运行的样板代码
进口“包装:颤振/材料.省道”;
void main(){
runApp(MyApp());
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
家:脚手架(
正文:中(
子:映射(“值”),
),
),
);
}
}
//这是您需要查看的类:
类映射扩展了StatefulWidget{
最终管柱位置;
常量映射(此位置);
@凌驾
_MapsState createState()=>\u MapsState();
}
类_MapsState扩展状态{
小部件构建(构建上下文){
返回文本(“您通过:“+widget.position”);
}
}

你能澄清一下你的问题是什么吗?我看到了很多关于接收数据的代码,但关于你的实际问题却很少。你似乎有一些代码可以满足你的需要,这有什么问题吗?我的代码运行得很好,我只是想知道如何在“地图”页面上接收“位置”。你已经看到了,不是吗?这不是
地图(位置)的功能吗
是吗?是的,我用Navigator推了它。推(上下文,MaterialPageRoute(builder:(BuildContext ctx)=>Maps(position));已经,但我不知道如何在另一个页面“Maps”中接收值“接收”是什么意思你的代码编译了吗?然后你收到了。不是吗?然后可能会发布你的Maps class.E/flatter(30864):[错误:flatter/lib/ui/ui\u dart\u state.cc(148)]未处理的异常:类型“String”不是类型“int”的子类型,因为我的代码没有该错误,您需要发布代码,否则我无法帮助您。我只是用未打开的Maps类更新我的代码所以…您的位置是什么类型?因为如果它不是字符串,您必须更改Maps类中的数据类型…我无法神奇地知道这一点,你必须调整你得到的答案。这里的问题是点击列表视图,它根本不会进入地图类
// BOILERPLATE CODE TO MAKE THE EXAMPLE RUN

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: Maps("THE VALUE"),
        ),
      ),
    );
  }
}

// THIS IS THE CLASS YOU NEED TO LOOK AT:

class Maps extends StatefulWidget {
  final String position;
  
  const Maps(this.position);

  @override
  _MapsState createState() => _MapsState ();
}

class _MapsState extends State<Maps> {
  Widget build(BuildContext context) {
    return Text("You passed: " + widget.position);
  }
}