큰 파일을 만드는 기능이 있다고
Future<File> makeBigFile() async {
// lots of processing
return File("generated_file.txt");
}
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: makeBigFile(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.hasData && snapshot.data is File) {
return Text("Success!");
} else if (snapshot.connectionState==ConnectionState.done) {
return Text("Error!");
} else {
return CircularProgressIndicator();
}
}
);
}
따라서 빌드가 실행될 때마다 미래도 실행됩니다. 문서는 말한다
미래는 예를 들어 State.initState, State.didUpdateConfig 또는 State.didChangeDependencies 동안 더 일찍 얻어 졌어 야합니다. FutureBuilder를 생성 할 때 State.build 또는 StatelessWidget.build 메서드 호출 중에 생성되지 않아야합니다. Future가 FutureBuilder와 동시에 생성되면 FutureBuilder의 부모가 다시 빌드 될 때마다 비동기 작업이 다시 시작됩니다.
내가 이해하는 것 (문서를 읽고 다시 읽음에도 불구하고별로 많지 않음)이 FutureBuilder
있어야하며 문제없이 여러 번 실행할 수 build()
있어야 future:
하지만 여러 번 실행해서는 안되는 긴 작업이면 어떻게 될까요?
미래를 여러 번 실행하지 않고 지금 수행하는 코드를 어떻게 변경해야합니까?
class BigFileWidget extends StatefulWidget {
@override
_BigFileWidgetState createState() => _BigFileWidgetState();
}
class _BigFileWidgetState extends State<BigFileWidget> {
Future<File> fileFuture;
@override
void initState() {
fileFuture = makeBigFile();
};
Future<File> makeBigFile() async {
// lots of processing
return File("generated_file.txt");
}
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: fileFuture,
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.hasData && snapshot.data is File) {
return Text("Success!");
} else if (snapshot.connectionState==ConnectionState.done) {
return Text("Error!");
} else {
return CircularProgressIndicator();
}
}
);
}
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다