没有 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 上方)。

所以它看起来像这样(假设您的 TodoListLoading 小部件都包含 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();
    },
  ),
);