flutter - Flutter:第一次执行后Bloc不起作用
问题描述
我试图执行 Bloc 不止一次,但我不知道如何处理。
当我单击搜索时,它显示圆形进度指示器,然后显示“Sukces”文本,但是当我第二次单击它时,指示器不显示。
如何解决?
链接到我的应用程序的视频:https ://streamable.com/77jyf1
我的代码:
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:jaki_to_bank/screens/home/bloc/search_bloc.dart';
import 'package:provider/provider.dart';
import 'package:jaki_to_bank/generated/l10n.dart';
import 'package:jaki_to_bank/screens/home/widgets/search_button.dart';
import 'package:jaki_to_bank/screens/home/widgets/search_text_field.dart';
class HomeScreen extends StatefulWidget {
const HomeScreen({Key? key}) : super(key: key);
@override
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
final _formKey = GlobalKey<FormState>();
final SearchBloc _bloc = SearchBloc();
final TextEditingController _bankAccountController = TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(S.current.title),
),
body: Container(
padding: EdgeInsets.all(16.0),
child: Form(
key: _formKey,
child: Column(
children: [
SearchTextField(
controller: _bankAccountController,
validator: (text) {
if (text == null || text.isEmpty) {
return S.current.emptyFieldError;
}
return null;
},
),
SizedBox(height: 16.0),
SearchButton(
onPressed: () {
if (_formKey.currentState!.validate()) {
final validationBloc = context.read<SearchBloc>();
validationBloc.add(GetText(_bankAccountController.text));
}
},
),
BlocBuilder<SearchBloc, SearchState>(
builder: (context, state) {
if (state is SearchInitial) {
return Container();
}
if (state is SearchLoading) {
return CircularProgressIndicator();
}
if (state is SearchFinal) {
return Text('Sukces!');
}
return Container();
},
)
],
),
),
),
);
}
}
part of 'search_bloc.dart';
@immutable
abstract class SearchEvent {}
class GetText extends SearchEvent {
final String bankAccountNumber;
GetText(this.bankAccountNumber);
}
import 'dart:async';
import 'package:bloc/bloc.dart';
import 'package:flutter/material.dart';
import 'package:jaki_to_bank/data/repositories/bank_repository.dart';
import 'package:meta/meta.dart';
import 'package:xml/xml.dart';
part 'search_event.dart';
part 'search_state.dart';
class SearchBloc extends Bloc<SearchEvent, SearchState> {
SearchBloc() : super(SearchInitial());
@override
Stream<SearchState> mapEventToState(
SearchEvent event,
) async* {
if (event is GetText) {
yield SearchLoading();
final String bankAccountNumber = event.bankAccountNumber;
final String bankIdNumber = bankAccountNumber.substring(2, 5);
final BankRepository bankRepo = BankRepository();
final List<String> bankIdsList = <String>[];
final XmlDocument banks = await bankRepo.getParsedXmlText();
final Iterable<XmlElement> bankIds =
banks.findAllElements('NrInstytucji');
bankIds.map((node) => node.text).forEach((element) {
print(element);
});
yield SearchFinal();
}
}
}
part of 'search_bloc.dart';
@immutable
abstract class SearchState {}
class SearchInitial extends SearchState {
SearchInitial();
}
class SearchLoading extends SearchState {
SearchLoading();
}
class SearchFinal extends SearchState {
SearchFinal();
}
解决方案
推荐阅读
- assembly - 汇编中的偏移量代表地址还是位?
- python - 我如何成功地旋转这个 Treaps: Randomized search trees?
- javascript - 无法解析从“src/routes/$layout.svelte”导入“@urql/exchange-graphcache”。文件是否存在?
- websocket - Ubuntu Mosquitto 代理 websocket 不工作
- r - 无法合并数据框
- android - 当设备通过汽车中的 USB 端口连接到 FM 发射器时,GPS 无法工作或更新非常慢
- java - 如何使用 JavaEE 后端呈现前端(ftl)
- node.js - 如何从此 API 获取 JSON 格式的数据并在我的 Reactjs 应用程序中显示
- javascript - Vanilla javascript中是否有在jquery中使用延迟和队列组合的等效实现?
- python - pyautogui.locateCenterOnScreen 不适用于 Python 3.9.4