我如何计算颤振中的日出和日落?
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 放在一个类而不是一个方法上。昨天的某一天,只见树木不见森林。感谢您的时间和精力。以上是关于我如何计算颤振中的日出和日落?的主要内容,如果未能解决你的问题,请参考以下文章