当屏幕关闭我的代码时,我想处理数据流 main.dart
import 'package:flutter/material.dart';
import 'first.dart';
void main() {
runApp(MaterialApp(
home: First(),
));
}
FirstScreen.dart
import 'package:flutter/material.dart';
import 'package:flutter_app/scond.dart';
class First extends StatefulWidget {
@override
_FirstState createState() => _FirstState();
}
class _FirstState extends State<First> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: Center(
child: InkWell(
onTap: () {
Navigator.of(context).push(MaterialPageRoute(
builder: (context) => Second(),
));
},
child: Text("Next Page !")),
),
);
}
}
secondScreen.dart
import 'dart:async';
import 'package:flutter/material.dart';
class Second extends StatefulWidget {
@override
_SecondState createState() => _SecondState();
}
class _SecondState extends State<Second> {
@override
void initState() {
super.initState();
zzzzzz();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
);
}
void zzzzzz() async {
for (int i = 0; i < 100; i++) {
await Future.delayed(Duration(milliseconds: 150));
print("zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz $i");
}
}
}
如果我从第二个屏幕返回,这个 for 循环需要 20 scend 才能完成,for 循环仍然继续! 处理屏幕后如何阻止未来等待的for循环继续?
答案 0 :(得分:1)
import 'dart:async';
import 'package:flutter/material.dart';
class Second extends StatefulWidget {
@override
_SecondState createState() => _SecondState();
}
class _SecondState extends State<Second> {
StreamController<String> streamController = StreamController();
@override
void initState() {
super.initState();
streamController.stream.listen((messages) => print(messages));
startAddMessages();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
);
}
@override
void dispose() {
super.dispose();
streamController.close();
}
void startAddMessages() async {
for (int i = 0; i < 100; i++) {
await Future.delayed(Duration(milliseconds: 150));
try {
streamController
.add("zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz $i");
} catch (err) {
print("Error while add is ${err.toString()}");
break;
}
print("item Added $i");
}
}
}