首次从我的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();
},
);
},