簡體   English   中英

Flutter 中的 Widgets Library 錯誤捕獲異常

[英]Exception Caught By Widgets Library error in Flutter

我在 Flutter 中有這個應用程序。它有兩個類可以生成筆記列表。

這是主 class,MyApp class:

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:notesgenerator/sala.dart';

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

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override

  Widget build(BuildContext context) {

    List<Sala> locs = [
      Sala(note: 'Study', noteDes: 'from 6pm ~ 8pm'),
      Sala(note: 'Work', noteDes: 'from 8pm ~ 9pm'),
      Sala(note: 'Play', noteDes: 'from 9pm ~ 9:30pm'),
      Sala(note: 'Eat', noteDes: 'from 9:30pm ~ 10pm'),
    ];

    return Scaffold(
      appBar: AppBar(
        title: Text('NoteIndex'),
        centerTitle: true,
      ),
      body: ListView.builder(
          itemCount: 10,
          itemBuilder: (context, index) {
            return Card(
              child: ListTile(
                onTap: () {},
                title: (Text(locs[index].note)),
              ),
            );
          }),
    );}}

這是存儲數據的class,Sala class:

class Sala {
  String note;
  String noteDes;
  Sala({this.note, this.noteDes});
}

當我嘗試運行它時,我得到這個:

I/flutter (21388): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
I/flutter (21388): The following assertion was thrown building MyApp:
I/flutter (21388): MediaQuery.of() called with a context that does not contain a MediaQuery.
I/flutter (21388): No MediaQuery ancestor could be found starting from the context that was passed to MediaQuery.of().
I/flutter (21388): This can happen because you do not have a WidgetsApp or MaterialApp widget (those widgets introduce
I/flutter (21388): a MediaQuery), or it can happen if the context you use comes from a widget above those widgets.
I/flutter (21388): The context used was:
I/flutter (21388):   Scaffold
I/flutter (21388): 
I/flutter (21388): The relevant error-causing widget was:
I/flutter (21388):   MyApp file:///F:/FlutterProjects/notesgenerator/lib/main.dart:6:23
I/flutter (21388): 
I/flutter (21388): When the exception was thrown, this was the stack:
I/flutter (21388): #0      MediaQuery.of (package:flutter/src/widgets/media_query.dart:798:5)
I/flutter (21388): #1      ScaffoldState.didChangeDependencies (package:flutter/src/material/scaffold.dart:1993:50)
I/flutter (21388): #2      StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4376:12)
I/flutter (21388): #3      ComponentElement.mount (package:flutter/src/widgets/framework.dart:4201:5)
I/flutter (21388): #4      Element.inflateWidget (package:flutter/src/widgets/framework.dart:3194:14)
I/flutter (21388): #5      Element.updateChild (package:flutter/src/widgets/framework.dart:2988:12)
I/flutter (21388): #6      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4243:16)
I/flutter (21388): #7      Element.rebuild (package:flutter/src/widgets/framework.dart:3947:5)
I/flutter (21388): #8      ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4206:5)
I/flutter (21388): #9      ComponentElement.mount (package:flutter/src/widgets/framework.dart:4201:5)
I/flutter (21388): #10     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3194:14)
I/flutter (21388): #11     Element.updateChild (package:flutter/src/widgets/framework.dart:2988:12)
I/flutter (21388): #12     RenderObjectToWidgetElement._rebuild (package:flutter/src/widgets/binding.dart:1028:16)
I/flutter (21388): #13     RenderObjectToWidgetElement.mount (package:flutter/src/widgets/binding.dart:999:5)
I/flutter (21388): #14     RenderObjectToWidgetAdapter.attachToRenderTree.<anonymous closure> (package:flutter/src/widgets/binding.dart:942:17)
I/flutter (21388): #15     BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2412:19)
I/flutter (21388): #16     RenderObjectToWidgetAdapter.attachToRenderTree (package:flutter/src/widgets/binding.dart:941:13)
I/flutter (21388): #17     WidgetsBinding.attachRootWidget (package:flutter/src/widgets/binding.dart:819:7)
I/flutter (21388): #18     WidgetsBinding.scheduleAttachRootWidget.<anonymous closure> (package:flutter/src/widgets/binding.dart:804:7)
I/flutter (21388): #27     _Timer._runTimers (dart:isolate-patch/timer_impl.dart:384:19)
I/flutter (21388): #28     _Timer._handleMessage (dart:isolate-patch/timer_impl.dart:418:5)
I/flutter (21388): #29     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:174:12)
I/flutter (21388): (elided 8 frames from package dart:async and package dart:async-patch)
I/flutter (21388): 
I/flutter (21388): ════════════════════════════════════════════════════════════════════════════════════════════════════

