如何设置文本值以在颤动中自动更改?

我是扑朔迷离的,并且正在开发一个应用程序,该应用程序在Scaffold中的浮动动作按钮中显示车速。但我希望它根据速度自动更改,这样就不必每次都手动刷新/重新启动。

这是我的代码。

import 'dart:async';

import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';


class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {

double speedInmps;
double speedInKph;
var geolocator = Geolocator();
var locationOptions = LocationOptions(accuracy: Locationaccuracy.high,distanceFilter: 10);

Future<void> getVehicleSpeed()async{

try{
  geolocator.getPositionStream((locationOptions)).listen((position) async 
{
     speedInmps = await position.speed;
     speedInKph = speedInmps * 1.609344;

     print(speedInKph.round());

  });
}catch(e){
  print(e);
}
}

@override
Widget build(BuildContext context) {

return MaterialApp(
    home: Scaffold(  floatingactionButton: FloatingactionButton(
    onpressed: () {getVehicleSpeed();
},child: Text(speedInKph.round().toString() +'Km/h'),//Need Improvments 
Here
backgroundColor: Colors.green,),appBar: AppBar(
        title: Text('speed'),centerTitle: true,body: Center(
        child: flatButton(
          onpressed: getVehicleSpeed,child: Text(
        speedInKph.toString(),style: TextStyle(fontSize: 16.0),color: Color(0xffdd4b39),textColor: Colors.white,padding: const EdgeInsets.all(20.0),)
 );
}
}

我必须热装/重启才能获得更新的速度,但是我希望它自动刷新速度。

cuijing6019 回答:如何设置文本值以在颤动中自动更改?

您只需收听一次位置。因此,放入initState,在小部件初始化时调用。

@override
void initState() {
  super.initState();
  getVehicleSpeed();
}

然后在数据更改时调用setState方法。它将重建小部件。

Future<void> getVehicleSpeed() async {
    try {
      geolocator.getPositionStream((locationOptions)).listen((position) async {
      speedInMps = position.speed;
      setState(() {
        speedInKph = speedInMps * 1.609344;
      });

      print(speedInKph.round());
    });
  } catch (e) {
    print(e);
  }
}
本文链接:https://www.f2er.com/3161490.html

大家都在问