Я довольно плохо знаком с флаттером, и недавно я создал приложение погоды с помощью онлайн-курса. Приложение работает и отлично работает на эмуляторе android и когда я запускаю его на своем телефоне. Но я хотел поделиться приложением, поэтому я создал релиз apk, используя flutter build apk --split-per-abi
, но после установки приложения на их мобильные телефоны загружается первый экран, и сразу появляется пустой белый экран, и ничего не происходит. Такая ошибка не возникает, когда я запускаю приложение в android studio
Моя первая страница экрана загрузки
import 'package:flutter/material.dart';
import 'package:flutter_spinkit/flutter_spinkit.dart';
import '../services/weather.dart';
import 'location_screen.dart';
import 'package:location_permissions/location_permissions.dart';
class LoadingScreen extends StatefulWidget {
@override
_LoadingScreenState createState() => _LoadingScreenState();
}
class _LoadingScreenState extends State<LoadingScreen> {
@override
void initState() {
getWeatherData();
super.initState();
}
void getWeatherData () async {
PermissionStatus permission = await LocationPermissions().requestPermissions();
var weatherData = await WeatherModel().getWeather();
Navigator.push(context, MaterialPageRoute(builder: (context){
return LocationScreen(weatherData: weatherData);
}));
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: SpinKitFoldingCube(
color: Colors.blueAccent,
size: 100,
),
)
);
}
}
Мой второй экран местоположения Weather
import 'package:clima/services/weather.dart';
import 'package:flutter/material.dart';
import 'package:clima/utilities/constants.dart';
import 'city_screen.dart';
import '../services/weather.dart';
class LocationScreen extends StatefulWidget {
final weatherData;
LocationScreen({this.weatherData});
@override
_LocationScreenState createState() => _LocationScreenState();
}
class _LocationScreenState extends State<LocationScreen> {
int temperature;
String icon;
String message;
String cityName;
String summary;
TimeOfDay t = TimeOfDay.now();
@override
void initState() {
super.initState();
updateScreen(widget.weatherData);
}
AssetImage setBackground(){
print(t.hour);
if(t.hour >18 || t.hour < 6)
return AssetImage("images/night.png");
else
return AssetImage('images/after_noon.png');
}
void updateScreen(dynamic weatherData) {
setState(() {
if (weatherData == null) {
temperature = 0;
icon = 'error';
message = 'Sorry Coudnt load Weather ';
cityName = '';
summary='';
} else {
double temp = (weatherData['main']['temp']);
temperature = temp.toInt();
icon = WeatherModel().getWeatherIcon(weatherData['weather'][0]['id']);
message = WeatherModel().getMessage(temperature);
cityName = weatherData['name'];
summary=weatherData['weather'][0]['description'];
}
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
decoration: BoxDecoration(
image: DecorationImage(
image: setBackground(),
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: () async {
updateScreen(WeatherModel().getWeather());
},
child: Icon(
Icons.near_me,
size: 50.0,
),
),
FlatButton(
onPressed: () async{
var cityName = await Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
return CityScreen();
},
),
);
if(cityName != null)
{
var weatherData = await WeatherModel().getCityWeather(cityName);
updateScreen(weatherData);
}
},
child: Icon(
Icons.location_city,
size: 50.0,
),
),
],
),
Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Padding(
padding: EdgeInsets.only(left: 15.0),
child: Row(
children: <Widget>[
Text(
'$temperature',
style: kTempTextStyle,
),
Text(
'$icon',
style: kConditionTextStyle,
),
],
),
),
Padding(
padding: EdgeInsets.only(left: 15.0),
child: Text(
"$summary",
style: TextStyle(
fontSize: 30,
fontFamily: 'Spartan MB',
fontStyle: FontStyle.italic,
),
),
),
],
),
Padding(
padding: EdgeInsets.only(right: 15.0),
child: Text(
"$message in $cityName",
textAlign: TextAlign.right,
style: kMessageTextStyle,
),
),
],
),
),
),
);
}
}