繁体   English   中英

如何使用 flutter 上的提供程序更新时差?

[英]How to update difference Time using Provider on flutter?

我有 class:

class JWSModel extends ChangeNotifier {
    String ketCounterShalat = "";
    String diff = "";
    
    void streamDifferentTime() {
        DateTime now = DateTime.now();

        if (now.isBefore(dhuhrTime) && now.isAfter(_dhuha)) {
          ketCounterShalat = "Menuju dhuhur";
          diff = now.difference(dhuhrTime).toString();
        } else if (now.isBefore(asrTime) && now.isAfter(dhuhrTime)) {
          ketCounterShalat = "Menuju ashar";
          diff = now.difference(asrTime).toString();
        } else if (now.isBefore(maghribTime) && now.isAfter(asrTime)) {
          ketCounterShalat = "Menuju maghrib";
          diff = now.difference(maghribTime).toString();
        } else if (now.isBefore(ishaTime) && now.isAfter(maghribTime)) {
          ketCounterShalat = "Menuju isya";
          diff = now.difference(ishaTime).toString();
        } else if (now.isBefore(sunriseTime) && now.isAfter(fajrTime)) {
          diff = now.difference(sunriseTime).toString();
          ketCounterShalat = "Menuju terbit";
        } else if (now.isBefore(_dhuha) && now.isAfter(sunriseTime)) {
          diff = now.difference(_dhuha).toString();
          ketCounterShalat = "Menuju dhuha";
        } else {
          if (fajrTime.day == now.day) {
            diff = now.difference(fajrTime).toString();
          } else if (fajrTime.day != now.day) {
            diff = now.difference(fajrTime.add(const Duration(days: 1))).toString();
          }
        ketCounterShalat = "Menuju subuh";
        notifyListeners();
    }
    
    String get counterShalat => diff;
    String get ketCounter => ketCounterShalat;
}

接下来,在我创建的小部件中

class JWS extends StatefulWidget {
  const JWS({Key? key}) : super(key: key);

  @override
  State<JWS> createState() => _JWSState();
}

class _JWSState extends State<JWS> {
  
JWSModel jws = JWSModel();

  Future<void> getJWS() async { 
    jws.init();
  }

  @override
  void initState() {
    super.initState();
    getJWS();
    Timer.periodic(const Duration(seconds: 1), (timer) {
      jws.streamDifferentTime();
    });
  }

  @override
  Widget build(BuildContext context) {
    final state = context.watch<JWSModel>();
    log(state.counterShalat);

为什么不成功? 我想更新差异时间,我使用计时器来更新它。 我不想使用setState({}); 因为我认为很难每 1 秒更新一次。

更新:如果我登录class JWSModel成功。 但是,我打电话给class JWS什么都没有出现。 我想在不同的时间获得更新,但我不想使用setState({});

或者是否有正确的代码供我使用。

class _JWSState extends State<JWS> {
 
  @override
  void initState() {
    super.initState();
    Timer.periodic(const Duration(seconds: 1), (timer) {
      context.read<JWSModel>().streamDifferentTime();
    });
  }

  @override
  Widget build(BuildContext context) {
    final state = context.watch<JWSModel>();
    return Scaffold ( appBar: AppBar(), 
            body: Text(state.counterShalat, 
                      style:TextStyle(color:Colors.blue)),
    );
}

当来自notifylistener的任何更新时,该值也应该更新。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM