인프런 커뮤니티 질문&답변

강병철님의 프로필 이미지
강병철

작성한 질문수

Flutter + Firebase로 넷플릭스 UI 클론 코딩하기 [무작정 플러터]

홈 화면에 이미지 캐로셀 슬라이더 위젯 추가하기

({this.movies}); 에서 movies가 에러나는 이유를 모르겠습니다 ㅠㅠ

작성

·

746

1

이게 에러나서 그런지

movies;

images;

likes;

_currentKeyword; 얘네도 다 에러나네요.. 아시는분 댓글좀요 !!

List<Moviemovies;
List<Widgetimages;
List<Stringkeywords;
List<boollikes;
int _currentPage = 0;
String _currentKeyword;

답변 10

3

아마도 이런 에러가 나타날 겁니다.

Non-nullable instance field 'movies' must be initialized.
Try adding an initializer expression, or a generative constructor that initializes it, or mark it 'late'.
dart(not_initialized_non_nullable_instance_field)
List<Movie> movies

이는 이번에 플러터가 nullable 정책을 바꿔서 일어난 것으로

late List<Movie> movies;

이렇게 변경하면 됩니다.

1

initState 부분까지 입니다. 플러터가 null 값을 신경 많이 쓰네요 참고 바랍니다

import 'package:flutter/material.dart';
import 'package:fluuterandfirebase/model/model_movie.dart';
class CarouselImage extends StatefulWidget {

  final List <Movie> ? movies;
  CarouselImage({this.movies});
   _CarouselImageState createState() => _CarouselImageState();

}

class _CarouselImageState extends State<CarouselImage> {
  List<Movie> ? movies;
  List<Widget> ? images;
  List<String> ? keywords;
  List<bool> ? likes;
  int _currenetPage =0;
  String ? _currentKeyword;
 
  @override

  void initState() {

    super.initState();

    movies = widget.movies;
    images = movies?.map((e) => Image.asset(e.poster)).toList();
    keywords = movies?.map((e) => e.keyword).toList();
    likes = movies?.map((e) => e.like).toList();
    _currentKeyword = keywords![0];

}

0

environment:

  sdk: ">=2.11.0 <3.0.0"

 

로 sdk 버전을 낮춰서 해결했네요

0

이렇게 사용하시면 됩니다.

 

class CarouselImage extends StatefulWidget {
  final List<Movie> movies;
  CarouselImage({required this.movies});
  _CarouselImageState createState() => _CarouselImageState();
}

0

SDK 버전 낮춰서 null safety를 꺼도 됩니다.

아니면 {}를 없애면 됩니다. 

0

final List<Movie> movies; 이부분을

final dynamic movies 로 바꾸면 오류없이 잘됩니다^^

{this.movies} nullable 로 바뀌어요

나머지는 late 붙이면 됩니다

0

저도 잘 모르지만 null safety 때문이지 않나요? 저는 

List<Movie>? movies; 

List<Widget>? images;

이런식으로 값이 아직 안들어와있는 상태에서는 ? 이걸로 해주시거나

앞에 late 를 붙여주시면 될거같슴다.

this.movie또한 

final List<Movie>? movies; 로 해주면 @requ를 하지않아도 에러는 사라집니다.

0

이렇게해도 this.movies 에러는 안잡히지 않나요? 

0

저도요 ㅠ

0

저도 그런데 어떻게 해결해야하죠 뜨힉

강병철님의 프로필 이미지
강병철

작성한 질문수

질문하기