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