构建TabBar时,getter'length'在null时调用

问题描述 投票:0回答:2

首次从我的Flutter应用程序加载TabBar时出现以下错误:

flutter: ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
flutter: The following NoSuchMethodError was thrown building TabBar(dependencies: [_InheritedTheme,
flutter: _LocalizationsScope-[GlobalKey#c29e1], _TabControllerScope], state: _TabBarState#dd10a):
flutter: The getter 'length' was called on null.
flutter: Receiver: null
flutter: Tried calling: length
flutter:
flutter: When the exception was thrown, this was the stack:
flutter: #0      Object.noSuchMethod (dart:core/runtime/libobject_patch.dart:50:5)
flutter: #1      _IndicatorPainter._tabOffsetsEqual 
package:flutter/…/material/tabs.dart:414
flutter: #2      _IndicatorPainter.shouldRepaint 
package:flutter/…/material/tabs.dart:427
flutter: #3      RenderCustomPaint._didUpdatePainter 
package:flutter/…/rendering/custom_paint.dart:433
flutter: #4      RenderCustomPaint.painter= 
package:flutter/…/rendering/custom_paint.dart:398
flutter: #5      CustomPaint.updateRenderObject 
package:flutter/…/widgets/basic.dart:481
flutter: #6      RenderObjectElement.update 
package:flutter/…/widgets/framework.dart:4510
flutter: #7      SingleChildRenderObjectElement.update 
package:flutter/…/widgets/framework.dart:4881
(...)

它对用户来说似乎只持续了几秒钟,然后一切恢复正常,标签控制器正常工作。我试图创建自己的TabController,我仍然得到相同的错误

我的代码:

class HomeScreen extends StatelessWidget {
  HomeScreen();

  @override
  Widget build(BuildContext context) {

    return SafeArea(
      child: DefaultTabController(
        length: 5,
        initialIndex: 0,
        child: Scaffold(
          backgroundColor: Color(0xFF25272b),
          appBar: TabBar(
            tabs: [
              Tab(icon: Icon(Icons.home)),
              Tab(icon: Icon(Icons.settings)),
              Tab(icon: Icon(Icons.media)),
              Tab(icon: Icon(Icons.account_box)),
              Tab(icon: Icon(Icons.notifications)),
            ],
          ),
          body: TabBarView(
            physics: NeverScrollableScrollPhysics(),
            children: [
              Content1(),
              Content2(),
              Content3(),
              Content4(),
              Content5(),
            ],
          ),
        ),
      ),
    );
  }
}

我试着评论TabBar和TabBarView的内容。所以我认为这不是我创建的一些自定义小部件的错误。

关于如何解决这个问题的任何想法?

编辑:我正在使用Redux。我不知道这是否会影响这个问题。这是我的main.dart:

class MainAppState extends State<MainApp> {
  Persistor<AppState> persistor;
  Store<AppState> store;

  void initState() {
    super.initState();

    persistor = Persistor<AppState>(
      storage: FlutterStorage(),
      serializer: JsonSerializer<AppState>(AppState.fromJson),
    );

    store = Store<AppState>(
      appReducer,
      initialState: AppState(),
      middleware  : createStoreMiddleware(
        widget.navigatorKey,
      )
      ..add(persistor.createMiddleware()),
    );

    persistor.load()
      .whenComplete(() => store.dispatch(InitAuth()) );
  }

  @override
  Widget build(BuildContext context) {

    return StoreProvider(
      store: store,
      child: MaterialApp(
        locale: Locale('en'),
        debugShowCheckedModeBanner: false,
        title: 'app',  
        theme: AppTheme.theme,
        navigatorKey: widget.navigatorKey,
        initialRoute: store.state.user == null
          ? LoginScreen.route
          : HomeScreen.route,
        routes: <String, WidgetBuilder> {
          HomeScreen.route  : (context) {
            return StoreBuilder<AppState>(
              builder: (context, store) {
                return HomeScreen();
              },
            );
          },
dart flutter
2个回答
© www.soinside.com 2019 - 2024. All rights reserved.