snapshot of https://github.com/flutter/samples.git (main, 2026-09-16; blobs > 131072B omitted)
Some checks failed
Main Branch CI / Test Flutter beta on ubuntu-latest (push) Has been skipped
Main Branch CI / Test Flutter stable on ubuntu-latest (push) Has been skipped
Main Branch CI / Test Flutter beta on macos-latest (push) Has been cancelled
Main Branch CI / Test Flutter stable on macos-latest (push) Has been cancelled
Some checks failed
Main Branch CI / Test Flutter beta on ubuntu-latest (push) Has been skipped
Main Branch CI / Test Flutter stable on ubuntu-latest (push) Has been skipped
Main Branch CI / Test Flutter beta on macos-latest (push) Has been cancelled
Main Branch CI / Test Flutter stable on macos-latest (push) Has been cancelled
This commit is contained in:
91
compass_app/app/lib/ui/home/view_models/home_viewmodel.dart
Normal file
91
compass_app/app/lib/ui/home/view_models/home_viewmodel.dart
Normal file
@@ -0,0 +1,91 @@
|
||||
// Copyright 2024 The Flutter team. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
|
||||
import '../../../data/repositories/booking/booking_repository.dart';
|
||||
import '../../../data/repositories/user/user_repository.dart';
|
||||
import '../../../domain/models/booking/booking_summary.dart';
|
||||
import '../../../domain/models/user/user.dart';
|
||||
import '../../../utils/command.dart';
|
||||
import '../../../utils/result.dart';
|
||||
|
||||
class HomeViewModel extends ChangeNotifier {
|
||||
HomeViewModel({
|
||||
required BookingRepository bookingRepository,
|
||||
required UserRepository userRepository,
|
||||
}) : _bookingRepository = bookingRepository,
|
||||
_userRepository = userRepository {
|
||||
load = Command0(_load)..execute();
|
||||
deleteBooking = Command1(_deleteBooking);
|
||||
}
|
||||
|
||||
final BookingRepository _bookingRepository;
|
||||
final UserRepository _userRepository;
|
||||
final _log = Logger('HomeViewModel');
|
||||
List<BookingSummary> _bookings = [];
|
||||
User? _user;
|
||||
|
||||
late Command0 load;
|
||||
late Command1<void, int> deleteBooking;
|
||||
|
||||
List<BookingSummary> get bookings => _bookings;
|
||||
|
||||
User? get user => _user;
|
||||
|
||||
Future<Result> _load() async {
|
||||
try {
|
||||
final result = await _bookingRepository.getBookingsList();
|
||||
switch (result) {
|
||||
case Ok<List<BookingSummary>>():
|
||||
_bookings = result.value;
|
||||
_log.fine('Loaded bookings');
|
||||
case Error<List<BookingSummary>>():
|
||||
_log.warning('Failed to load bookings', result.error);
|
||||
return result;
|
||||
}
|
||||
|
||||
final userResult = await _userRepository.getUser();
|
||||
switch (userResult) {
|
||||
case Ok<User>():
|
||||
_user = userResult.value;
|
||||
_log.fine('Loaded user');
|
||||
case Error<User>():
|
||||
_log.warning('Failed to load user', userResult.error);
|
||||
}
|
||||
|
||||
return userResult;
|
||||
} finally {
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
Future<Result<void>> _deleteBooking(int id) async {
|
||||
final resultDelete = await _bookingRepository.delete(id);
|
||||
switch (resultDelete) {
|
||||
case Ok<void>():
|
||||
_log.fine('Deleted booking $id');
|
||||
case Error<void>():
|
||||
_log.warning('Failed to delete booking $id', resultDelete.error);
|
||||
return resultDelete;
|
||||
}
|
||||
|
||||
// After deleting the booking, reload the bookings list.
|
||||
final resultLoadBookings = await _bookingRepository.getBookingsList();
|
||||
switch (resultLoadBookings) {
|
||||
case Ok<List<BookingSummary>>():
|
||||
_bookings = resultLoadBookings.value;
|
||||
_log.fine('Loaded bookings');
|
||||
notifyListeners(); // notify only when data changes
|
||||
case Error<List<BookingSummary>>():
|
||||
_log.warning('Failed to load bookings', resultLoadBookings.error);
|
||||
return resultLoadBookings;
|
||||
}
|
||||
|
||||
return resultLoadBookings;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user