#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');
}