Files
hipmi/templates/ff_bloc/event.tmpl
2025-02-04 22:35:44 +08:00

79 lines
2.1 KiB
Cheetah

import 'dart:async';
import 'package:flutter/widgets.dart';
import 'package:ff_bloc/ff_bloc.dart';
import 'package:${appName}${relative}/index.dart';
@immutable
abstract class ${upperName}Event implements FFBlocEvent<${upperName}State, ${upperName}Bloc> {}
/// Initial Event with load data
class Load${upperName}Event extends ${upperName}Event {
Load${upperName}Event({required this.id});
final String? id;
static const String _name = 'Load${upperName}Event';
@override
String toString() => _name;
@override
Stream<${upperName}State> applyAsync({required ${upperName}Bloc bloc}) async* {
// set loading true for show loading
yield bloc.state.copyWithoutError(isLoading: true);
// fetch data
final result = await bloc.provider.fetchAsync(id);
// set data to state
yield bloc.state.copyWithoutError(
isLoading: false,
data: ${upperName}ViewModel(items: result),
);
}
}
class Add${upperName}Event extends ${upperName}Event {
static const String _name = 'Add${upperName}Event';
@override
String toString() => _name;
@override
Stream<${upperName}State> applyAsync({required ${upperName}Bloc bloc}) async* {
yield bloc.state.copyWithoutError(isLoading: true);
final result = await bloc.provider.addMore(bloc.state.data?.items);
yield bloc.state.copyWithoutError(
isLoading: false,
data: ${upperName}ViewModel(items: result),
);
}
}
class ErrorYouAwesomeEvent extends YouAwesomeEvent {
static const String _name = 'ErrorYouAwesomeEvent';
@override
String toString() => _name;
@override
Stream<YouAwesomeState> applyAsync({required YouAwesomeBloc bloc}) async* {
throw Exception('Test error');
}
}
class Clear${upperName}Event extends ${upperName}Event {
static const String _name = 'Clear${upperName}Event';
@override
String toString() => _name;
@override
Stream<${upperName}State> applyAsync({required ${upperName}Bloc bloc}) async* {
yield bloc.state.copyWithoutError(isLoading: true);
yield bloc.state.copyWithoutData(
isLoading: false,
);
}
}