我尝试使用 bloc 创建列表视图。
这是我的集体课
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),
),