import 'dart:async'; import 'package:bloc/bloc.dart'; import 'package:equatable/equatable.dart'; import 'package:meta/meta.dart'; import 'package:smart_contract_repository/smart_contract_repository.dart'; import 'package:username_generator/username_generator.dart'; part 'hello_event.dart'; part 'hello_state.dart'; class HelloBloc extends Bloc<HelloEvent, HelloState> { HelloBloc({ required SmartContractRepository smartContractRepository, required UsernameGenerator usernameGenerator, }) : _smartContractRepository = smartContractRepository, _usernameGenerator = usernameGenerator, super(const HelloState()) { on<HelloNameRequested>(_nameRequested); on<HelloRandomNameSet>(_randomNameSet); } final SmartContractRepository _smartContractRepository; final UsernameGenerator _usernameGenerator; FutureOr<void> _nameRequested( HelloNameRequested event, Emitter<HelloState> emit, ) async { emit(state.copyWith(status: HelloAsyncStatus.loading)); try { final name = await _smartContractRepository.getName(); emit(state.copyWith(status: HelloAsyncStatus.success, name: name)); } catch (e, s) { addError(e, s); emit(state.copyWith(status: HelloAsyncStatus.error)); } } FutureOr<void> _randomNameSet( HelloRandomNameSet event, Emitter<HelloState> emit, ) async { emit(state.copyWith(status: HelloAsyncStatus.loading)); try { final name = _usernameGenerator.generateRandom(); final txHash = await _smartContractRepository.setName(name: name); emit( state.copyWith( name: name, txHashes: [...state.txHashes, txHash], status: HelloAsyncStatus.success, ), ); } catch (e, s) { addError(e, s); emit(state.copyWith(status: HelloAsyncStatus.error)); } } }
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter