【发布时间】: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 模型