Android 颤振错误:在AnimationController.dispose()之后调用AnimationController.stop()
我想将自定义主题应用于我的应用程序。因此,在创建“MaterialApp”小部件之前,我检查SharedReferences中的当前主题。为此,我用了一个未来的建筑商Android 颤振错误:在AnimationController.dispose()之后调用AnimationController.stop(),android,flutter,Android,Flutter,我想将自定义主题应用于我的应用程序。因此,在创建“MaterialApp”小部件之前,我检查SharedReferences中的当前主题。为此,我用了一个未来的建筑商 class MyApp extends StatelessWidget { ThemeData myTheme; bool isDark; @override Widget build(BuildContext context) { isDark=false; return FutureBuild
class MyApp extends StatelessWidget {
ThemeData myTheme;
bool isDark;
@override
Widget build(BuildContext context) {
isDark=false;
return FutureBuilder(
future: getTheme(),
builder: (context,snapshot) {
if (snapshot.hasData) {
if(isDark)
myTheme=Constants.darkTheme;
else
myTheme=Constants.lightTheme;
return MaterialApp(
title: 'Sample app',
debugShowCheckedModeBanner: false,
theme: myTheme,
home: HomePage(),
);
}
return MaterialApp(
title: 'Sample app',
debugShowCheckedModeBanner: false,
home: Scaffold(body: Center(child: Text('Loading')),),
);
},
);
}
Future<bool> getTheme() async {
SharedPreferences sharedPreferences = await SharedPreferences.getInstance() ;
isDark=sharedPreferences.getBool("isDark");
if(isDark==null) {
isDark=false;
sharedPreferences.setBool("isDark", isDark);
}
return isDark;
}
}
类MyApp扩展了无状态小部件{
梅多玛神话;
布尔伊斯达克;
@凌驾
小部件构建(构建上下文){
isDark=假;
回归未来建设者(
future:getTheme(),
生成器:(上下文,快照){
if(snapshot.hasData){
if(isDark)
myTheme=常数.darkTheme;
其他的
myTheme=Constants.lightTheme;
返回材料PP(
标题:“示例应用程序”,
debugShowCheckedModeBanner:false,
主题:神话,
主页:主页(),
);
}
返回材料PP(
标题:“示例应用程序”,
debugShowCheckedModeBanner:false,
主页:脚手架(主体:中心(子对象:文本(“加载”),),
);
},
);
}
Future getTheme()异步{
SharedReferences SharedReferences=等待SharedReferences.getInstance();
isDark=SharedReferences.getBool(“isDark”);
如果(isDark==null){
isDark=假;
seSharedReferences.setBool(“isDark”,isDark);
}
返回isDark;
}
}
除了这个错误,一切正常。此外,应用程序不会崩溃
E/flutter ( 5809): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: 'package:flutter/src/animation/animation_controller.dart': Failed assertion: line 741 pos 7: '_ticker != null': AnimationController.stop() called after AnimationController.dispose()
E/flutter ( 5809): AnimationController methods should not be used after calling dispose.
E/flutter ( 5809): #0 _AssertionError._doThrowNew (dart:core-patch/errors_patch.dart:46:39)
E/flutter ( 5809): #1 _AssertionError._throwNew (dart:core-patch/errors_patch.dart:36:5)
E/flutter ( 5809): #2 AnimationController.stop (package:flutter/src/animation/animation_controller.dart:741:7)
E/flutter ( 5809): #3 AnimationController.repeat (package:flutter/src/animation/animation_controller.dart:637:5)
E/flutter ( 5809): #4 BallPulseIndicator.startAnim (package:loading/indicator/ball_pulse_indicator.dart:48:16)
E/flutter ( 5809): #5 BallPulseIndicator.startAnims.<anonymous closure> (package:loading/indicator/ball_pulse_indicator.dart:55:9)
E/flutter ( 5809): #6 new Future.delayed.<anonymous closure> (dart:async/future.dart:326:39)
E/flutter ( 5809): #7 _rootRun (dart:async/zone.dart:1182:47)
E/flutter ( 5809): #8 _CustomZone.run (dart:async/zone.dart:1093:19)
E/flutter ( 5809): #9 _CustomZone.runGuarded (dart:async/zone.dart:997:7)
E/flutter ( 5809): #10 _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:1037:23)
E/flutter ( 5809): #11 _rootRun (dart:async/zone.dart:1190:13)
E/flutter ( 5809): #12 _CustomZone.run (dart:async/zone.dart:1093:19)
E/flutter ( 5809): #13 _CustomZone.bindCallback.<anonymous closure> (dart:async/zone.dart:1021:23)
E/flutter ( 5809): #14 Timer._createTimer.<anonymous closure> (dart:async-patch/timer_patch.dart:18:15)
E/flutter ( 5809): #15 _Timer._runTimers (dart:isolate-patch/timer_impl.dart:397:19)
E/flutter ( 5809): #16 _Timer._handleMessage (dart:isolate-patch/timer_impl.dart:428:5)
E/flutter ( 5809): #17 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:168:12)
E/flatter(5809):[ERROR:flatter/lib/ui/ui\u dart\u state.cc(177)]未处理的异常:“package:flatter/src/animation/animation\u controller.dart”:失败的断言:第741行位置7:”\u ticker!=null”:在AnimationController.dispose()之后调用AnimationController.stop()
E/flatter(5809):调用dispose后不应使用AnimationController方法。
E/颤振(5809):#0 _断言错误。_doThrowNew(飞镖:核心补丁/错误补丁。飞镖:46:39)
E/颤振(5809):#1(飞镖:核心补丁/错误补丁。飞镖:36:5)
E/flatter(5809):#2 AnimationController.stop(包:flatter/src/animation/animation_controller.dart:741:7)
E/flatter(5809):#3 AnimationController.repeat(包:flatter/src/animation/animation_controller.dart:637:5)
E/颤振(5809):#4个球脉冲指示器.startAnim(包装:装载/指示器/球脉冲指示器。省道:48:16)
E/颤振(5809):#5个球脉冲指示器。(包装:装载/指示器/球脉冲指示器。省道:55:9)
E/颤振(5809):#6新未来。延迟。(dart:async/future.dart:326:39)
E/flatter(5809):#7 rootRun(dart:async/zone.dart:1182:47)
E/flatter(5809):#8_CustomZone.run(dart:async/zone.dart:1093:19)
E/flatter(5809):#9 _CustomZone.runguard(dart:async/zone.dart:997:7)
E/颤振(5809):#10#u CustomZone.bindCallbackguared。(dart:async/zone.dart:1037:23)
E/flatter(5809):#11 rootRun(dart:async/zone.dart:1190:13)
E/flatter(5809):#12 _CustomZone.run(dart:async/zone.dart:1093:19)
E/颤振(5809):#13_CustomZone.bind。(dart:async/zone.dart:1021:23)
E/颤振(5809):14定时器。(dart:async patch/timer_patch.dart:18:15)
E/颤振(5809):#15 _计时器。_运行计时器(dart:isolate patch/Timer_impl.dart:397:19)
E/颤振(5809):#16 _定时器。_handleMessage(省道:隔离补丁/定时器_impl.省道:428:5)
E/颤振(5809):#17(RawReceivePortImpl.)(dart:隔离补丁/隔离补丁。dart:168:12)
如何修复此错误?此错误来自于非常过时的插件。我建议改为使用软件包。我在您的代码中没有看到任何动画控制器。我没有使用任何动画控制器,但仍然收到此错误。我不知道为什么。我之前没有收到它们,因为我没有实现future builder。请显示您的pubspec.yml
version:1.0.0+1环境:sdk:“>=2.7.0