invalid_widget_preview_application 진단: @Preview() 적용 대상 규칙
invalid_widget_preview_application 진단: @Preview() 적용 대상 규칙
Dart 분석기가 만들어 내는 invalid_widget_preview_application 진단에 대해 설명해요.
본문
@Preview(...) 어노테이션은 공개(public)되고, 정적으로 접근 가능하며, 명시적으로 정의된 생성자와 함수에만 적용할 수 있어요.
설명
분석기는 @Preview(...) 어노테이션이 잘못된 위젯 미리보기 대상에 적용되었을 때 이 진단을 만들어요. 위젯 미리보기는 공개되고, 정적으로 접근 가능하며, 명시적으로 정의된 생성자와 함수에만 적용할 수 있어요.
예시
다음 코드는 _myPrivatePreview가 private이기 때문에 이 진단을 만들어요.
import 'package:flutter/widgets.dart';
import 'package:flutter/widget_previews.dart';
// Invalid application to private top-level function.
@Preview()
// ignore: unused_element
Widget _myPrivatePreview() => Text('Foo');
다음 코드는 myExternalPreview가 external이기 때문에 이 진단을 만들어요.
import 'package:flutter/widgets.dart';
import 'package:flutter/widget_previews.dart';
// Invalid application to an external function.
@Preview()
external Widget myExternalPreview();
다음 코드는 PublicWidget._()가 private이기 때문에 이 진단을 만들어요.
import 'package:flutter/widgets.dart';
import 'package:flutter/widget_previews.dart';
class PublicWidget extends StatelessWidget {
// Invalid application to a private constructor.
@Preview()
const PublicWidget._();
@override
Widget build(BuildContext context) => Text('Foo');
}
다음 코드는 instancePreview가 인스턴스 메서드이기 때문에 이 진단을 만들어요.
import 'package:flutter/widgets.dart';
import 'package:flutter/widget_previews.dart';
class PublicWidget extends StatelessWidget {
const new();
// Invalid application to a instance member.
@Preview()
Widget instancePreview() => PublicWidget();
@override
Widget build(BuildContext context) => Text('Foo');
}
다음 코드는 _PrivateWidget이 private이기 때문에 이 진단을 만들어요.
import 'package:flutter/widgets.dart';
import 'package:flutter/widget_previews.dart';
// ignore: unused_element
class _PrivateWidget extends StatelessWidget {
// Invalid application to a constructor of a private class.
@Preview()
const _PrivateWidget();
@override
Widget build(BuildContext context) => Text('Foo');
}
다음 코드는 _PrivateWidget이 private이기 때문에 이 진단을 만들어요.
import 'package:flutter/widgets.dart';
import 'package:flutter/widget_previews.dart';
// ignore: unused_element
class _PrivateWidget extends StatelessWidget {
const new();
// Invalid application to a static method of a private class.
@Preview()
Widget privateStatic() => _PrivateWidget();
@override
Widget build(BuildContext context) => Text('Foo');
}
다음 코드는 AbstractWidget이 추상 클래스이기 때문에 이 진단을 만들어요.
import 'package:flutter/widgets.dart';
import 'package:flutter/widget_previews.dart';
abstract class AbstractWidget extends StatelessWidget {
// Invalid application to a constructor of an abstract class.
@Preview()
AbstractWidget();
@override
Widget build(BuildContext context) => Text('Foo');
}
흔한 해결 방법
미리보기로 사용할 전용의 공개된, 정적으로 접근 가능하고, 명시적으로 정의된 생성자, 최상위 함수, 또는 클래스 멤버를 만들어요.