我对Flutter还很新,最近通过在线课程创建了一个天气应用程序。该应用在Android模拟器上运行良好,并且在我的手机上运行良好。但是我想分享这个应用程序,因此我使用flutter build apk --split-per-abi
创建了一个发布APK。但是在其他人的手机上安装应用程序后,第一个屏幕加载后立即出现一个空白白屏,什么也没有发生。
在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,
),
)
);
}
}
我的第二个天气位置屏幕
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,
),
),
],
),
),
),
);
}
}