#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. Я помню, что отвечал на тот же вопрос этим, но он спросил снова, хм.