【问题标题】:No MediaQuery widget ancestor found.The relevant error-causing widget was FutureBuilder<FirebaseApp>未找到 MediaQuery 小部件祖先。相关的导致错误的小部件是 FutureBuilder<FirebaseApp>
【发布时间】:2021-12-22 21:55:51
【问题描述】:

未找到 MediaQuery 小部件祖先。 相关的导致错误的小部件是 未来建造者 脚手架小部件需要一个 MediaQuery 小部件 anchester。找不到 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,
          ),
        );
      },
    );
  }
}

【问题讨论】:

    标签: firebase flutter flutter-futurebuilder


    【解决方案1】:

    请确保您已实施以下步骤:

    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:注册安卓应用,只在app目录下添加google-service.json

    4:main.dart中的初始化

    Future<void> main() async {
      WidgetsFlutterBinding.ensureInitialized();
      await Firebase.initializeApp();
      runApp(MyApp());
    }
    

    【讨论】:

    • 非常感谢,我现在正在使用 getx GetMaterial 应用程序,虽然它与 Getx 有关,但在重新安装 Firebase 核心后,它解决了问题
    • 听起来不错 :) 继续增长
    【解决方案2】:

    此错误表明 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();
        },
      ),
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-08
      • 2021-03-31
      • 2021-12-30
      • 1970-01-01
      • 1970-01-01
      • 2018-11-06
      • 1970-01-01
      • 2022-11-19
      相关资源
      最近更新 更多