【问题标题】:Flutter: How to store the location data?Flutter:如何存储位置数据?
【发布时间】:2022-11-07 16:41:08
【问题描述】:

错误:

  1. 命名参数“locationData”是必需的,但没有 对应的论据。尝试添加所需的参数。

  2. 未定义的名称'locationData'。尝试将名称更正为已定义的名称,或定义名称。

    main.dart文件中的位置数据报错请帮我解决。

    我的代码:

    下面是导致错误的main.dart 代码:

    import 'package:firebase_core/firebase_core.dart';
    import 'package:firstapp/screens/Login_screen.dart';
    import 'package:firstapp/screens/authunication/phone_auth_screen.dart';
    import 'package:firstapp/screens/home_screen.dart';
    import 'package:firstapp/screens/location_screen.dart';
    import 'package:firstapp/screens/splash_screen.dart';
    import 'package:flutter/material.dart';
    import 'package:location/location.dart';
    
    Future<void> main() async {
    WidgetsFlutterBinding.ensureInitialized();
    await Firebase.initializeApp();
     runApp(MyApp());
     }
     
    
    // ignore: use_key_in_widget_constructors
    class MyApp extends StatelessWidget {
    @override
    Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primaryColor: Colors.cyan.shade900,
      ),
      initialRoute: SplashScreen.id,
      routes: {
        SplashScreen.id: (context) => SplashScreen(),
        LoginScreen.id: (context) => LoginScreen(),
        PhoneAuthScreen.id: (context) => PhoneAuthScreen(),
        LocationScreen.id: (context) => LocationScreen(),
        HomeScreen.id: (context) => HomeScreen(locationData),
      },
    );`
    

    下面是我想要位置数据的HomeScreen 小部件的代码:

    import 'package:flutter/material.dart';
    import 'package:location/location.dart';
    
     class HomeScreen extends StatelessWidget {
     static const String id = 'home-screen';
     final LocationData locationData;
     HomeScreen({
     required this.locationData, 
     });
     @override
     Widget build(BuildContext context) {
     return Scaffold(
      appBar: AppBar(
        title: Text(locationData.latitude.toString()),
      ),
      body: Center(
        child: Text('Home screen'),
      ),
      );
       }
      }
    

    这是应用程序中LocationScreen 小部件的代码:

    import 'package:firebase_auth/firebase_auth.dart';
    import 'package:firstapp/screens/login_screen.dart';
    import 'package:flutter/cupertino.dart';
    import 'package:flutter/material.dart';
    import 'package:location/location.dart';
    
    
    
    class LocationScreen extends StatefulWidget {
    static const String id = 'location-screen';
    
    @override
    State<LocationScreen> createState() => _LocationScreenState();
    }
    
    class _LocationScreenState extends State<LocationScreen> {
    Location location = new Location();
    
    late bool _serviceEnabled;
    late PermissionStatus _permissionGranted;
    late LocationData _locationData;
    
    
     Future<LocationData?>getLocation() async {
      _serviceEnabled = await location.serviceEnabled();
      if (!_serviceEnabled) {
        _serviceEnabled = await location.requestService();
        if (!_serviceEnabled) {
        return null;
        }
       }
    
       _permissionGranted = await location.hasPermission();
       if (_permissionGranted == PermissionStatus.denied) {
      _permissionGranted = await location.requestPermission();
       if (_permissionGranted != PermissionStatus.granted) {
        return null;
       }
     }
    
       _locationData = await location.getLocation();
       return _locationData;
    }
    

【问题讨论】:

  • 如果您想将数据发送到新屏幕,您必须阅读此文档 => https://docs.flutter.dev/cookbook/navigation/navigate-with-argumentshttps://docs.flutter.dev/cookbook/navigation/passing-data

标签: flutter dart


【解决方案1】:

所以,

  1. 第一个错误表明,当您尝试实现 HomeScreen 小部件时,没有提供名为 locationData 的必需参数,而要提供所需的参数,请遵循以下代码示例:
    HomeScreen(locationData: locationData)
    
    1. 第二个错误表明您正在尝试使用尚未定义的变量。在您尝试实现 HomeScreen 小部件的页面中,您应该定义一个名为 locationData 的变量,给它一个值,然后尝试使用 HomeScreen 小部件。例如:
    class LocationScreen extends StatefulWidget {
      const LocationScreen({Key? key}) : super(key: key);
    
    
      @override
      State<LocationScreen> createState() => _LocationScreenState();
    
    }
    
    class _LocationScreenState extends State<LocationScreen> {
    
      LocationData locationData;
    
      @override
      Widget build(BuildContext context) {
        //in case that you use the HomeScreen as a widget
        return locationData == null ? Container() : HomeScreen(locationData: locationData);
        //in case that you use the HomeScreen as Screen
        return Container();
      }
    
      void getLocationData() async{
        //in case that you use the HomeScreen as a widget
        //this function will change the state after the locationData have been filled
        locationData = await getLocation();
        setState(() {
        });
      }
    
      void navigateToHomeScreen() async{
        //in case that you use the HomeScreen as a widget
        //this function will change the state after the locationData have been filled
        locationData = await getLocation();
        Navigator.push(context, MaterialPageRoute(
            builder: (context) => HomeScreen(locationData: locationData);
        ));
      }
    
      Future<LocationData?> getLocation() async {
        _serviceEnabled = await location.serviceEnabled();
        if (!_serviceEnabled) {
          _serviceEnabled = await location.requestService();
          if (!_serviceEnabled) {
            return null;
          }
        }
    
        _permissionGranted = await location.hasPermission();
        if (_permissionGranted == PermissionStatus.denied) {
          _permissionGranted = await location.requestPermission();
          if (_permissionGranted != PermissionStatus.granted) {
            return null;
          }
        }
    
        _locationData = await location.getLocation();
        return _locationData;
      }
    }
    
    1. 第三个错误说不要在 HomeScreen 类中使用任何位置参数,因为您使用命名参数,如果您按照我的代码进行操作,它也会得到修复

    希望我有所帮助, 享受扑腾

【讨论】:

    【解决方案2】:

    在 HomeScreen 上,替换这行代码:

    HomeScreen({required this.locationData,});

    HomeScreen(this.locationData);
    

    这应该清除 main.dart 上的错误

    【讨论】:

      猜你喜欢
      • 2020-03-01
      • 1970-01-01
      • 2012-06-08
      • 1970-01-01
      • 1970-01-01
      • 2021-07-14
      • 1970-01-01
      • 1970-01-01
      • 2014-05-25
      相关资源
      最近更新 更多