我试着使用区块创建列表视图。
这是我的集体课
MainPageList模型看起来像这个
类MainPageList {列表项;列表图标; MainPageList(this.items,this.icons);}
class MainPageBloc extends BlocBase {
MainPageList _mainPageList;
StreamController<MainPageList> _mainPageController =
StreamController<MainPageList>.broadcast();
StreamSink<MainPageList> get _inMainPage => _mainPageController.sink;
Stream<MainPageList> get outMainPage => _mainPageController.stream;
MainPageBloc(context) {
init(context);
}
void init(BuildContext context) async {
_mainPageList.items = [
AppTranslations.of(context).text("submit_request"),
AppTranslations.of(context).text("signout")
];
_mainPageList.icons = [
"lib/assets/images/submit_req.svg",
"lib/assets/images/sign_out.svg"
];
_inMainPage.add(_mainPageList);
}
@override
void dispose() {
_mainPageController.close();
}
}在小部件类中,我试图调用bloc。
@override
Widget build(BuildContext context) {
final MainPageBloc mainBloc = BlocProvider.of<MainPageBloc>(context);
return WillPopScope(
onWillPop: () async => false,
child: Scaffold(
body: StreamBuilder<MainPageList>(分配流,
stream: mainBloc.outMainPage,
builder: (context, snapshot) {
Container(
child: Scaffold(
body: Container(
child: ListView.builder(
scrollDirection: Axis.vertical,
shrinkWrap: true,
itemCount: snapshot.data.items.length,
itemBuilder: (BuildContext context, int index) {
return Card(
child: Container(
child: ListTile(
contentPadding: EdgeInsets.symmetric(
horizontal: 5.0, vertical: 0.0),分配给图标
leading: Container(
child: SvgPicture.asset(
snapshot.data.icons[index],
width: 40.0,
color: const Color(0xFFE27023),
),
),分配给项目
title: Text(
snapshot.data.items[index],
style: TextStyle(
color: Colors.black,
fontWeight: FontWeight.bold),
),发布于 2019-07-03 09:34:24
您没有提供足够的代码来了解构建方法的上下文,但是您似乎使用的是BlocProvider。您应该知道,要在小部件的上下文中使用这个组,您必须这样称呼它:
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'My App',
home: BlocProvider<MyBloc>(
bloc: MyBloc(),
child: MyHome(),
),
);
}
}
class MyHome extends StatelessWidget{
@override
Widget build(BuildContext context) {
myBloc = BlocProvider.of<MyBloc>(context);
return Container();
}
}正如你所看到的,我的应用程序的主页不是直接的MyHome,而是一个BlocProvider小部件。
https://stackoverflow.com/questions/56865638
复制相似问题