簡體   English   中英

打開 Flutter 應用程序后的空白白屏

[英]Blank White screen after opening Flutter app

我對 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,
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

您需要在根路由或主頁中導入后調用下面的函數

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM