我是新手,我正在学习在应用程序中添加启动画面,然后转到新页面。我在项目中添加了一个依赖闪屏:因为我是新手,所以我不怎么实现启动画面,当我搜索时,我得到了向项目添加依赖项的解决方案。
当我尝试运行我的应用程序时,出现以下错误。
I/flutter (28504): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY
╞═══════════════════════════════════════════════════════════
I/flutter (28504): The following assertion was thrown building
SplashScreen(state: _SplashScreenState#6edd2):
I/flutter (28504): MediaQuery.of() called with a context that does not
contain a MediaQuery.
I/flutter (28504): No MediaQuery ancestor could be found starting from the
context that was passed to MediaQuery.of().
I/flutter (28504): This can happen because you do not have a WidgetsApp or
MaterialApp widget (those widgets introduce
I/flutter (28504): a MediaQuery), or it can happen if the context you use
comes from a widget above those widgets.
I/flutter (28504): The context used was:
I/flutter (28504): Scaffold(dirty, state: ScaffoldState#a8879(lifecycle
state: initialized, tickers: tracking 1
I/flutter (28504): ticker))
这是我的pubspec.yaml
name: bmi_calculator
description: A flutter application for knowing you BMI.
version: 1.0.0+1
environment:
sdk: ">=2.1.0 <3.0.0"
dependencies:
flutter:
sdk: flutter
splashscreen:
cupertino_icons: ^0.1.2
dev_dependencies:
flutter_test:
sdk: flutter
flutter:
uses-material-design: true
我的main.dart
import 'package:flutter/material.dart';
import 'package:splashscreen/splashscreen.dart';
import 'package:bmi_calculator/BmiPage.dart';
main(){
runApp(BmiCalculator());
}
class BmiCalculator extends StatefulWidget{
@override
State<StatefulWidget> createState() {
return BmiCalculatorstate();
}
}
class BmiCalculatorstate extends State<BmiCalculator>{
@override
Widget build(BuildContext context) {
return new SplashScreen(
seconds: 10,
navigateAfterSeconds: new BmiPage(),
title: Text("Welcome to BMI CALCULATOR",
style: new TextStyle(
fontWeight: FontWeight.bold,
fontSize: 10.0,
color: Colors.white
),
),
backgroundColor: Colors.red,
);
}
}
这是我的BmiPage.dart
import 'package:flutter/material.dart';
class BmiPage extends StatefulWidget{
@override
State<StatefulWidget> createState() {
return BmiPageState();
}
}
class BmiPageState extends State<BmiPage>{
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: new AppBar(
title: Text(
'BMI CALCULATOR',
style: new TextStyle(
color: Colors.white
),
),
backgroundColor: Colors.red,
),
),
);
}
}
为什么会出现此错误,我该如何解决?
谢谢。
答案 0 :(得分:0)
您的错误实际上是由于您没有有效的上下文而导致的,因为已知的框架问题可能会在以后的更新中修复,在该更新中您实际上需要在runApp()
方法中使用无状态小组件,然后,以无状态的BMICaculator()
方法返回您的build
。
runApp(MyApp());
class MyApp extends StatelessWidget {
void build(BuildContext context)=> MaterialApp(home: BMICalculator());
}
此外,您实际上不需要插件即可向应用程序添加启动屏幕。 “启动画面”有两种类型:
通常在按下应用程序图标时,您会短暂看到直到实际加载引擎和第一个屏幕为止的内容;
一个自定义启动屏幕,您可以在其中从API提取一些数据或执行在第一个屏幕之前实际需要的一些操作。该插件更适合这种情况。
我建议您阅读this article,该指南逐步介绍了如何向应用程序添加启动画面(案例1)