如果您能提供幫助,我將不勝感激,如果您有任何疑問,請在評論中告訴我!

用 MaterialApp 包裹你的腳手架

    return MaterialApp(
  title: 'Flutter Demo',
  theme: ThemeData(
    primarySwatch: Colors.blue,
    visualDensity: VisualDensity.adaptivePlatformDensity,
  ),
  home: Scaffold(),
);

你需要用包裹你的腳手架

材質應用程序()

因為這是引入MediaQuery的widget

MyApp 構建的變化:

    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: Scaffold(
       ...
      ),
    );

解決方案

itemCount: locs.length而不是itemCount: 10

對於那些對原因感到好奇的人,請閱讀以下內容:

看看你的清單:

 List<Sala> locs = [
  Sala(note: 'Study', noteDes: 'from 6pm ~ 8pm'),
  Sala(note: 'Work', noteDes: 'from 8pm ~ 9pm'),
  Sala(note: 'Play', noteDes: 'from 9pm ~ 9:30pm'),
  Sala(note: 'Eat', noteDes: 'from 9:30pm ~ 10pm'),
];

很明顯,您的列表長度為 3。

但是,在您的ListViewBuilder中:

itemCount: 10,

您正在設置一個 static 值為 10,這將告訴構建器有 10 個項目要返回,並且超出了您列表的實際長度,明確表示,您正在返回 10 個 Card 項目,而您的列表僅包含 3 個項目,這將嘗試創建 10 個從列表開始時不存在的項目,當然當迭代器返回列表的最后一個項目時它會返回索引錯誤,這意味着它將返回錯誤第 4 個索引,因為您只有 3 個項目。

如果您使用的是 Getxbuilder,請遵循以下說明:

首先,您必須驗證每個 Getxbuilder 視圖的 Getxbuilder<YOUR_VIEW_CONTROLER> 名稱 controller。

這是我收到錯誤時唯一的問題。

按照代碼:

 GetBuilder<**RecentMatchListViewController**>(
                            builder: (_) => recentMatchListViewController!
                                        .recentMatchListModel!
                                        .data![index]
                                        .result ==
                                    null
                                ? progressIndicator(1)
                                : Text(
                                    recentMatchListViewController!
                                        .recentMatchListModel!
                                        .data![index]
                                        .result
                                        .toString(),
                                    style: redHeadingTextStyle(),
                                    textAlign: TextAlign.center,
                                  ),
                          )

RecentMatchListViewController 可能會更改為另一個視圖 controller,例如

GetBuilder<**UpcomingMatchListViewController**>(
                            builder: (_) => recentMatchListViewController!
                                        .recentMatchListModel!
                                        .data![index]
                                        .result ==
                                    null
                                ? progressIndicator(1)
                                : Text(
                                    recentMatchListViewController!
                                        .recentMatchListModel!
                                        .data![index]
                                        .result
                                        .toString(),
                                    style: redHeadingTextStyle(),
                                    textAlign: TextAlign.center,
                                  ),
                          )

這是由於一些復制過去的工作,並且還通過不匹配導入了文件。

暫無
暫無

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

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