Как решить проблему с нулевыми значениями в столбце? - PullRequest
0 голосов
/ 07 мая 2020

Это проблема: дочерние элементы столбца не должны содержать никаких нулевых значений, но нулевое значение было найдено в индексе 0

Я думаю, это как-то связано с картой, но я не уверен. Я новичок в программировании с помощью дротика, поэтому будет приветствоваться любая помощь.

А вот код:

import 'package:flutter/material.dart';

void main() => runApp(MaterialApp(
  home: Main(),
));


int counter = 0;

class Main extends StatefulWidget {
  @override
  _MainState createState() => _MainState();
}

class _MainState extends State<Main> {

  static List<String> names = [
    'name1',
    'name2',
  ];
  static List<String> difficulty = [
    'easy',
    'normal',
  ];

  String currentDifficulty = difficulty[counter];

  var count = names.length;

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

      child: Column(
        children: names.map((name) {
          Container(
            child: Column(
              children: <Widget>[
                Text(
                 name
                ),
                Text(
                  'currentDifficulty'
                ),
              ],
            ),
          );
          counter += 1;
        }).toList(),
      ),
    );
  }
}

Ответы [ 2 ]

1 голос
/ 07 мая 2020

Если вы хотите узнать индекс каждого виджета, который вы создаете в функции карты из списка, я бы предложил использовать List.asMap().map((index, string)=> MapEntry(index, widget())).values.toList(), поскольку одна функция карты не позволяет получить индекс

Попробуйте заменив код вашего ребенка на:

names.asMap().map((index, name)=> MapEntry(index, Container(
            child: Column(
              children: <Widget>[
                Text(
                 name
                ),
                Text(
                  difficulty[index]
                ),
              ],
            ),
          ))).values.toList();
0 голосов
/ 07 мая 2020

Вы получаете ошибки, потому что:

1) Вы неправильно получаете доступ к элементам вашего List. Для доступа к элементам в списке используйте метод elementAt

2) В свойстве children вашего Column отсутствует оператор возврата.

3) Вместо использования счетчика для итерации через второй список. Вы можете сопоставить эти два списка с помощью IterableZip.

Проверьте код ниже: он решает ошибки и отлично работает

int counter = 0;

class MyHomePage extends StatelessWidget {
  static List<String> names = [
    'name1',
    'name2',
  ];
  static List<String> difficulty = [
    'easy',
    'normal',
  ];

  // access elements in a list using the elementAt function
  String currentDifficulty = difficulty.elementAt(counter);

  @override
  Widget build(BuildContext context) {
    names.map((e) => print(e));
    return Scaffold(
      body: Center(
        child: Container(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            // map the two lists using IterableZip and passing the two lists
            children: IterableZip([names, difficulty]).map(
              (element) {
                // missing return statement
                return Container(
                  child: Column(
                    children: <Widget>[
                      // access elements of your first list here
                      Text(element[0]),
                      // access elements of your second list here
                      Text(element[1]),
                    ],
                  ),
                );
              },
            ).toList(),
          ),
        ),
      ),
    );
  }
}

OUTPUT

enter image description here

Надеюсь, это поможет.

...