Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何设置按钮以重定向到Flatter中的地图?_Flutter_Google Maps_Dart_Mobile - Fatal编程技术网

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());
                          },
                        ),
                      );
                    },