【发布时间】:2021-08-13 18:34:09
【问题描述】:
我想用 bloc 模式创建无限列表,但我的 bloc builder 只工作 1 次。滚动页面后“yield”不起作用,所以 bloc builder 不会构建。新项目来了,但状态没有建立.
deliveries_bloc.dart:
import 'dart:async';
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter_asten_app/data/orders_repository.dart';
import 'package:flutter_asten_app/models/order_list.dart';
import '../../locater.dart';
part 'deliveries_event.dart';
part 'deliveries_state.dart';
class DeliveriesBloc extends Bloc<DeliveriesEvent, DeliveriesState> {
final OrdersRepository ordersRepository = getIt<OrdersRepository>();
DeliveriesBloc() : super(DeliveriesInitial());
List<OrderList> orderss = [];
@override
Stream<DeliveriesState> mapEventToState(
DeliveriesEvent event,
) async* {
if (event is FetchDeliveriesEvent) {
yield DeliveriesLoadingState();
try {
final orders = await ordersRepository.getOrderList(event.page);
print(orders.length);
yield DeliveriesLoadedState(orders: orders);
} catch (_) {
yield DeliveriesErrorState();
}
} else if (event is FetchMoreDeliveriesEvent) {
try {
final orders = await ordersRepository.getMoreOrderList(event.page);
print(orders.length); //this is for check the orders length
yield DeliveriesLoadedState(orders: orders);
} catch (_) {
yield DeliveriesErrorState();
}
}
}
}
您可以在上面看到当我的事件是 FetchMoreDeliveriesEvent 我的订单长度增加但产量 DeliveriesLoadedState(orders: orders);不工作 Deliveries_state.dart:
part of 'deliveries_bloc.dart';
abstract class DeliveriesState extends Equatable {
const DeliveriesState();
}
class DeliveriesInitial extends DeliveriesState {
@override
List<Object> get props => [];
}
class DeliveriesLoadingState extends DeliveriesState {
@override
// TODO: implement props
List<Object> get props => throw UnimplementedError();
}
class DeliveriesLoadedState extends DeliveriesState {
final List<OrderList> orders;
DeliveriesLoadedState({@required this.orders});
@override
// TODO: implement props
List<Object> get props => [orders];
}
class DeliveriesErrorState extends DeliveriesState {
@override
// TODO: implement props
List<Object> get props => throw UnimplementedError();
}
deliveries_event.dart:
part of 'deliveries_bloc.dart';
abstract class DeliveriesEvent extends Equatable {
const DeliveriesEvent();
}
class FetchDeliveriesEvent extends DeliveriesEvent {
final int page;
FetchDeliveriesEvent({@required this.page});
@override
// TODO: implement props
List<Object> get props => [page];
}
class FetchMoreDeliveriesEvent extends DeliveriesEvent {
final int page;
FetchMoreDeliveriesEvent({@required this.page});
@override
// TODO: implement props
List<Object> get props => [page];
}
Main_page部分
Expanded(
child: BlocBuilder<DeliveriesBloc, DeliveriesState>(
bloc: _ordersBloc,
builder: (context, DeliveriesState state) {
if (state is DeliveriesLoadingState) {
return Center(
child: CircularProgressIndicator(),
);
}
if (state is DeliveriesLoadedState) {
return ListView.builder(
controller: _scrollController,
itemCount: state.orders.length,
itemBuilder: (context, index) {
return Card(
elevation: 4,
child: ListTile(
title: Text(state.orders[index].firadi),
subtitle: Text(state.orders[index].sidttr
.toString()),
),
);
});
} else {
return null;
}
},
),
),
【问题讨论】:
-
在 ScrollBar 小部件中插入您的 ListView.builder。检查 -> flutter.dev/docs/development/ui/widgets/scrolling
标签: flutter flutter-bloc