簡體   English   中英

dart 沒有看到同一個文件中聲明的變量

[英]dart does not see the variable declared in the same file

Dart 沒有看到在同一文件中聲明的變量_movies下面是小部件的代碼,它給出了唯一的錯誤:未定義的名稱“_movies”。 嘗試將名稱更正為已定義的名稱,或定義名稱。dart

import 'package:flutter/material.dart';
import '../../resources/resources.dart';

class Movie {
  final String imageName;
  final String title;
  final String time;
  final String description;

  Movie({
    required this.imageName,
    required this.title,
    required this.time,
    required this.description,
  });
}

class MovieListWidget extends StatefulWidget {
  final _movies = [
    Movie(
        imageName: AppImages.moviePlacholder,
        title: 'TOP GUN',
        time: 'April 7, 2021',
        description:
            'Fhjshfkhfdkhskjhkjsdhfkjsdhfjhsdfkjhsdkjfhskjdhfkjsdhfjsdhfkjhsdfjhsdkjfhskhdfksdhfkjdshfkjhsdkjfhskjdfhskjdhfkjshdfkjhsdkjfhskjdfhksjhfjdhgfkjshgkjdhjghfjksdhkjgfdhgjkhdgkjhdskghsfjghsdfhgairhe')
  ];

  MovieListWidget({super.key});

  @override
  State<MovieListWidget> createState() => _MovieListWidgetState();
}

class _MovieListWidgetState extends State<MovieListWidget> {
  @override
  Widget build(BuildContext context) {
    return ListView.builder(
        itemCount: _movies,
        itemExtent: 163,
        itemBuilder: (BuildContext context, int index) {
          return Padding(
            padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 10),
            child: Stack(
              children: [
                Container(
                  decoration: BoxDecoration(
                      color: Colors.white,
                      borderRadius: const BorderRadius.all(Radius.circular(10)),
                      border: Border.all(color: Colors.black.withOpacity(0.2)),
                      boxShadow: [
                        BoxShadow(
                            color: Colors.black.withOpacity(0.1),
                            blurRadius: 8,
                            offset: const Offset(2, 2)),
                      ]),
                  clipBehavior: Clip.hardEdge,
                  child: Row(
                    children: [
                      const Image(image: AssetImage(AppImages.moviePlacholder)),
                      Expanded(
                        child: Padding(
                          padding: const EdgeInsets.symmetric(horizontal: 20),
                          child: Column(
                            crossAxisAlignment: CrossAxisAlignment.start,
                            children: const [
                              SizedBox(height: 20),
                              Text(
                                'Top Gun',
                                maxLines: 1,
                                overflow: TextOverflow.ellipsis,
                                style: TextStyle(fontWeight: FontWeight.bold),
                              ),
                              SizedBox(height: 5),
                              Text(
                                'April 7, 2021',
                                maxLines: 1,
                                overflow: TextOverflow.ellipsis,
                                style: TextStyle(color: Colors.grey),
                              ),
                              SizedBox(height: 20),
                              Text(
                                'Fhjshfkhfdkhskjhkjsdhfkjsdhfjhsdfkjhsdkjfhskjdhfkjsdhfjsdhfkjhsdfjhsdkjfhskhdfksdhfkjdshfkjhsdkjfhskjdfhskjdhfkjshdfkjhsdkjfhskjdfhksjhfjdhgfkjshgkjdhjghfjksdhkjgfdhgjkhdgkjhdskghsfjghsdfhgairhe;uhufghrhglkzhglkzhlk/hzionvonrb;jhkjhfjkshdfjhjhsjhdfkjshdfjhdjfhskfskd;ljgkjfslkfhklsdhkjvhkjbgnivbfjdhdujfkxjhfjilzxhfjklxhflkjhznriouvboiurzb;ogjoijzgoizhdfoghzoikjshfkjshdfjshfshdkj',
                                maxLines: 2,
                                overflow: TextOverflow.ellipsis,
                              ),
                            ],
                          ),
                        ),
                      )
                    ],
                  ),
                ),
                Material(
                  color: Colors.transparent,
                  child: InkWell(
                    borderRadius: BorderRadius.circular(10),
                    onTap: () {
                      debugPrint('URURURURU');
                    },
                  ),
                )
              ],
            ),
          );
        });
  }
}

我不明白為什么會這樣,也許是由於語言或框架的新規則

_movies是 widget class 屬性,要在 state class 上訪問它,需要使用widget.variableName

   return ListView.builder(
        itemCount: widget._movies.length,

像這樣訪問它,

widget.movies

因為它在MovieListWidget里面。

如果它在_MovieListWidgetState內,您可以正常訪問movies

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM