Dart 颤振屏幕状态处理方法异常
当我试图在Flatter中从一个屏幕导航到另一个屏幕时,我得到一个异常,说明我正在更改的屏幕状态在其Dart 颤振屏幕状态处理方法异常,dart,flutter,Dart,Flutter,当我试图在Flatter中从一个屏幕导航到另一个屏幕时,我得到一个异常,说明我正在更改的屏幕状态在其dispose方法中没有调用super.dispose()。但是,被重写的dispose方法显然调用了super.dispose() 随附相关类别和日志。任何帮助都将不胜感激 类别: import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; import 'package:kickit/screen
dispose
方法中没有调用super.dispose()
。但是,被重写的dispose
方法显然调用了super.dispose()
随附相关类别和日志。任何帮助都将不胜感激
类别:
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:kickit/screens/feed_screen.dart';
import 'package:kickit/screens/profile_screen.dart';
import 'package:kickit/screens/talk_screen.dart';
import 'package:kickit/utils/values/internal_strings.dart';
import 'package:kickit/utils/values/strings.dart';
import 'package:kickit/utils/values/values.dart';
/// Main screen that contains three screens within for displaying information.
/// Contains a:
/// - [TalkScreen]
/// - [FeedScreen]
/// - [ProfileScreen]
class MainScreen extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return new _MainScreenState();
}
}
/// Manages the state of [MainScreen].
class _MainScreenState extends State<MainScreen> with ChangeNotifier {
// A PageController to manage which screen is currently shown.
PageController _pageController;
// The current page that is in focus.
// - 0 => ConversationScreen
// - 1 => FeedScreen
// - 2 => ProfileScreen
int _page = 1;
/// Initializes this [MainScreen], setting the initial screen to the
/// [FeedScreen] due to [_page] starting at 1.
@override
void initState() {
super.initState();
_pageController = new PageController(
initialPage: _page,
);
}
@override
Widget build(BuildContext context) {
return new Scaffold(
// key: new ValueKey(InternalStrings.mainScaffoldKey),
appBar: _appBar(),
body: _mainScreens(),
bottomNavigationBar: _bottomBar(),
);
}
/// Gets an [AppBar] that will be shown across all of the screens controlled
/// by this [MainScreen]
AppBar _appBar() {
return new AppBar(
// key: new ValueKey(InternalStrings.mainAppBarKey),
centerTitle: true,
title: new Text(
Strings.title,
style: Theme.of(context).textTheme.title,
),
actions: <Widget>[
new IconButton(
key: new ValueKey(InternalStrings.mainSettingsButtonKey),
icon: new Icon(Icons.settings),
onPressed: () => Navigator
.of(context)
.pushReplacementNamed(InternalStrings.mainScreenRoute),
),
],
);
}
/// Gets a [PageView] storing the screens controlled by this [MainScreen].
PageView _mainScreens() {
return new PageView(
// key: new ValueKey(InternalStrings.mainPageViewKey),
controller: _pageController,
onPageChanged: _onPageChanged,
children: <Widget>[
new Container(
child: new TalkScreen(),
),
new Container(
child: new FeedScreen(),
),
new Container(
child: new ProfileScreen(),
),
],
);
}
/// Gets a [BottomNavigationBar] that will be shown across all of the screens
/// controlled by this [MainScreen]
BottomNavigationBar _bottomBar() {
return new BottomNavigationBar(
// key: new ValueKey(InternalStrings.mainBottomBarKey),
items: [
new BottomNavigationBarItem(
icon: new Icon(Icons.people),
title: new Text(Strings.mainBottomBarTalk),
),
new BottomNavigationBarItem(
icon: new Icon(Icons.list),
title: new Text(Strings.mainBottomBarFeed),
),
new BottomNavigationBarItem(
icon: new Icon(Icons.person),
title: new Text(Strings.mainBottomBarProfile),
),
],
onTap: _onNavigationTap,
currentIndex: _page,
);
}
/// Handles a tap on the bottom navigation bar.
void _onNavigationTap(int page) {
_pageController.animateToPage(
page,
duration: Values.animationShort,
curve: Curves.ease,
);
}
/// Handles a page change and updates the bottom bar.
void _onPageChanged(int page) {
this._pageController.notifyListeners();
setState(() {
this._page = page;
});
}
/// Dispose of the [PageController] when disposed.
@override
void dispose() {
super.dispose();
_pageController.dispose();
}
}
导入“包装:颤振/材料.省道”;
导入“package:flatter/widgets.dart”;
导入“包装:kickit/screens/feed_screen.dart”;
导入“包:kickit/screens/profile_screen.dart”;
导入“包:kickit/screens/talk_screen.dart”;
导入“package:kickit/utils/values/internal_strings.dart”;
导入“package:kickit/utils/values/strings.dart”;
导入“package:kickit/utils/values/values.dart”;
///主屏幕,其中包含三个用于显示信息的屏幕。
///包含一个:
///-[TalkScreen]
///-[FeedScreen]
///-[ProfileScreen]
类MainScreen扩展StatefulWidget{
@凌驾
状态createState(){
返回新的_MainScreenState();
}
}
///管理[主屏幕]的状态。
类_MainScreenState使用ChangeNotifier扩展状态{
//用于管理当前显示的屏幕的页面控制器。
页面控制器_页面控制器;
//焦点所在的当前页面。
//-0=>ConversationScreen
//-1=>FeedScreen
//-2=>ProfileScreen
int_page=1;
///初始化此[主屏幕],将初始屏幕设置为
///[FeedScreen]由于[_page]从1开始。
@凌驾
void initState(){
super.initState();
_pageController=新的pageController(
初始页:_页,
);
}
@凌驾
小部件构建(构建上下文){
归还新脚手架(
//key:newvaluekey(InternalStrings.mainScaffoldKey),
appBar:_appBar(),
正文:_mainScreens(),
bottomNavigationBar:_bottomBar(),
);
}
///获取将在所有受控屏幕上显示的[AppBar]
///通过此[主屏幕]
AppBar_AppBar(){
返回新的AppBar(
//key:newvaluekey(InternalStrings.mainAppBarKey),
标题:对,
标题:新文本(
Strings.title,
样式:Theme.of(context).textTheme.title,
),
行动:[
新图标按钮(
键:新值键(InternalStrings.mainSettingsButtonKey),
图标:新图标(图标.设置),
onPressed:()=>导航器
.of(上下文)
.pushReplacementNamed(InternalStrings.mainScreenRoute),
),
],
);
}
///获取存储此[MainScreen]控制的屏幕的[PageView]。
页面视图_主屏幕(){
返回新的页面视图(
//key:newvaluekey(InternalStrings.mainPageViewKey),
控制器:_pageController,
onPageChanged:_onPageChanged,
儿童:[
新容器(
孩子:新建TalkScreen(),
),
新容器(
子项:新的FeedScreen(),
),
新容器(
子项:新建ProfileScreen(),
),
],
);
}
///获取将在所有屏幕上显示的[BottomNavigationBar]
///由此[主屏幕]控制
BottomNavigationBar_bottomBar(){
返回新的底部导航栏(
//key:newvaluekey(InternalStrings.mainBottomBarKey),
项目:[
新海底导航气压计(
图标:新图标(Icons.people),
标题:新文本(Strings.mainBottomBarTalk),
),
新海底导航气压计(
图标:新图标(Icons.list),
标题:新文本(Strings.mainBottomBarFeed),
),
新海底导航气压计(
图标:新图标(Icons.person),
标题:新文本(Strings.mainBottomBarProfile),
),
],
onTap:_onNavigationTap,
当前索引:\第页,
);
}
///处理底部导航栏上的点击。
void _onNavigationTap(整版页){
_pageController.animateToPage(
页
持续时间:Values.animationShort,
曲线:曲线,
);
}
///处理页面更改并更新底部栏。
无效_onPageChanged(整版){
这是。_pageController.notifyListeners();
设置状态(){
本页=第页;
});
}
///处置时处置[PageController]。
@凌驾
无效处置(){
super.dispose();
_pageController.dispose();
}
}
日志:
I/颤振(18130):══╡ WIDGETS库捕获到异常╞═══════════════════════════════════════════════════════════
I/flatter(18130):在完成小部件树时抛出以下断言:
I/flatter(18130):MainScreenState.dispose调用super.dispose失败。
I/flatter(18130):dispose()实现必须始终调用其超类dispose()方法,以确保所有
I/flatter(18130):小部件使用的资源被完全释放。
I/颤振(18130):
I/flatter(18130):当抛出异常时,这是堆栈:
I/flatter(18130):#0 StatefulElement.unmount。(包:flatter/src/widgets/framework.dart:3771)
I/flatter(18130):#1 StatefulElement.unmount(包:flatter/src/widgets/framework.dart:3776)
I/flatter(18130):#2个非活动元素。"卸载(包:flatter/src/widgets/framework.dart:1670)
I/flatter(18130):#3个不活动元素。#卸载。(包:flatter/src/widgets/framework.dart:1668)
I/flatter(18130):#4 ComponentElement.visitChildren(包:flatter/src/widgets/framework.dart:3644)
I/flatter(18130):#5个非活动元素。"卸载(包:flatter/src/widgets/framework.dart:1666)
我/弗利特(18130):#6个不活动元素。#卸载。(包:flatter/src/widgets/framework.dart:1668)
I/flatter(18130):#7 ComponentElement.visitChildren(包:flatter/src/widgets/framew
I/flutter (18130): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
I/flutter (18130): The following assertion was thrown while finalizing the widget tree:
I/flutter (18130): MainScreenState.dispose failed to call super.dispose.
I/flutter (18130): dispose() implementations must always call their superclass dispose() method, to ensure that all the
I/flutter (18130): resources used by the widget are fully released.
I/flutter (18130):
I/flutter (18130): When the exception was thrown, this was the stack:
I/flutter (18130): #0 StatefulElement.unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:3771)
I/flutter (18130): #1 StatefulElement.unmount (package:flutter/src/widgets/framework.dart:3776)
I/flutter (18130): #2 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1670)
I/flutter (18130): #3 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1668)
I/flutter (18130): #4 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3644)
I/flutter (18130): #5 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1666)
I/flutter (18130): #6 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1668)
I/flutter (18130): #7 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3644)
I/flutter (18130): #8 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1666)
I/flutter (18130): #9 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1668)
I/flutter (18130): #10 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4584)
I/flutter (18130): #11 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1666)
I/flutter (18130): #12 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1668)
I/flutter (18130): #13 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4584)
I/flutter (18130): #14 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1666)
I/flutter (18130): #15 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1668)
I/flutter (18130): #16 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4584)
I/flutter (18130): #17 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1666)
I/flutter (18130): #18 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1668)
I/flutter (18130): #19 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3644)
I/flutter (18130): #20 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1666)
I/flutter (18130): #21 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1668)
I/flutter (18130): #22 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3644)
I/flutter (18130): #23 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1666)
I/flutter (18130): #24 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1668)
I/flutter (18130): #25 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4584)
I/flutter (18130): #26 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1666)
I/flutter (18130): #27 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1668)
I/flutter (18130): #28 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4584)
I/flutter (18130): #29 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1666)
I/flutter (18130): #30 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1668)
I/flutter (18130): #31 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3644)
I/flutter (18130): #32 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1666)
I/flutter (18130): #33 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1668)
I/flutter (18130): #34 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4584)
I/flutter (18130): #35 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1666)
I/flutter (18130): #36 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1668)
I/flutter (18130): #37 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3644)
I/flutter (18130): #38 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1666)
I/flutter (18130): #39 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1668)
I/flutter (18130): #40 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3644)
I/flutter (18130): #41 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1666)
I/flutter (18130): #42 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1668)
I/flutter (18130): #43 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3644)
I/flutter (18130): #44 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1666)
I/flutter (18130): #45 ListIterable.forEach (dart:_internal/iterable.dart:39)
I/flutter (18130): #46 _InactiveElements._unmountAll (package:flutter/src/widgets/framework.dart:1679)
I/flutter (18130): #47 BuildOwner.finalizeTree.<anonymous closure> (package:flutter/src/widgets/framework.dart:2296)
I/flutter (18130): #48 BuildOwner.lockState (package:flutter/src/widgets/framework.dart:2128)
I/flutter (18130): #49 BuildOwner.finalizeTree (package:flutter/src/widgets/framework.dart:2295)
I/flutter (18130): #50 BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&RendererBinding&WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:623)
I/flutter (18130): #51 BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:208)
I/flutter (18130): #52 BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:990)
I/flutter (18130): #53 BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:930)
I/flutter (18130): #54 BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:842)
I/flutter (18130): #55 _invoke (file:///b/build/slave/Linux_Engine/build/src/flutter/lib/ui/hooks.dart:120)
I/flutter (18130): #56 _drawFrame (file:///b/build/slave/Linux_Engine/build/src/flutter/lib/ui/hooks.dart:109)
I/flutter (18130): ════════════════════════════════════════════════════════════════════════════════════════════════════
Application finished.