Flutter / Dart передает аргумент в массиве?

#flutter #dart

Вопрос:

Итак, я пытаюсь изменить страницу в Flutter, вот мой код:

 class _RootAppState extends State<RootApp> {
  int tabIndex = 0;

  final pages = [
    Start(),
    Quiz(),
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.blueAccent,
      body: getBody(),
    );
  }

  Widget getBody() {
    return pages[tabIndex];
  }
}
 

и я подумал, что создам конструктор для Start() и Quiz() класс для передачи tabIndex аргумента, потому что другим страницам нужно, чтобы это целое число использовалось для другого изменения.

Но передача аргумента в массив выдает ошибку

 The instance member 'tabIndex can’t be accessed in an initializer.
 

Я могу передать аргумент в
body: Start(tabIndex)
Но что, если я захочу сделать это в массиве моих страниц? Возможно ли это или мне следует искать другое решение?

Спасибо

Ответ №1:

Вы должны убедиться, что Start() и Quiz() есть Widget , но, возможно, вам следует внимательнее взглянуть на просмотр страницы.

Ответ №2:

Если вы реорганизуете инициализацию tabIndex и pages должны обрабатываться конструктором, тогда вы должны иметь возможность инициализировать pages , как описано:

 class RootApp extends StatefulWidget {
  const RootApp({Key? key}) : super(key: key);

  @override
  _RootAppState createState() => _RootAppState();
}

class _RootAppState extends State<RootApp> {
  _RootAppState({this.tabIndex = 0})
      : pages = [
          Start(tabIndex: tabIndex),
          Quiz(tabIndex: tabIndex),
        ];

  int tabIndex;

  final List<Widget> pages;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.blueAccent,
      body: getBody(),
    );
  }

  Widget getBody() {
    return pages[tabIndex];
  }
}

class Start extends StatelessWidget {
  const Start({Key? key, required this.tabIndex}) : super(key: key);
  final int tabIndex;
  @override
  Widget build(BuildContext context) => Text('Start Placeholder $tabIndex');
}

class Quiz extends StatelessWidget {
  const Quiz({Key? key, required this.tabIndex}) : super(key: key);
  final int tabIndex;
  @override
  Widget build(BuildContext context) => Text('Quiz Placeholder $tabIndex');
}