Пустой белый экран после открытия приложения Flutter - PullRequest
1 голос
/ 31 марта 2020

Я довольно плохо знаком с флаттером, и недавно я создал приложение погоды с помощью онлайн-курса. Приложение работает и отлично работает на эмуляторе 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,
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

1 Ответ

0 голосов
/ 31 марта 2020

Вам необходимо вызвать указанную ниже функцию после импорта по вашему root маршруту или главной странице

void main() => runApp(LoadingScreen());
...