Skip to content

Instantly share code, notes, and snippets.

View ookami-kb's full-sized avatar

Kirill Bubochkin ookami-kb

View GitHub Profile
class SharedPrefTokenRepository implements TokenRepository {
@override
Future<void> save(String token) async =>
(await SharedPreferences.getInstance())
.setString(_keyToken, token);
@override
Future<String> load() async => (await SharedPreferences.getInstance())
.getString(_keyToken);
class ApiThreadDataLayer implements ThreadDataLayer {
final RestClient _restClient;
@override
Future<Either<Exception, MessageThread>> createNewThread(…) async {…}
}
abstract class ThreadDataLayer {
Future<Either<Exception, MessageThread>> createNewThread(
String subject,
List<String> employeeIds,
);
}
Future<Either<Exception, MessageThread>> _createThread() async {
final selectedEmployees =
_selectedEmployees.value.map((employee) => employee.id).toList();
return data.createNewThread(_title.value, selectedEmployees).map((thread) {
repository.saveThread(thread);
return thread;
});
}
class CreateThreadBloc extends BlocBase {
/// Title of the conversation
Stream<String> get title => _title.transform(emptyValidationTransformer);
final BehaviorSubject<String> _title = BehaviorSubject.seeded('');
/// Creates new message thread or updates existing one.
Future<Either<Exception, MessageThread>> submit() async {
Either<Exception, MessageThread> result;
if (initialThread == null) {
result = await _createThread();
class CreateThreadScreen extends StatefulWidget {…}
class _CreateThreadScreenState extends State<CreateThreadScreen> {
@override
void afterInitState() {
super.afterInitState();
bloc.title
.map((v) => _titleController.value.copyWith(text: v))
.listen((v) => _titleController.value = v, onError: ignore)
📁 messages
📁 create_thread
create_thread_bloc.dart
create_thread_screen.dart
📁 models
message.dart
message_author.dart
message_thread.dart
📁 thread_details
thread_details_screen.dart
📁 profile
profile.dart
profile_bloc.dart
profile_screen.dart
📁 messages
📁 models
message.dart
thread.dart
messages_bloc.dart
messages_screen.dart
📁 models
message.dart
thread.dart
profile.dart
📁 blocs
messages_bloc.dart
profile_bloc.dart
📁 widgets
messages_screen.dart
profile_screen.dart
_messagesBloc = MessagesBloc(Provider.of(context), Provider.of(context));