【问题标题】:Class 'List<AnimeAll>' has no instance getter 'title'类 'List<AnimeAll>' 没有实例 getter 'title'
【发布时间】:2020-09-11 11:20:31
【问题描述】:

我正在使用提供者模式构建一个用于观看动漫的应用程序。

但是,我很难使用它。

错误显示在 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);
  }
}

providers/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();
  }
}

pages/tabs/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
          ],
        );
      },
    );
  }
}

【问题讨论】:

  • 添加您的 AnimeAll 模型

标签: flutter dart


【解决方案1】:

您的allAnimeListList&lt;List&lt;AnimeAll&gt;&gt;。因此,当您在for 循环中对其进行迭代时,一个anime 现在是List&lt;AnimeAll&gt; 类型。这种类型确实没有title 属性。

我不知道你想要什么。也许您想再次遍历此列表并然后使用每个AnimeAll的title属性?

说实话,这让我很困惑,你有一个列表,其中包含一个名为 ...All 的列表(这对我来说也表明这是一个集合类型),看来你自己也很困惑,也许是时候考虑更好的数据结构和命名了。

【讨论】:

  • 我记得用这个回答了同样的问题,但他又问了一遍,嗯。
猜你喜欢
  • 2020-10-19
  • 1970-01-01
  • 1970-01-01
  • 2020-12-21
  • 2021-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-04
相关资源
最近更新 更多