아래에 예제에서는 `MyLazyLoadedWidget`은 필요할 때까지 `MyHeavyWidget`의 로딩을 지연하는 위젯입니다. 앱이 시작되면 `MyLazyLoadedWidget`은 `MyHeavyWidget`이 `비동기식으로 로드되는 동안 로딩 표시기를 표시`합니다. 무거운 위젯이 로드되면 화면에 표시됩니다.
이렇게 하면 무거운 위젯이 필요할 때까지 로드를 지연시켜 앱의 초기 시작 시간을 개선하고 메모리 사용량을 줄이는 데 도움이 될 수 있습니다.
예제
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Center(
child: MyLazyLoadedWidget(),
),
),
);
}
}
class MyLazyLoadedWidget extends StatefulWidget {
@override
_MyLazyLoadedWidgetState createState() => _MyLazyLoadedWidgetState();
}
class _MyLazyLoadedWidgetState extends State<MyLazyLoadedWidget> {
bool _isLoading = true;
MyHeavyWidget _heavyWidget;
@override
void initState() {
super.initState();
// Load the heavy widget asynchronously.
_loadHeavyWidget().then((widget) {
setState(() {
_isLoading = false;
_heavyWidget = widget;
});
});
}
@override
Widget build(BuildContext context) {
if (_isLoading) {
// Show a loading indicator while the heavy widget is being loaded.
return CircularProgressIndicator();
} else {
// Show the heavy widget once it's been loaded.
return _heavyWidget;
}
}
Future<MyHeavyWidget> _loadHeavyWidget() async {
// This simulates loading the heavy widget from a remote source.
await Future.delayed(Duration(seconds: 1));
return MyHeavyWidget();
}
}
class MyHeavyWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
// This widget is heavy because it contains a lot of complex layout and graphics.
return Container(
width: 200,
height: 200,
decoration: BoxDecoration(
color: Colors.red,
borderRadius: BorderRadius.circular(10),
),
child: Text('Heavy widget'),
);
}
}
728x90
사업자 정보 표시
레플라 | 홍대기 | 경기도 부천시 부일로 519 화신오피스텔 1404호 | 사업자 등록번호 : 726-04-01977 | TEL : 070-8800-6071 | Mail : support@reafla.co.kr | 통신판매신고번호 : 호 | 사이버몰의 이용약관 바로가기
'Dart > Flutter' 카테고리의 다른 글
[Flutter] 플러터 성능향상을 위한 `flutter_flags` 명령줄 도구 추가하기 (0) | 2022.12.24 |
---|---|
[Flutter] 플러터 성능향상을 위한 `GPU enableSoftwareRendering` 가속하기 (0) | 2022.12.24 |
[Flutter] 플러터 성능향상을 위한 `AutomaticKeepAliveClientMixin` 위젯 캐싱하기 (0) | 2022.12.24 |
[Flutter] 플러터 성능향상을 위한 `RepaintBoundary` 위젯 사용하기 (0) | 2022.12.24 |
[Flutter] 플러터 파이어베이스(Firebase)를 통한 구글(Google) 소셜 로그인 설정하기 (0) | 2022.12.24 |