#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