Flutter中如何在一个StatefulWidget中获取另一个StatefulWidget的状态数据
问题根因
curLoc是_MapState类的私有属性,不属于MapsClassWidget类本身,你直接实例化MapsClass肯定访问不到该变量- Flutter中的Widget只是配置类,单独实例化不会触发生命周期执行位置加载逻辑,就算能访问拿到的也是空值
- Flutter页面间传递参数的正确逻辑是跳转时由上游页面向下游页面传参,不是下游页面主动去拿上游页面的属性
修复步骤
第一步:给AddData新增接收位置参数的构造函数
修改AddData页面的代码,新增参数接收逻辑,删除你原有主动实例化MapsClass拿变量的代码:
import 'package:donation_yoga/screens/maps.dart'; import 'package:donation_yoga/services/Submitform.dart'; import 'package:flutter/material.dart'; class AddData extends StatefulWidget { // 新增接收位置的参数 final Position curLoc; // 新增构造函数 const AddData({Key? key, required this.curLoc}) : super(key: key); @override _AddData createState() => _AddData(); } class _AddData extends State<AddData> { final _formKey = GlobalKey<FormState>(); final _user = DataPush(); // 直接通过widget取上游传过来的位置,删掉你原来写的ma和position两行代码 Position get position => widget.curLoc; // 剩下的原有代码不变 @override void initState() { super.initState(); } @override Widget build(BuildContext context) { // 原有build逻辑不变 return Scaffold( appBar: AppBar(title: Text('ADD YOUR CENTER')), // 剩余原有布局代码不变 ); } _showDialog(BuildContext context) { Scaffold.of(context) .showSnackBar(SnackBar(content: Text('Submitting form'))); } }
第二步:修改MapsClass的跳转逻辑,传递位置参数
找到MapsClass中悬浮按钮的跳转逻辑,跳转时把已加载好的curLoc传给AddData:
FloatingActionButton( backgroundColor: Colors.green, child: const Icon(Icons.create), onPressed: () { // 加个空判断避免位置还没加载完就跳转 if (curLoc == null) { ScaffoldMessenger.of(context).showSnackBar(const SnackBar(content: Text("位置正在加载中,请稍候再试"))); return; } Navigator.push( context, // 构造AddData时传入curLoc MaterialPageRoute(builder: (context) => AddData(curLoc: curLoc)), ); }, )
内容的提问来源于stack exchange,提问作者artistAhmed
相关产品推荐
相关产品推荐

