【发布时间】:2021-09-09 00:53:57
【问题描述】:
我的代码有问题,谁能帮帮我。
世界时间.dart
import 'package:http/http.dart';
import 'dart:convert';
import 'package:intl/intl.dart';
class WorldTime {
String? time;
String? url;
String? location;
String? flag;
late bool isDaytime;
WorldTime({this.url, this.location, this.flag});
Future<void> getTime() async {
try {
// make the request
Response response = await get(Uri.parse('http://worldtimeapi.org/api/timezone/$url'));
Map data = jsonDecode(response.body);
// get properties from data
String datetime = data['datetime'];
String offset = data['utc_offset'].substring(1,3);
// create datetime object
DateTime now = DateTime.parse(datetime);
now = now.add(Duration(hours: int.parse(offset)));
// set the time property
isDaytime = now.hour > 6 && now.hour < 20 ? true : false;
time = DateFormat.jm().format(now);
} catch (e) {
print('caught error: $e');
time = 'Cant get datetime';
}
}
}
loading.dart
import 'package:flutter/material.dart';
import 'package:flutter_spinkit/flutter_spinkit.dart';
import 'package:test_worldtime/service/world_time.dart';
class LoadingScreen extends StatefulWidget {
@override
_LoadingScreenState createState() => _LoadingScreenState();
}
class _LoadingScreenState extends State<LoadingScreen> {
void setWorldTime() async {
WorldTime instance = WorldTime(url: 'Asia/Jakarta', location: 'Jakarta', flag: 'indonesia.jpg');
await instance.getTime();
Navigator.pushReplacementNamed(context, '/home', arguments: {
'location': instance.location,
'time': instance.time,
'flag': instance.flag,
'isDaytime': instance.isDaytime
});
}
@override
void initState() {
super.initState();
setWorldTime();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.blue[900],
body: Center(
child: SpinKitCircle(
color: Colors.white,
size: 80.0,
)
),
);
}
}
home.dart
import 'package:flutter/material.dart';
import 'package:legacy_buttons/legacy_buttons.dart';
class Home extends StatefulWidget {
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
Map data = {};
@override
Widget build(BuildContext context) {
data = ModalRoute.of(context)!.settings.arguments as Map;
print(data);
// set background
String bgImage = data['IsDayTime'] ? 'day.png' : 'night.png';
return Scaffold(
body: SafeArea(
child: Container(
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage('assets/day.png'),
fit: BoxFit.cover
)
),
)
)
)
}
}
我的问题是当我开始运行颤振时抛出一些错误它说:“类型'Null'不是布尔表达式中的'bool'”。我尝试将late 或bool? 放入isDaytime 仍然不起作用,有人可以帮帮我
编辑:如果我取消注释 String bgImage 并将 AssetImage('assets/day.png') 更改为 AssetImage('assets/$bgImage'),此代码将出错
此链接视频:https://www.youtube.com/watch?v=NDulhXVcLuI&list=PL4cUxeGkcC9jLYyp2Aoh6hcWuxFDX6PBJ&index=33
【问题讨论】:
-
如果不是将其标记为迟到,而是将其标记为可为空怎么办?比如:布尔?是白天
-
我尝试输入
bool?仍然不适合我 -
您确定错误来自该行吗?您的三元条件中没有任何内容可能导致它为空。而且,那个三元表达式是没有用的。只需
isDaytime = now.hour > 6 && now.hour < 20;。 -
你的日期时间是否为空?
-
data['IsDayTime']如果未找到密钥,将返回null。您需要为这种情况提供一个备用值。例如:(data['IsDayTime'] ?? true) ? 'day.png' : 'night.png'