flutter - 有没有办法将一个有状态小部件的数据更新状态推送到另一个有状态小部件?
问题描述
我一直在努力解决将更新数据从一个小部件推送到另一个小部件的问题。当我有两个有状态小部件并且数据在父有状态小部件中更新但未在子有状态小部件中更新时,会出现此问题。使用 freezed 包会发生错误,但如果没有它也会发生错误。
到目前为止,我还没有找到任何可以解决此问题的方法。
下面是一个例子:
第一个有状态的小部件:
class FirstWidget extends StatefulWidget {
@override
_FirstWidgetState createState() => _FirstWidgetState();
}
class _FirstWidgetState extends State<FirstWidget> {
ItemBloc _itemBloc = getit<ItemBloc>();
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.black,
appBar: AppBar(
elevation: Mquery.width(context, 2.5),
backgroundColor: Colors.black
title: Text(
'First stateful widget',
style: TextStyle(fontSize: 17),
),
centerTitle: true,
),
body: BlocBuilder<ItemsBloc,ItemsState>(
cubit: _itemsBloc,
builder: (BuildContext context,ItemState state) {
return state.when(
initial: () => Container(),
loading: () => Center(child: CustomLoader()),
success: (_items) {
return AnotherStatefulWidget(
items: _items,
...
);
},
);
},
));
},
);
);
}
}
第二个有状态的小部件:
class AnotherStatefulWidget extends StatefulWidget {
final List<String> items;
AnotherStatefulWidget(this.items);
@override
_AnotherStatefulWidgetState createState() => _AnotherStatefulWidgetState();
}
class _AnotherStatefulWidgetState extends State<AnotherStatefulWidget> {
final ScrollController scrollController = ScrollController();
ItemsBloc _itemsBloc = getit<ItemsBloc>();
bool _handleNotification(ScrollNotification notification, List<String> items) {
if (notification is ScrollEndNotification &&
scrollController.position.extentAfter == 0.00) {
_itemsBloc.add(ItemsLoadEvent.loadMoreItems(
categories: items, document: ...));
}
return false;
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.black,
body: Container(
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Container(
width: double.infinity,
height: 280,
child: Padding(
padding: EdgeInsets.only(
right: 8,
),
child: NotificationListener<ScrollNotification>(
onNotification: (_n) =>
_handleNotification(_n, widget.items),
child: DraggableScrollbar.arrows(
alwaysVisibleScrollThumb: true,
controller: scrollController,
child: ListView.builder(
controller: scrollController,
itemCount: widget.items.length,
itemBuilder: (context, index) {
return GestureDetector(
child: Padding(
padding: EdgeInsets.all(16),
child: Align(
alignment: Alignment.center,
child: Text(
widget.items[index],
style: TextStyle(color: Colors.white),
)),
),
);
},
),
),
),
),
)
],
),
),
),
);
}
}
我真的很感激任何帮助!
谢谢你的时间,
- 马特
解决方案
推荐阅读
- javascript - 如何使用 jest 处理单元测试用例中的异步 Rest 错误
- c# - 验证来自 Transnational webhook 的 webhook 帖子签名
- c++ - c++ - 如何在C++中交替排序偶数和奇数?
- flutter - VScode 找不到 `action_sheet.dart`
- android - 查询所有购买和可用产品 - Google Play 结算
- sql - 我需要在 Postgres JSONB 列中的对象字段中附加一组对象
- oop - Raku OO 可以帮助我避免集成层样板吗
- c# - WorkerService 增量内存使用
- javascript - 从头开始创建 _.reduce
- php - for循环检查PHP中是否为空值