Трепещите, не можете включить ввод в строку для отображения текста на экране

#flutter #dart #flutter-layout #flutter-dependencies

Вопрос:

У меня такое чувство, что в моем коде что-то не так, но я пытаюсь отобразить набор int на экране, только чтобы он не превратил их в строку. пожалуйста, посмотрите на мой код и попытайтесь помочь. Я хочу, чтобы « _result = ('$z $y $x $w $v') as int; отображалось на экране приложения, но при использовании String resultS = _result.toString(); я получаю «Элемент экземпляра» _result «не может быть доступен в инициализаторе». поэтому, когда я пытаюсь инициализировать в конструктор, например

    int _result = 0;
      
      MyApp (){
        String resultS = _result.toString();

  }
 

затем строковые результаты будут выделены серым цветом и не позволят использовать child: Text('$resultS'), их в последнем контейнере. что я делаю не так?

Вот полный код:

 import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  var sum = 25;

  int _result = 0;
  String resultS = _result.toString();

  void callForLoop() {
    print('The sum of ' '$sum' ' with 5 digits');
    for (int z = 1; z <= 9; z  ) {
      for (int y = 1; y <= 9; y  ) {
        for (int x = 1; x <= 9; x  ) {
          for (int w = 1; w <= 9; w  ) {
            for (int v = 1; v <= 9; v  ) {
              if (z   y   x   w   v == sum) {
                if (z < y) {
                  if (y < x) {
                    if (x < w) {
                      if (w < v) {
                        _result = ('$z $y $x $w $v') as int;
                        continue;
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        home: Scaffold(
            body: Center(
                child: Column(
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: <Widget>[
          Container(
              margin: const EdgeInsets.fromLTRB(20, 0, 20, 0),
              child: RaisedButton(
                onPressed: () => callForLoop(),
                child: Text('Call For Loop'),
                textColor: Colors.white,
                color: Colors.lightBlue,
                padding: EdgeInsets.fromLTRB(12, 12, 12, 12),
              )),
          Container(
              margin: const EdgeInsets.fromLTRB(20, 0, 20, 0),
              child: RaisedButton(
                child: Text('$resultS'),
                textColor: Colors.white,
                color: Colors.black87,
                padding: EdgeInsets.fromLTRB(12, 12, 12, 12),
              )),
        ]))));
  }
}
 

Ответ №1:

Как говорится в ошибке, вы не можете этого сделать. Объявляя и используя его одновременно, вы должны это сделать const . Если вы хотите развернуть на уровне класса, сделайте это static так

 static const int _result = 0;
String resultS = _result.toString();

 

внутри метода сборки вам просто нужно сделать это const

   @override
  Widget build(BuildContext context) {
  const int _result = 0;
  String resultS = _result.toString();
 

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

1. Кажется, что в коде все правильно, когда я внес эти изменения, но когда я пытаюсь запустить его, я получаю следующее: «тип» Строка «не является подтипом типа «int» в типовом наборе».

2. затем используйте пробный анализ