【问题标题】:StackOverFlow - Exception caught by widgets libraryStackOverFlow - 小部件库捕获的异常
【发布时间】:2023-03-29 00:27:01
【问题描述】:

我正在使用 Flutter 学习 Dart,所以今天我正在编写一个小型有状态测验应用程序(您只需点击绿色 TRUE 按钮或红色 FALSE 按钮即可回答一些问题。

基本上每个问题都与一个真假布尔值配对。

代码如下。它仅由 material.dart 和一个名为 QuizBrain.dart 的单独类组成。

QuizBrain 包含问题和问题/布尔对的构造函数。

第一个函数只包含 AppBar、backgroundColor 和 body:SafeArea 并调用 Quizzler2() - 这实际上是重要的函数,它将在 material.dart 下扩展 StatefulWidget p>

值 int 索引只是每个问题/布尔对的计数器索引。

!我是罗马尼亚人,所以一些变量的名称和字符串都是罗马尼亚语的。

我的问题 --- 这个应用程序实际上曾经很好用! 直到我尝试将 int index=0 移动到 QuizBrain.dart 文件中...然后再次退出!

W..T..F !!!

在此之后,每次我尝试运行应用程序时,Android Studio(我在 linux 上运行 Android)都会返回大量错误文本:

======== 小部件库捕获的异常=================================== ===================== 在构建 MediaQuery(MediaQueryData(size: 大小(480.0,1013.3),devicePixelRatio:3.0,textScaleFactor:1.0, 平台亮度:Brightness.light,填充:EdgeInsets.zero, viewPadding:EdgeInsets.zero,viewInsets:EdgeInsets.zero, alwaysUse24HourFormat:假,accessibleNavigation:假, highContrast:假,disableAnimations:假,invertColors:假, 粗体文本:假,导航模式:传统,手势设置: DeviceGestureSettings(touchSlop: 8.0))): 堆栈溢出

当然,我运行了 dart clear cache 和 flutter clean cache...无济于事!

我确实注意到 StackOverFlow 错误的其他用途......但我的情况与他们完全不同!

我有 MaterialApp!

那么……怎么了?!

================================================ ============================

ma​​terial.dart 代码:

import 'package:flutter/material.dart';

import 'QuizBrain.dart';



void main()
{
  runApp(QuizzlerTest());
}


class QuizzlerTest extends StatelessWidget
{  

  @override
  Widget build(BuildContext context)
  {  
    return MaterialApp
      ( 

      home: Scaffold
        ( 
        appBar: AppBar
          (  
          centerTitle: true,
          backgroundColor: Colors.grey,
          title: Text('Quizzler TEST', style: TextStyle(
            fontSize: 35,
            fontWeight: FontWeight.bold,
          ),),

        ),  

        backgroundColor: Colors.black,

        body: SafeArea
          ( 
          child: Padding
            (  
            padding: EdgeInsets.symmetric(horizontal: 15),
            child: Quizzler2(),

          ), 
        ),  
      ), 
      );  
  } 

}  


class Quizzler2 extends StatefulWidget
{ 
  @override
  _Quizzler2State createState() => _Quizzler2State();
} 


class _Quizzler2State extends State<Quizzler2>
{  

  int index = 0;
  QuizBrain Creier = QuizBrain();

  @override
  Widget build(BuildContext context)
  {  
    return Column
      (  
        crossAxisAlignment: CrossAxisAlignment.stretch,
        children:<Widget>
        [  
          Expanded
            ( 
            flex: 5,
            child: Padding
              (
              padding: EdgeInsets.symmetric(horizontal: 10),
              child: Center
                ( 
                child: Container
                (
                  child: Text
                    (
                    Creier.listaIntrebarilor[index].Intrebarile,
                    textAlign: TextAlign.center,
                    style: TextStyle( fontSize: 30, color: Colors.white,),
                  ),
                ),

              ),
            ), 
          ),/

          Expanded
            (
            flex: 1,
            child: Container
              ( /
              color: Colors.green,
              child:TextButton
                (
                  onPressed:(){ 
                    bool dilema = Creier.listaIntrebarilor[index].Evaluarea;

                    if(dilema == true)
                    {
                      print('VERDE 1 --- User got it right!');
                    }
                    else if(dilema != true)
                    {
                      print('VERDE 2 --- User got it WRONG!');
                    }

                    setState((){
                      index = index++;
                    });


                  }, /* onPressed ---- end */
                  child: Text('TRUE',
                    textAlign:TextAlign.center,
                    style: TextStyle( color: Colors.white,),
                  )

              ),
            ),

          ),

          SizedBox(
            height: 15,
                  ),

          Expanded
            (
            flex: 1,
            child: Container
              ( 
              color: Colors.red,

              child:TextButton
                (
                  onPressed:(){

                    bool XXX = Creier.listaIntrebarilor[index].Evaluarea;

                    if(XXX == false)
                    {
                      print('ROSU 1 --- User has it right!');
                    }
                    else if (XXX != false)
                    {
                      print(' ROSU 2 --- User has it wrong!');
                    }

                    setState((){
                      index = index++;
                    });

                  }, 
                  child: Text('FALSE',
                    textAlign:TextAlign.center,
                    style: TextStyle( color: Colors.white,),
                  )

              ),
            ), 
          ),
          SizedBox(
            height: 15,
          ),

        ]  
    ); /
  }
} 

================================================ ===============

现在,QuizBrain.dart 文件:

class QuizBrain
{ 


  String Intrebarile = '';
  bool Evaluarea = false;

  QuizBrain({String intrebari ='', bool evaluare = false})
  {
    Intrebarile = intrebari;
    Evaluarea = evaluare;
  }

  List<QuizBrain> listaIntrebarilor = [
    QuizBrain (intrebari:'Este sangele rosu?', evaluare: true),
    QuizBrain(intrebari:'Melcul zboara ?', evaluare: false),
    QuizBrain(intrebari:'0 + 1 = 3', evaluare: false),
    QuizBrain(intrebari:'Pestele inoata?', evaluare: true),
                                      ];   


} 

===================================

【问题讨论】:

  • 另外...Android Studio 检查器检测到代码没有问题!只有当我运行它时,才会出现 StackOverFlow 错误!

标签: android linux


【解决方案1】:

您必须将 listaIntrebarilor 更改为 static 或将其从 QuizBrain 类中移出。因为现在它是一个递归调用。对于每个QuizBrain (intrebari:'Este sangele rosu?', evaluare: true) dart 使用自己的listaIntrebarilor 和新的QuizBrain 实例创建新的QuizBrain 实例等等。

class QuizBrain { 
  String Intrebarile = '';
  bool Evaluarea = false;

  QuizBrain({String intrebari ='', bool evaluare = false}) {
    Intrebarile = intrebari;
    Evaluarea = evaluare;
  }

  static List<QuizBrain> listaIntrebarilor = [
    QuizBrain (intrebari:'Este sangele rosu?', evaluare: true),
    QuizBrain(intrebari:'Melcul zboara ?', evaluare: false),
    QuizBrain(intrebari:'0 + 1 = 3', evaluare: false),
    QuizBrain(intrebari:'Pestele inoata?', evaluare: true),
  ];   
} 

class QuizBrain { 
  String Intrebarile = '';
  bool Evaluarea = false;

  QuizBrain({String intrebari ='', bool evaluare = false}) {
    Intrebarile = intrebari;
    Evaluarea = evaluare;
  }  
} 

List<QuizBrain> listaIntrebarilor = [
    QuizBrain (intrebari:'Este sangele rosu?', evaluare: true),
    QuizBrain(intrebari:'Melcul zboara ?', evaluare: false),
    QuizBrain(intrebari:'0 + 1 = 3', evaluare: false),
    QuizBrain(intrebari:'Pestele inoata?', evaluare: true),
]; 

【讨论】:

  • 非常感谢! +10 给你 ;)
  • 不客气))@CosminMoraru
猜你喜欢
  • 2019-06-13
  • 2020-08-18
  • 1970-01-01
  • 1970-01-01
  • 2021-11-07
  • 1970-01-01
  • 2022-11-30
  • 1970-01-01
相关资源
最近更新 更多