Flutter 如何设置按钮以重定向到Flatter中的地图?
我还是一名颤振初学者,正在开发一个应用程序,但我遇到了一个问题: 这是我的主要任务。省道:Flutter 如何设置按钮以重定向到Flatter中的地图?,flutter,google-maps,dart,mobile,Flutter,Google Maps,Dart,Mobile,我还是一名颤振初学者,正在开发一个应用程序,但我遇到了一个问题: 这是我的主要任务。省道: void main() => runApp(MyApp()); class MyApp extends StatelessWidget { final geoService = GeolocatorService(); @override Widget build(BuildContext context) { return FutureProvider( crea
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
final geoService = GeolocatorService();
@override
Widget build(BuildContext context) {
return FutureProvider(
create: (context) => geoService.getCurrentPosition(),
child: MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Metz Trip',
theme: ThemeData(
primarySwatch: Colors.red,
),
home:
Consumer<Position>(
builder: (context, position, widget) {
return (position != null)
? Map(position)
: Center(child: CircularProgressIndicator());
},
),
),
);
这是我的地图页:
class Map extends StatefulWidget {
final Position initialPosition;
Map(this.initialPosition);
@override
State<StatefulWidget> createState() => _MapState();
}
class _MapState extends State<Map> {
final GeolocatorService geoService = GeolocatorService();
Completer<GoogleMapController> _controller = Completer();
@override
void initState() {
geoService.getPositionStream().listen((position) {
centerScreen(position);
});
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Stack(
children: <Widget>[
GoogleMap(
initialCameraPosition: CameraPosition(
target: LatLng(widget.initialPosition.longitude,
widget.initialPosition.latitude),
zoom: 13.0),
mapType: MapType.normal,
myLocationEnabled: true,
onMapCreated: (GoogleMapController controller) {
_controller.complete(controller);
}),
Positioned(
top: 65.0,
right: 15.0,
left: 15.0,
child: Container(
height: 50.0,
width: double.infinity,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(30.0),
color: Colors.white),
child: TextField(
decoration: InputDecoration(
hintText: 'Votre recherche',
border: InputBorder.none,
contentPadding: EdgeInsets.only(left: 25.0, top: 15.0),
suffixIcon: IconButton(
icon: Icon(Icons.account_circle),
color: Colors.yellow[800],
onPressed: () {
Navigator.of(context).push(MaterialPageRoute(
builder: (context) => Connexion()));
/*onPressed: () {
return FutureBuilder<User>(
future: FirebaseAuth.instance.currentUser,
builder: (context, snapshot) {
if (snapshot.hasData) {
User user = snapshot.data;
return ProfilePage(uid: user.uid);
} else {
return Connexion();
}
},
);*/
},
iconSize: 32.0),
prefixIcon: IconButton(
icon: Icon(Icons.location_on),
color: Colors.grey,
onPressed: () {},
iconSize: 32.0)),
),
),
),
Positioned(
right: 0.0,
left: 0.0,
bottom: -20.0,
child: Container(
height: 50.0,
width: double.infinity,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(0.0),
color: Colors.grey[100].withOpacity(0.94)),
)),
Positioned(
right: 15.0,
left: 15.0,
bottom: 20.0,
child: Container(
height: 50.0,
width: double.infinity,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(7.0),
color: Colors.red[900].withOpacity(0.95)),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
IconButton(
icon: Icon(Icons.hotel),
color: Colors.white,
onPressed: () {},
),
IconButton(
icon: Icon(Icons.restaurant),
color: Colors.white,
onPressed: () {},
),
SizedBox(
width: 40,
),
IconButton(
icon: Icon(Icons.local_activity),
color: Colors.white,
onPressed: () {},
),
IconButton(
icon: Icon(Icons.museum),
color: Colors.white,
onPressed: () {},
),
],
),
),
),
],
),
floatingActionButton: FloatingActionButton(
backgroundColor: Colors.yellow[800],
onPressed: () {},
elevation: 15.0,
child: const Icon(
Icons.home,
color: Colors.white,
),
),
floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat,
);
}
// ignore: missing_return
Future<Void> centerScreen(Position position) async {
final GoogleMapController controller = await _controller.future;
controller.animateCamera(CameraUpdate.newCameraPosition(CameraPosition(
target: LatLng(position.latitude, position.longitude), zoom: 13.0)));
}
}
类映射扩展StatefulWidget{
最终位置初始位置;
地图(此初始位置);
@凌驾
State createState()=>\u MapState();
}
类映射状态扩展状态{
最终的GeolocatorService geoService=GeolocatorService();
Completer _controller=Completer();
@凌驾
void initState(){
geoService.getPositionStream().listen((位置){
中心屏幕(位置);
});
super.initState();
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
主体:堆栈(
儿童:[
谷歌地图(
initialCameraPosition:CameraPosition(
目标:LatLng(widget.initialPosition.longitude,
widget.initialPosition.latitude),
缩放:13.0),
mapType:mapType.normal,
myLocationEnabled:对,
onMapCreated:(谷歌地图控制器){
_控制器。完成(控制器);
}),
定位(
排名:65.0,
右图:15.0,
左:15.0,
子:容器(
身高:50.0,
宽度:double.infinity,
装饰:盒子装饰(
边界半径:边界半径。圆形(30.0),
颜色:颜色。白色),
孩子:TextField(
装饰:输入装饰(
hintText:“Votre recherche”,
边框:InputBorder.none,
contentPadding:仅限边集(左:25.0,顶:15.0),
后缀:图标按钮(
图标:图标(图标、账户和圆圈),
颜色:颜色。黄色[800],
已按下:(){
导航器.of(上下文).push(MaterialPageRoute(
生成器:(context)=>Connexion());
/*已按下:(){
回归未来建设者(
future:FirebaseAuth.instance.currentUser,
生成器:(上下文,快照){
if(snapshot.hasData){
User=snapshot.data;
返回配置文件页面(uid:user.uid);
}否则{
返回连接();
}
},
);*/
},
iconSize:32.0),
前缀:图标按钮(
图标:图标(图标位置打开),
颜色:颜色。灰色,
按下:(){},
iconSize:32.0),
),
),
),
定位(
右:0.0,
左:0.0,
底部:-20.0,
子:容器(
身高:50.0,
宽度:double.infinity,
装饰:盒子装饰(
边界半径:边界半径。圆形(0.0),
颜色:Colors.gray[100]。不透明度为(0.94)),
)),
定位(
右图:15.0,
左:15.0,
底部:20.0,
子:容器(
身高:50.0,
宽度:double.infinity,
装饰:盒子装饰(
边界半径:边界半径。圆形(7.0),
颜色:Colors.red[900]。不透明度(0.95)),
孩子:排(
mainAxisAlignment:mainAxisAlignment.spaceAround,
儿童:[
图标按钮(
图标:图标(Icons.hotel),
颜色:颜色,白色,
按下:(){},
),
图标按钮(
图标:图标(图标。餐厅),
颜色:颜色,白色,
按下:(){},
),
大小盒子(
宽度:40,
),
图标按钮(
图标:图标(图标。本地_活动),
颜色:颜色,白色,
按下:(){},
),
图标按钮(
图标:图标(图标。博物馆),
颜色:颜色,白色,
按下:(){},
),
],
),
),
),
],
),
浮动操作按钮:浮动操作按钮(
背景颜色:颜色。黄色[800],
按下:(){},
标高:15.0,
子:常量图标(
我的家,
颜色:颜色,白色,
),
),
浮动ActionButtonLocation:浮动ActionButtonLocation.centerFloat,
);
}
//忽略:缺少返回
未来中心屏幕(位置)异步{
最终GoogleMapController=wait_controller.future;
controller.animateCamera(CameraUpdate.newCameraPosition(CameraPosition(
目标:LatLng(位置.纬度,位置.经度),变焦:13.0);
}
}
和我的地理定位服务页面:
class GeolocatorService {
Future<Position> getLastKnownPosition({
bool forceAndroidLocationManager = false,
}) =>
Geolocator.getLastKnownPosition(
forceAndroidLocationManager: forceAndroidLocationManager);
Future<Position> getCurrentPosition({
LocationAccuracy desiredAccuracy = LocationAccuracy.best,
bool forceAndroidLocationManager = false,
Duration timeLimit,
}) =>
Geolocator.getCurrentPosition(
desiredAccuracy: desiredAccuracy,
forceAndroidLocationManager: forceAndroidLocationManager,
timeLimit: timeLimit,
);
Stream<Position> getPositionStream({
LocationAccuracy desiredAccuracy = LocationAccuracy.best,
int distanceFilter = 10,
bool forceAndroidLocationManager = false,
int timeInterval = 0,
Duration timeLimit,
}) =>
Geolocator.getPositionStream(
desiredAccuracy: desiredAccuracy,
distanceFilter: distanceFilter,
forceAndroidLocationManager: forceAndroidLocationManager,
// ignore: deprecated_member_use
timeInterval: timeInterval,
timeLimit: timeLimit,
);
}
类地理定位服务{
未来GetLastKnown位置({
bool forceAndroidLocationManager=false,
}) =>
Geolocator.getLastKnownPosition(
forceAndroidLocationManager:forceAndroidLocationManager);
未来getCurrentPosition({
定位精度desiredAccuracy=定位精度.best,
bool forceAndroidLocationManager=false,
期限,
}) =>
Geolocator.getCurrentPosition(
期望准确度:期望准确度,
class GeolocatorService {
Future<Position> getLastKnownPosition({
bool forceAndroidLocationManager = false,
}) =>
Geolocator.getLastKnownPosition(
forceAndroidLocationManager: forceAndroidLocationManager);
Future<Position> getCurrentPosition({
LocationAccuracy desiredAccuracy = LocationAccuracy.best,
bool forceAndroidLocationManager = false,
Duration timeLimit,
}) =>
Geolocator.getCurrentPosition(
desiredAccuracy: desiredAccuracy,
forceAndroidLocationManager: forceAndroidLocationManager,
timeLimit: timeLimit,
);
Stream<Position> getPositionStream({
LocationAccuracy desiredAccuracy = LocationAccuracy.best,
int distanceFilter = 10,
bool forceAndroidLocationManager = false,
int timeInterval = 0,
Duration timeLimit,
}) =>
Geolocator.getPositionStream(
desiredAccuracy: desiredAccuracy,
distanceFilter: distanceFilter,
forceAndroidLocationManager: forceAndroidLocationManager,
// ignore: deprecated_member_use
timeInterval: timeInterval,
timeLimit: timeLimit,
);
}
import '../../models/map.dart' as MapPage;
return (position != null)
? MapPage.Map(position)
: Center(child: CircularProgressIndicator());
Undefined name 'position'.
Try correcting the name to one that is defined, or defining the name.
onPressed: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (position) {
return (position != null)
? Map()
: Center(child: CircularProgressIndicator());
},
),
);
},