#javascript #java #flutter #dart
#javascript #java #flutter #dart
Вопрос:
У меня такая проблема с этим кодом, я пытался преобразовать переменные в динамические, но это не сработало, надеюсь, кто-нибудь знает решение, спасибо, пожалуйста, помогите.
У меня такая проблема с этим кодом, я пытался преобразовать переменные в динамические, но это не сработало, надеюсь, кто-нибудь знает решение, спасибо, пожалуйста, помогите.
import 'package:flutter/material.dart';
import 'package:clima/utilities/constants.dart';
import 'package:clima/services/weather.dart';
class LocationScreen extends StatefulWidget {
LocationScreen({this.locationWeather});
final locationWeather;
@override
_LocationScreenState createState() => _LocationScreenState();
}
class _LocationScreenState extends State<LocationScreen> {
WeatherModel weather = WeatherModel();
int temperature;
String weatherIcon;
String cityName;
String weatherMessage;
@override
void initState() {
// ignore: todo
// TODO: implement initState
super.initState();
updateUI(widget.locationWeather);
}
// ignore: non_constant_identifier_names
void updateUI(dynamic WeatherData) {
setState(() {
temperature = WeatherData['main']['temp'];
var condition = WeatherData['weather'][0]['description'];
weatherIcon = weather.getWeatherIcon(condition);
weatherMessage = weather.getMessage(temperature);
cityName = WeatherData['name'];
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage('images/location_background.jpg'),
fit: BoxFit.cover,
colorFilter: ColorFilter.mode(
Colors.white.withOpacity(0.8), BlendMode.dstATop),
),
),
constraints: BoxConstraints.expand(),
child: SafeArea(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
FlatButton(
onPressed: () {},
child: Icon(
Icons.near_me,
size: 50.0,
),
),
FlatButton(
onPressed: () {},
child: Icon(
Icons.location_city,
size: 50.0,
),
),
],
),
Padding(
padding: EdgeInsets.only(left: 15.0),
child: Row(
children: <Widget>[
Text(
'$temperature°',
style: kTempTextStyle,
),
Text(
weatherIcon,
style: kConditionTextStyle,
),
],
),
),
Padding(
padding: EdgeInsets.only(right: 15.0),
child: Text(
'$weatherMessage as in $cityName',
textAlign: TextAlign.right,
style: kMessageTextStyle,
),
),
],
),
),
),
);
}
}
Комментарии:
1. Это Java или Javascript? По сути, это игрушка, предназначенная для написания небольших фрагментов кода, традиционно используемая и злоупотребляемая неопытными программистами. Другой — это язык сценариев для веб-браузеров.
2. Эй, в основном это ваша модель. Вы можете возвращать целое число для ключа ‘temp’ в WeatherData. Но пока вы не опубликуете свою модель, не могу подтвердить.
3. @Pushpendra Проверьте это codeshare.io/24r69L
4. Похоже, что ваши погодные данные (я предполагаю, что json) предоставляют строку вместо int для температуры и / или состояния. Попробуйте передать int.parse(условие) и int.parse(температура) в вашу модель погоды.
Ответ №1:
Попробуйте это,
void updateUI(dynamic weatherData) {
setState(() {
if (weatherData == null) {
temperature = 0;
weatherIcon = 'Error';
weatherMessage = 'Unable to get weather data';
cityName = '';
return;
}
double temp = weatherData['main']['temp'];
temperature = temp.toInt();
var condition = weatherData['weather'][0]['id'];
weatherIcon = weather.getWeatherIcon(condition);
weatherMessage = weather.getMessage(temperature);
cityName = weatherData['name'];
});
}
Ответ №2:
Когда вы получаете доступ к данным из map, вам нужно явно указать, что это int , попробуйте выполнить приведение WeatherData['weather'][0]['description']
к WeatherData['weather'][0]['description'] as int
. Кроме того, если какие-либо данные обнуляются, вам также нужно явно указать это с вопросительным знаком int?
, не уверен WeatherData
, допускает ли это ваша модель или нет.
setState(() {
temperature = WeatherData['main']['temp'] as int ;
var condition = WeatherData['weather'][0]['description'];
weatherIcon = weather.getWeatherIcon(condition);
weatherMessage = weather.getMessage(temperature);
cityName = WeatherData['name'];
});
}