Неверный аргумент Flutter: превышен максимальный размер стека вызовов

#flutter #dart #widget

Вопрос:

У меня есть исключение, которое я не понимаю в своем приложении Flutter. Вот код :

главная.дротик:

 void main() {
  runApp(MyApp());
}
class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Qatar22',
      debugShowCheckedModeBanner: false,
      theme: new ThemeData(
          accentColor: Colors.black,
          indicatorColor: Colors.black,
          highlightColor: Colors.black,
          bottomAppBarColor: Colors.black,
          primaryColor: Color(0xFFffffff),
          primaryColorDark: Color(0xffffff)),
      home: SplashScreen(),
      routes: <String, WidgetBuilder>{
        SPLASH_SCREEN: (BuildContext context) => SplashScreen(),
        FEED_SCREEN: (BuildContext context) => FeedScreen(),
        PROGRAM_SCREEN: (BuildContext context) => ProgramScreen(),
      },
    );
  }
}
 

Экран подачи:

 class FeedScreen extends StatefulWidget {
  @override
  State<FeedScreen> createState() => _FeedScreenState();
}

/// This is the private State class that goes with MyStatefulWidget.
class _FeedScreenState extends State<FeedScreen> {
  int _selectedIndex = 0;
  final List<Widget> _widgetOptions = [FeedScreen(), ProgramScreen()];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Gallery'),
      ),
      body: Center(
        child: _widgetOptions.elementAt(_selectedIndex),
      ),
      bottomNavigationBar: BottomNavigationBar(
          items: [
            BottomNavigationBarItem(
              icon: Icon(CupertinoIcons.news_solid),
              label: 'Feed',
            ),
            BottomNavigationBarItem(
              icon: Icon(CupertinoIcons.sportscourt_fill),
              label: 'Program',
            )
          ],
          currentIndex: _selectedIndex,
          selectedItemColor: Colors.red.shade900,
          onTap: (index) {
            switch (index) {
              case 0:
                Navigator.pushNamed(context, FEED_SCREEN);
                break;
              case 1:
                Navigator.pushNamed(context, PROGRAM_SCREEN);
                break;
            }
          }),
    );
  }
}
 

и я получаю это исключение:

При создании NotificationListener<LayoutChangedNotification>была вызвана следующая ошибка JSRangeError:<LayoutChangedNotification>
Недопустимый аргумент: Превышен максимальный размер стека вызовов

Соответствующий виджет, вызывающий ошибки, был:
Файл Scaffold:///главная страница/проект/библиотека/экраны/лента/лента-экран.dart:21:12

Не могли бы вы помочь мне, пожалуйста, так как я новичок в Флаттере.

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

1. Пожалуйста, добавьте дополнительную информацию о сообщении об ошибке, приведенного выше кода недостаточно, чтобы узнать, где возникает проблема.

2. я добавил больше кода

3. Спасибо, теперь все ясно. Смогли ли вы решить эту проблему?

4. Ты получил свой ответ?

Ответ №1:

У вас есть эта ошибка, потому что существует бесконечный цикл с FeedScreen

Ответ №2:

Кажется, вы позвонили FeedScreen внутрь себя на этой линии:

 final List<Widget> _widgetOptions = [FeedScreen(), ProgramScreen()];
 

Это может быть одной из причин, по которой возникла эта проблема.
Пожалуйста, не используйте FeedScreen() внутри себя, а вместо этого используйте другие классы.