没有 MediaQuery 小部件祖先 found.The 导致错误的相关小部件是 FutureBuilder<FirebaseApp>
No MediaQuery widget ancestor found.The relevant error-causing widget was FutureBuilder<FirebaseApp>
未找到 MediaQuery 小部件祖先。
相关的导致错误的小部件是
未来建造者
脚手架小部件需要一个 MediaQuery 小部件 anchester.The 找不到 Mediaquery anchester 的特定小部件是:
脚手架
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
import 'package:todolist/colorshades/color.dart';
import 'package:todolist/database/services.dart';
import 'Loading.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: Firebase.initializeApp(),
builder: (context, snapshot) {
if (snapshot.hasError) {
return Scaffold(
body: Center(child: Text(snapshot.error.toString())),
);
}
if (snapshot.connectionState == ConnectionState.waiting) {
return Loading();
}
return MaterialApp(
debugShowCheckedModeBanner: false,
home: TodoList(),
theme: ThemeData(
primarySwatch: Colors.pink,
),
);
},
);
}
}
请确保您已执行以下步骤:
1: 在pubspecs.yaml
中添加dep
firebase_core: // latest version
2: 在应用 build.gradle
文件中添加依赖和服务。
dependencies {
implementation platform('com.google.firebase:firebase-bom:26.5.0')
}
apply plugin: 'com.google.gms.google-services'
3: 注册android app,仅在app
目录下添加google-service.json
4:在main.dart
中初始化
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(MyApp());
}
此错误表明 MediaQuery
在提供给小部件树之前被引用(在您的情况下发生在 MaterialApp
小部件中)。您可能希望将 MaterialApp
小部件移动到小部件树的顶部,Scaffold
小部件上方(最好移动到最顶部,在 FutureBuilder
上方)。
所以它看起来像这样(假设您的 TodoList
和 Loading
小部件都包含 Scaffold
,否则将您的 FutureBuilder
包装在 Scaffold
中):
return MaterialApp(
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.pink,
),
home: FutureBuilder(
future: Firebase.initializeApp(),
builder: (context, snapshot) {
if (snapshot.hasError) {
return Scaffold(
body: Center(child: Text(snapshot.error.toString())),
);
}
if (snapshot.connectionState == ConnectionState.waiting) {
return Loading();
}
return TodoList();
},
),
);
未找到 MediaQuery 小部件祖先。 相关的导致错误的小部件是 未来建造者 脚手架小部件需要一个 MediaQuery 小部件 anchester.The 找不到 Mediaquery anchester 的特定小部件是: 脚手架
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
import 'package:todolist/colorshades/color.dart';
import 'package:todolist/database/services.dart';
import 'Loading.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: Firebase.initializeApp(),
builder: (context, snapshot) {
if (snapshot.hasError) {
return Scaffold(
body: Center(child: Text(snapshot.error.toString())),
);
}
if (snapshot.connectionState == ConnectionState.waiting) {
return Loading();
}
return MaterialApp(
debugShowCheckedModeBanner: false,
home: TodoList(),
theme: ThemeData(
primarySwatch: Colors.pink,
),
);
},
);
}
}
请确保您已执行以下步骤:
1: 在pubspecs.yaml
中添加depfirebase_core: // latest version
2: 在应用 build.gradle
文件中添加依赖和服务。
dependencies {
implementation platform('com.google.firebase:firebase-bom:26.5.0')
}
apply plugin: 'com.google.gms.google-services'
3: 注册android app,仅在app
目录下添加google-service.json
4:在main.dart
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(MyApp());
}
此错误表明 MediaQuery
在提供给小部件树之前被引用(在您的情况下发生在 MaterialApp
小部件中)。您可能希望将 MaterialApp
小部件移动到小部件树的顶部,Scaffold
小部件上方(最好移动到最顶部,在 FutureBuilder
上方)。
所以它看起来像这样(假设您的 TodoList
和 Loading
小部件都包含 Scaffold
,否则将您的 FutureBuilder
包装在 Scaffold
中):
return MaterialApp(
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.pink,
),
home: FutureBuilder(
future: Firebase.initializeApp(),
builder: (context, snapshot) {
if (snapshot.hasError) {
return Scaffold(
body: Center(child: Text(snapshot.error.toString())),
);
}
if (snapshot.connectionState == ConnectionState.waiting) {
return Loading();
}
return TodoList();
},
),
);