Flutter 如何在关闭颤振应用程序时处理流?
我的颤振应用程序中有一个流,它持续检测网络变化。它在主功能中定义Flutter 如何在关闭颤振应用程序时处理流?,flutter,Flutter,我的颤振应用程序中有一个流,它持续检测网络变化。它在主功能中定义 Map _source = {ConnectivityResult.none: false}; CurrentConnectivity _connectivity = CurrentConnectivity.instance; void main() async{ WidgetsFlutterBinding.ensureInitialized(); await init(); HttpOverrides.global
Map _source = {ConnectivityResult.none: false};
CurrentConnectivity _connectivity = CurrentConnectivity.instance;
void main() async{
WidgetsFlutterBinding.ensureInitialized();
await init();
HttpOverrides.global = new MyHttpOverrides();
_connectivity.initialise();
_connectivity.myStream.listen((source) {
_source=source;
}, onError: (err) {
print(err);
}, cancelOnError: false);
runApp(AppWidget());
_connectivity.disposeStream();
}
但是当我导航时,我得到了这个例外
例外情况
E/flutter ( 6822): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: Bad state: Cannot add new events after calling close
E/flutter ( 6822): #0 _BroadcastStreamController.add (dart:async/broadcast_stream_controller.dart:251:24)
E/flutter ( 6822): #1 _StreamSinkWrapper.add (dart:async/stream_controller.dart:873:13)
E/flutter ( 6822): #2 CurrentConnectivity._checkStatus (package:iris_flutter/core/network/current_connectivity.dart:61:21)
E/flutter ( 6822): #3 _rootRunUnary (dart:async/zone.dart:1192:38)
E/flutter ( 6822): #4 _CustomZone.runUnary (dart:async/zone.dart:1085:19)
E/flutter ( 6822): #5 _FutureListener.handleValue (dart:async/future_impl.dart:141:18)
E/flutter ( 6822): #6 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:682:45)
E/flutter ( 6822): #7 Future._propagateToListeners (dart:async/future_impl.dart:711:32)
E/flutter ( 6822): #8 Future._completeWithValue (dart:async/future_impl.dart:526:5)
E/flutter ( 6822): #9 _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:36:15)
E/flutter ( 6822): #10 _completeOnAsyncReturn (dart:async-patch/async_patch.dart:298:13)
E/flutter ( 6822): #11 SendOfflineRequests.call (package:iris_flutter/features/faculty/attendance/domain/usecases/offline_requests/send_offline_requests.dart)
E/flutter ( 6822): #12 _rootRunUnary (dart:async/zone.dart:1192:38)
E/flutter ( 6822): #13 _CustomZone.runUnary (dart:async/zone.dart:1085:19)
E/flutter ( 6822): #14 _FutureListener.handleValue (dart:async/future_impl.dart:141:18)
E/flutter ( 6822): #15 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:682:45)
E/flutter ( 6822): #16 Future._propagateToListeners (dart:async/future_impl.dart:711:32)
E/flutter ( 6822): #17 Future._completeWithValue (dart:async/future_impl.dart:526:5)
E/flutter ( 6822): #18 _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:36:15)
E/flutter ( 6822): #19 _completeOnAsyncReturn (dart:async-patch/async_patch.dart:298:13)
E/flutter ( 6822): #20 OfflineClassesRepositoryImpl.sendOfflineRequests (package:iris_flutter/features/faculty/attendance/data/repositories/offline_requests_repository_impl.dart)
E/flutter ( 6822): #21 _rootRunUnary (dart:async/zone.dart:1192:38)
E/flutter ( 6822): #22 _CustomZone.runUnary (dart:async/zone.dart:1085:19)
E/flutter ( 6822): #23 _FutureListener.handleValue (dart:async/future_impl.dart:141:18)
E/flutter ( 6822): #24 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:682:45)
E/flutter ( 6822): #25 Future._propagateToListeners (dart:async/future_impl.dart:711:32)
E/flutter ( 6822): #26 Future._completeWithValue (dart:async/future_impl.dart:526:5)
E/flutter ( 6822): #27 _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:36:15)
E/flutter ( 6822): #28 _completeOnAsyncReturn (dart:async-patch/async_patch.dart:298:13)
E/flutter ( 6822): #29 StudentDetailsFacultyLocalDataSourceImpl.deleteAllMarkedRecords (package:iris_flutter/features/faculty/attendance/data/datasources/students/student_details_faculty_local_data_source.dart)
E/flutter ( 6822): #30 _rootRunUnary (dart:async/zone.dart:1192:38)
E/flutter ( 6822): #31 _CustomZone.runUnary (dart:async/zone.dart:1085:19)
E/flutter ( 6822): #32 _FutureListener.handleValue (dart:async/future_impl.dart:141:18)
E/flutter ( 6822): #33 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:682:45)
E/flutter ( 6822): #34 Future._propagateToListeners (dart:async/future_impl.dart:711:32)
E/flutter ( 6822): #35 Future._completeWithValue (dart:async/future_impl.dart:526:5)
E/flutter ( 6822): #36 _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:36:15)
E/flutter ( 6822): #37 _completeOnAsyncReturn (dart:async-patch/async_patch.dart:298:13)
E/flutter ( 6822): #38 LocalStorage.deleteAllStoredMarkings (package:iris_flutter/core/util/local_storage.dart)
E/flutter ( 6822): #39 _rootRunUnary (dart:async/zone.dart:1192:38)
E/flutter ( 6822): #40 _CustomZone.runUnary (dart:async/zone.dart:1085:19)
E/flutter ( 6822): #41 _FutureListener.handleValue (dart:async/future_impl.dart:141:18)
E/flutter ( 6822): #42 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:682:45)
E/flutter ( 6822): #43 Future._propagateToListeners (dart:async/future_impl.dart:711:32)
E/flutter ( 6822): #44 Future._completeWithValue (dart:async/future_impl.dart:526:5)
E/flutter ( 6822): #45 _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:36:15)
E/flutter ( 6822): #46 _completeOnAsyncReturn (dart:async-patch/async_patch.dart:298:13)
E/flutter ( 6822): #47 DeleteStatement.go.<anonymous closure> (package:moor/src/runtime/query_builder/statements/delete.dart)
E/flutter ( 6822): #48 _rootRunUnary (dart:async/zone.dart:1192:38)
E/flutter ( 6822): #49 _
I/Toast ( 6822): Show toast from OpPackageName:com.example.iris_flutter, PackageName:com.example.iris_flutter
E/flatter(6822):[错误:flatter/lib/ui/ui\u dart\u state.cc(157)]未处理的异常:错误状态:调用close后无法添加新事件
E/flatter(6822):#0 BroadcastStreamController.add(dart:async/broadcast_stream_controller.dart:251:24)
E/颤振(6822):#1 _StreamSinkWrapper.add(dart:async/stream_controller.dart:873:13)
电子/颤振(6822):#2电流连通性。_检查状态(包:iris_颤振/核心/网络/电流连通性。dart:61:21)
E/颤振(6822):#3 RootRunnary(dart:async/zone.dart:1192:38)
E/flatter(6822):#4 _CustomZone.runUnary(dart:async/zone.dart:1085:19)
E/flatter(6822):#5 FutureListener.handleValue(dart:async/future_impl.dart:141:18)
E/flatter(6822):#6 Future._-propagateToListeners.handleValueCallback(dart:async/Future_-impl.dart:682:45)
E/flatter(6822):#7未来。#传播给监听器(dart:async/Future\u impl.dart:711:32)
E/颤振(6822):#8未来。_完成值(dart:async/Future_impl.dart:526:5)
E/flatter(6822):#9 AsyncAwaitCompleter.complete(dart:async patch/async patch.dart:36:15)
E/颤振(6822):#10#完成同步返回(dart:async patch/async patch.dart:298:13)
E/flatter(6822):#11 SendOfflineRequests.call(包:iris_flatter/features/faculty/attention/domain/usecases/offline_requests/send_offline_requests.dart)
E/颤振(6822):#12 35;根运行单位(dart:async/zone.dart:1192:38)
E/flatter(6822):#13 _CustomZone.runUnary(dart:async/zone.dart:1085:19)
E/flatter(6822):#14 FutureListener.handleValue(dart:async/future_impl.dart:141:18)
E/flatter(6822):#15 Future._propagateToListeners.handleValueCallback(dart:async/Future_impl.dart:682:45)
E/颤振(6822):#16未来。(dart:async/Future\u impl.dart:711:32)
E/flatter(6822):#17 Future._completewith value(dart:async/Future_impl.dart:526:5)
E/flatter(6822):#18 AsyncAwaitCompleter.complete(dart:async patch/async patch.dart:36:15)
E/颤振(6822):#19完成同步返回(dart:async patch/async patch.dart:298:13)
E/flatter(6822):#20脱机类存储库impl.send脱机请求(包:iris_flatter/features/faculty/attention/data/repositories/offline请求库impl.dart)
E/颤振(6822):#21 35;根运行单位(dart:async/zone.dart:1192:38)
E/flatter(6822):#22 _CustomZone.runUnary(dart:async/zone.dart:1085:19)
E/flatter(6822):#23 FutureListener.handleValue(dart:async/future_impl.dart:141:18)
E/flatter(6822):#24 Future._-propagateToListeners.handleValueCallback(dart:async/Future_-impl.dart:682:45)
E/颤振(6822):#25未来。"传播给监听器(dart:async/Future\u impl.dart:711:32)
E/颤振(6822):#26 Future._completeWithValue(dart:async/Future_impl.dart:526:5)
E/flatter(6822):#27 AsyncAwaitCompleter.complete(dart:async patch/async patch.dart:36:15)
E/颤振(6822):#28完成同步返回(dart:async patch/async patch.dart:298:13)
E/Flatter(6822):#29学生详细信息AcultyLocalDataSourceImpl.deleteAllMarkedRecords(包:iris_Flatter/features/faculty/Attention/data/datasources/students/student_详细信息_faculty_local_数据_source.dart)
E/颤振(6822):#30(dart:async/zone.dart:1192:38)
E/flatter(6822):#31 _CustomZone.runUnary(dart:async/zone.dart:1085:19)
E/flatter(6822):#32 FutureListener.handleValue(dart:async/future_impl.dart:141:18)
E/flatter(6822):#33 Future._-propagateToListeners.handleValueCallback(dart:async/Future_-impl.dart:682:45)
E/颤振(6822):#34未来。(dart:async/Future\u impl.dart:711:32)
E/flatter(6822):#35 Future._completewith value(dart:async/Future_impl.dart:526:5)
E/颤振(6822):#36 AsyncAwaitCompleter.complete(dart:async patch/async patch.dart:36:15)
E/颤振(6822):#37完成同步返回(dart:async patch/async patch.dart:298:13)
E/flatter(6822):#38 LocalStorage.deleteAllStoredMarkings(包:iris_flatter/core/util/local_storage.dart)
E/颤振(6822):#39 RootRunnary(dart:async/zone.dart:1192:38)
E/flatter(6822):#40 _CustomZone.runUnary(dart:async/zone.dart:1085:19)
E/flatter(6822):#41 FutureListener.handleValue(dart:async/future_impl.dart:141:18)
E/flatter(6822):#42 Future._-propagateToListeners.handleValueCallback(dart:async/Future_-impl.dart:682:45)
E/颤振(6822):#43未来。(dart:async/Future\u impl.dart:711:32)
E/flatter(6822):#44 Future._completewith value(dart:async/Future_impl.dart:526:5)
E/flatter(6822):#45 AsyncAwaitCompleter.complete(dart:AsyncPatch/AsyncPatch.dart:36:15)
E/颤振(6822):#46完成同步返回(dart:async patch/async patch.dart:298:13)
E/颤振(6822):#47.go。(包:moor/src/runtime/query\u builder/statements/delete.dart)
E/颤振(6822):#48 RootRunnary(dart:async/zone.dart:1192:38)
E/颤振(6822):#49_
I/Toast(6822):显示来自OpPackageName:com.example.iris_flight的Toast,PackageName:com.example.iris_flight
如果我不处理溪流,它会起作用,但我听说让溪流开着不是一个好的做法。
是否有更好的方法关闭该流,或者是否有必要关闭该流
编辑1
对于一些说我需要使用WidgetsBindingObserver的答案,我想指出我需要在main中初始化流,否则如果我在有状态/无状态小部件中初始化它,会多次检测到连接更改,这会破坏我编写的代码中的一些逻辑
class LifeCycle extends StatefulWidget {
@override
_LifeCycleState createState() => _LifeCycleState();
}
class _LifeCycleState extends State<LifeCycle> with WidgetsBindingObserver {
@override
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
super.didChangeAppLifecycleState(state);
print(state);
if(state==AppLifecycleState.paused){
GlobalClassThatInitialisesStream.disposeConnectivityStream();
}
if(state==AppLifecycleState.resumed){
GlobalClassThatInitialisesStream.initialiseConnectivityStream();
}
}
@override
Widget build(BuildContext context) {
return AppWidget();
}
}
类生命周期扩展了StatefulWidget{
@凌驾
_LifeCycleState createState()=>\u生命周期
@override
void dispose() {
// you dispose your stream here
// or check if that works out _connectivity.dispose();
_connectivity.disposeStream();
super.dispose();
}