StackOverflow — Исключение, обнаруженное библиотекой виджетов

#android #linux

#Android #линукс

Вопрос:

Я изучаю дротик с помощью Flutter, поэтому сегодня я пишу небольшое приложение для викторины с отслеживанием состояния (такое, в котором вы просто нажимаете зеленую кнопку «ПРАВДА» или красную кнопку «ЛОЖЬ», чтобы ответить на некоторые вопросы.

В основном каждый вопрос сопряжен с логическим значением true или false.

Код приведен ниже. Он состоит только из material.dart и отдельного класса, называемого QuizBrain.dart.

QuizBrain содержит вопросы и конструктор для пары вопрос/логическое значение.

Первая функция содержит только панель приложений, цвет фона и тело:область безопасности с вызовом функции Quizzler2() — на самом деле это важная функция, которая расширит параметры состояния ниже материала.dart

Индекс value int — это просто индекс счетчика для каждой пары вопрос/bool.

! Я румын, поэтому названия некоторых переменных и строк написаны на румынском языке.

Моя проблема-это приложение на самом деле отлично работало! Пока я не попытался переместить индекс int=0 в файл QuizBrain.dart …а потом снова вылезай!

Ч..Т..Ф !!!

После этого каждый раз, когда я пытаюсь запустить приложение, Android Studio (я запускаю Android в Linux) возвращает мне массивную стену текста с ошибкой:

= = = = = = = = Исключение, обнаруженное библиотекой виджетов ======================================================= Следующая ошибка StackOverflowError была вызвана при создании MediaQuery(MediaQueryData(размер: Размер(480,0, 1013,3), Разрешение устройства: 3,0, масштабирование текста: 1,0, яркость платформы: Яркость.свет, заполнение: EdgeInsets.zero, видовое заполнение: EdgeInsets.zero, видовые наборы: EdgeInsets.zero, всегда используется 24 часа Формат: ложь, Доступная навигация: ложь, высокая контрастность: ложь, Отключаемые объекты: ложь, инвертные цвета: ложь, полужирный текст: ложь, Режим навигации: традиционный, Настройки жестов: Настройки устройств(сенсорный экран: 8.0))): Переполнение стека

Конечно, я запустил dart clear cache и flutter clean cache…to безрезультатно!

I did noticed other uses with StackOverFlow errors…but my situation is nothing like theirs!

I have MaterialApp !

So…whats wrong ?!

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

The material.dart code:

 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() =gt; _Quizzler2State(); }    class _Quizzler2State extends Statelt;Quizzler2gt; {    int index = 0;  QuizBrain Creier = QuizBrain();   @override  Widget build(BuildContext context)  {   return Column  (   crossAxisAlignment: CrossAxisAlignment.stretch,  children:lt;Widgetgt;  [   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;  }   Listlt;QuizBraingt; 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),  ];    }   

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

Комментарии:

1. Также… Инспектор Android Studio вообще не обнаруживает проблем с кодом! Только когда я запускаю его, появляется ошибка StackOverflow!

Ответ №1:

Вы должны изменить listaIntrebarilor static его или перенести из QuizBrain класса. Потому что теперь это рекурсивный вызов. Для каждого QuizBrain (intrebari:'Este sangele rosu?', evaluare: true) дротика создайте новый QuizBrain экземпляр с собственным listaIntrebarilor новым QuizBrain экземпляром и так далее.

 class QuizBrain {   String Intrebarile = '';  bool Evaluarea = false;   QuizBrain({String intrebari ='', bool evaluare = false}) {  Intrebarile = intrebari;  Evaluarea = evaluare;  }   static Listlt;QuizBraingt; 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;  }  }   Listlt;QuizBraingt; 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), ];    

Комментарии:

1. Большое спасибо! 10 к вам 😉

2. Добро пожаловать)) @CosminMoraru