invalid_widget_preview_application 진단: @Preview() 적용 대상 규칙

invalid_widget_preview_application 진단: @Preview() 적용 대상 규칙

Dart 분석기가 만들어 내는 invalid_widget_preview_application 진단에 대해 설명해요.

출처: 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');
}

흔한 해결 방법

미리보기로 사용할 전용의 공개된, 정적으로 접근 가능하고, 명시적으로 정의된 생성자, 최상위 함수, 또는 클래스 멤버를 만들어요.

더 알아보기