在flutter小部件中的字段初始化器中访问它

时间:2020-02-07 15:51:20

标签: flutter flutter-layout

这是我第一个奉承的应用程序。我想做的是这样的ab容器布局:

class _HomePageState extends State<HomePage> {
  final Geolocator geolocator = Geolocator()..forceAndroidLocationManager;

  Position _currentPosition;

    @override
    Widget build(BuildContext context) {
        return Scaffold(
                appBar: AppBar(
                        title: Text("LocInfo"),
                ),
                body:
        ListView(
          children: [
            //_getCurrentLocation(),
            locSection,
            addressSection,
            timeSection,
          ],
        ),
        );
    }

在布局中,我有这个小部件:

Widget locSection = Container(
  padding: const EdgeInsets.all(32),
  child: Row(
    children: [
      Expanded(
        /*1*/
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            /*2*/
            Container(
              padding: const EdgeInsets.only(bottom: 8),
              child: Text(
                'Location (LAT/LNG)',
                style: TextStyle(
                  fontWeight: FontWeight.bold,
                ),
              ),
            ),
            if (_currentPosition != null)
            Text(
              "LAT: ${_currentPosition.latitude}, LNG: ${_currentPosition.longitude}",
              style: TextStyle(
                color: Colors.grey[500],
              ),
            ),
          ],
        ),
      ),
      /*3*/
      Icon(
        Icons.near_me,
      ),
    ],
  ),
);

我还有一个获取坐标的功能:

_getCurrentLocation() {
    final Geolocator geolocator = Geolocator()..forceAndroidLocationManager;

    geolocator
            .getCurrentPosition(desiredAccuracy: LocationAccuracy.best)
            .then((Position position) {
                setState(() {
                    _currentPosition = position;
                });
      _getAddressFromLatLng();
            }).catchError((e) {
                print(e);
            });
}

问题是,我收到此错误:

lib / home_page.dart:52:21:错误:无法在字段中访问“此” 初始化程序读取“ _currentPosition”。 如果(_currentPosition!= null)

那我该如何访问_currentPosition

1 个答案:

答案 0 :(得分:0)

所以,您的

Widget locSection = Container(
  padding: const EdgeInsets.all(32),...

类似于初始化程序,此时_HomePageState的实例尚未形成。因此,您无法访问其变量_currentPosition。

您可以在_HomePageState的初始化期间(在构造函数中)或在初始化之后(例如在initState中)创建locSection,然后它将正常工作。