我如何计算颤振中的日出和日落?

Posted

技术标签:

【中文标题】我如何计算颤振中的日出和日落?【英文标题】:How do I calculate the sunrise and sunset in flutter? 【发布时间】:2020-03-07 02:30:38 【问题描述】:

我希望能够将屏幕上的文字从白天更改为黑夜,具体取决于太阳落山与否。我找到了这个 api (https://sunrise-sunset.org/api) 和最近这个包 sunrise_sunset: "^1.0.3",但我遇到了困难。

这是一个更大的项目的一部分,它将是一个地图 (google_maps),它会根据一天中的时间(日出和日落)自动更改主题

我知道,无论何时使用 await,都必须使类异步,我已经这样做了,但是我遇到了错误。

我只是将包示例选项卡中的代码复制到我的项目中

https://pub.dev/packages/sunrise_sunset#-example-tab-

我真的很困惑,所以非常感谢任何帮助。

谢谢

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

void main() => runApp(JsonApiDemo());

class JsonApiDemo extends StatefulWidget 
  JsonApiDemo(Key key) : super(key: key);

  @override
  _JsonApiDemoState createState() => _JsonApiDemoState();


class _JsonApiDemoState extends State<JsonApiDemo> async 

  var response = await SunriseSunset.getResults(latitude: 39.001735, longitude: -119.752744);

  if (response.success) 
    print('Sunrise: $response.data.sunrise');
    print('Sunset: $response.data.sunset');
   else 
    print(response.error);
  

  @override
  Widget build(BuildContext context) 
    return MaterialApp(
      title: 'Hello World!',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: Text('Hello World!'),
        ),
        body: Center(
          child: Text('Hello World!'),
        ),
      ),
    );
  

缺少 State.build 的具体实现。 尝试实现缺少的方法,或将类抽象化。

一个类声明必须有一个主体,即使它是空的。 尝试添加一个空正文。

函数必须有一个明确的参数列表。 尝试添加参数列表。

await 表达式只能在异步函数中使用。 尝试用“async”或“async*”标记函数体。

未引用声明“build”。 尝试删除“build”的声明。

【问题讨论】:

你不标记类async - 你标记方法(或***函数)。您还有一些甚至不在方法中的语句(if 等) 【参考方案1】:

1 - 不要将类标记为 async - 只有函数可以是异步的。

2 - 您应该从异步函数调用包。最简单的方法是使用initState 方法——注意initState 本身不是异步的——所以你需要另一种方法。

3 - 在该异步方法中,存储结果并调用 setState 以便重建小部件以显示它们

4 - 在build 中,您需要能够在获取结果时应对差距 - 使用进度指示器等(我刚刚将结果替换为 working em>)。

class _JsonApiDemoState extends State<JsonApiDemo> 
  DateTime sunrise;
  DateTime sunset;

  @override
  void initState() 
    super.initState();
    getSunData();
  

  void getSunData() async 
    var response = await SunriseSunset.getResults(
      latitude: 39.001735,
      longitude: -119.752744,
    );

    if (response.success) 
      var data = response.data;
      setState(() 
        sunrise = data.sunrise;
        sunset = data.sunset;
      );

      print('Sunrise: $sunrise');
      print('Sunset: $sunset');
     else 
      print(response.error);
    
  

  @override
  Widget build(BuildContext context) 
    return MaterialApp(
      title: 'Hello World!',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: Text('Hello World!'),
        ),
        body: Center(
          child: Text(sunrise == null ? 'Working...' : '$sunrise-$sunset'),
        ),
      ),
    );
  

【讨论】:

嗨,理查德,非常感谢。我不敢相信我把 async 放在一个类而不是一个方法上。昨天的某一天,只见树木不见森林。感谢您的时间和精力。

以上是关于我如何计算颤振中的日出和日落?的主要内容,如果未能解决你的问题,请参考以下文章

日出时间和日落时间怎么计算?

计算该题的日出日落时间和昼长

昼长和日出日落时间的计算

浅谈日出日落的计算方法以及替代工具

Java : 香港经纬度和日出日落时间的计算工具类

c日出日落时间