Класс ‘List’ не имеет средства получения экземпляра ‘title’

#flutter #dart

#flutter #dart

Вопрос:

Я создаю приложение в flutter для просмотра аниме с использованием шаблона поставщика.

Однако мне трудно с этим работать.

Ошибка отображается в pages / tabs /search.dart

Я не могу получить доступ к параметру «title», извлекаемому у поставщика.

Я получил эту ошибку: Изображение

Код:

main.dart

 import 'package:anime_go/pages/home.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:anime_go/providers/anime.dart';

void main() {
  runApp(
    EasyLocalization(
        supportedLocales: [Locale('en', 'US')],
        path: 'lib/assets/translations',
        fallbackLocale: Locale('en', 'US'),
        child: AnimeGo()),
  );
}

class AnimeGo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MultiProvider(
      providers: [
        ChangeNotifierProvider(
          create: (context) => AnimeModel()..addAnimeList(),
        )
      ],
      child: MaterialApp(
        localizationsDelegates: context.localizationDelegates,
        supportedLocales: context.supportedLocales,
        locale: context.locale,
        debugShowCheckedModeBanner: false,
        theme: ThemeData(
          primaryColor: Colors.blueGrey[800],
        ),
        title: 'title'.tr(),
        home: HomeScreen(),
      ),
    );
  }
}
  

сервисы/anime_twist.dart

 import 'package:anime_go/models/anime_all.dart';
import 'package:anime_go/.env.dart';
import 'package:http/http.dart' as http;

class AnimeTwistApiService {
  static const baseUrl = 'https://twist.moe/api/anime';

  Future<List<AnimeAll>> getAllAnime() async {
    final http.Response response = await http
        .get(baseUrl, headers: {'x-access-token': EnvironmentVariables.token});

    return animeAllFromJson(response.body);
  }
}
  

поставщики/anime.dart

 import 'package:anime_go/models/anime_all.dart';
import 'package:anime_go/services/anime_twist.dart';
import 'package:flutter/material.dart';

class AnimeModel extends ChangeNotifier {
  final AnimeTwistApiService api = AnimeTwistApiService();

  final List allAnimeList = [];

  void addAnimeList() async {
    final List<AnimeAll> animeList = await api.getAllAnime();

    allAnimeList.add(animeList);
    notifyListeners();
  }
}
  

страницы / вкладки /search.dart

 import 'package:anime_go/providers/anime.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

class SearchTab extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Consumer<AnimeModel>(
      builder: (context, animeList, child) {
        print(animeList.allAnimeList.toString());
        return Column(
          children: [
            for (var anime in animeList.allAnimeList) Text(anime.title) // here is the problem - the error
          ],
        );
      },
    );
  }
}
  

Комментарии:

1. добавьте свою модель AnimeAll

Ответ №1:

Ваш allAnimeList является List<List<AnimeAll>> . Поэтому, когда вы повторяете его в своем for цикле, один anime теперь имеет тип List<AnimeAll> . Этот тип действительно не имеет title свойства.

Я не знаю, что вы хотели. Может быть, вы хотите снова перебрать этот список, а затем использовать свойство title каждого AnimeAll ?

Честно говоря, это довольно сбивает меня с толку, у вас есть список списка чего-то, называемого an …Все (что для меня означало бы, что это также тип коллекции), похоже, вы сами запутались, возможно, пришло время подумать о лучшей структуре и именовании ваших данных.

Комментарии:

1. Я помню, что отвечал на тот же вопрос этим, но он спросил снова, хм.