Dart 颤振屏幕状态处理方法异常

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

当我试图在Flatter中从一个屏幕导航到另一个屏幕时,我得到一个异常,说明我正在更改的屏幕状态在其
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.