【发布时间】:2020-10-24 22:50:29
【问题描述】:
我正在尝试使用 ListView Builder 和 Provider 创建水平滚动卡片。
还有其他方法可以达到同样的效果吗?
它说
══╡ 小部件库发现异常╞═══════════════════════╕═══╕═␕═════════════════ ═════════════════════ 在构建 BookTile(dirty) 时引发了以下 ProviderNotFoundError: 错误:在此 BookTile 小部件上方找不到正确的提供程序
要修复,请:
- 确保 Provider 是此 BookTile 小部件的祖先
- 向 Provider 提供类型
- 向消费者提供类型
- 向 Provider.of() 提供类型
- 始终使用包导入。例如:`import 'package:my_app/my_code.dart';
- 确保使用了正确的
context。
我的代码
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../providers/files.dart';
import 'bookitem.dart';
class BookTile extends StatelessWidget {
@override
Widget build(BuildContext context) {
final booksData = Provider.of<Files>(context);
final books = booksData.items;
return ListView.builder(
scrollDirection: Axis.horizontal,
itemCount: books.length,
itemBuilder: (ctx, i) => ChangeNotifierProvider.value(
value: books[i],
child: BookItem(),
),
);
}
}
class BookItem extends StatelessWidget {
@override
Widget build(BuildContext context) {
final book = Provider.of<File>(context);
return Container(
width: 120,
color: Colors.transparent,
margin: EdgeInsets.only(right: 20),
child: Card(
child: Wrap(
children: <Widget>[
Image.network(book.cover),
Container(
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Text(
'${book.completion} %',
style: TextStyle(
color: Colors.black.withOpacity(0.5), fontSize: 12.4),
),
IconButton(
icon: Icon(
Icons.more_horiz,
size: 14.5,
),
onPressed: null)
],
),
),
],
),
),
);
}
}
【问题讨论】:
-
在哪里声明您在此处提到的文件提供程序 final booksData = Provider.of
(context);
标签: android flutter listview dart android-contentprovider