2.設定transaction bloc
先設定lib\bloc\transaction_bloc.dart¶
Code¶
import 'dart:math';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:hive/hive.dart';
import '../models/expense.dart';
part 'transaction_event.dart';
part 'transaction_state.dart';
class TransactionBloc extends Bloc<TransactionEvent, TransactionState> {
final Box<Transaction> transactionBox;
TransactionBloc(this.transactionBox) : super(TransactionInitial()) {
loadTransactions();
on<AddTransaction>((event, emit) {
final newTransaction = event.transaction;
transactionBox.put(newTransaction.key, newTransaction);
emit(TransactionsLoaded(_getTransactions()));
});
on<DeleteTransaction>((event, emit) {
transactionBox.delete(event.transaction.key);
emit(TransactionsLoaded(_getTransactions()));
});
on<ClearTransactions>((event, emit) async {
transactionBox.clear();
await Future.delayed(Duration(milliseconds: 1000));
emit(TransactionsLoaded(_getTransactions()));
});
}
void loadTransactions() {
emit(TransactionsLoaded(_getTransactions()));
}
List<Transaction> _getTransactions() {
return transactionBox.values.toList();
}
}
解釋¶
交易Bloc簡介¶
在Flutter中,Bloc(Business Logic Component)是一種用於管理應用程序狀態和處理用戶交互的設計模式。在給定的代碼片段中,我們看到了一個名為TransactionBloc的類,它是一個Bloc,負責管理交易相關的業務邏輯。
代碼解釋¶
-
導入依賴項:
-
聲明Bloc類:
TransactionBloc類繼承自Bloc類,指定了TransactionEvent作為輸入事件和TransactionState作為狀態。
-
構造函數:
TransactionBloc(this.transactionBox) : super(TransactionInitial()) { loadTransactions(); // 初始化時加載交易數據,並定義了三種事件處理函數 }- 構造函數接受一個名為
transactionBox的參數,它是一個Hive盒子,用於存儲交易數據。在構造函數中,首先調用loadTransactions()方法加載交易數據,然後調用super(TransactionInitial())初始化Bloc的初始狀態為TransactionInitial()。
- 構造函數接受一個名為
-
事件處理:
on<AddTransaction>((event, emit) { final newTransaction = event.transaction; transactionBox.put(newTransaction.key, newTransaction); emit(TransactionsLoaded(_getTransactions())); }); on<DeleteTransaction>((event, emit) { transactionBox.delete(event.transaction.key); emit(TransactionsLoaded(_getTransactions())); }); on<ClearTransactions>((event, emit) async { transactionBox.clear(); await Future.delayed(Duration(milliseconds: 1000)); emit(TransactionsLoaded(_getTransactions())); });- 使用
on方法定義了三種不同的事件處理函數,分別處理添加、刪除和清除交易的事件。 - 當接收到
AddTransaction事件時,將新的交易數據存儲到transactionBox中,並發出TransactionsLoaded狀態。 - 當接收到
DeleteTransaction事件時,從transactionBox中刪除指定的交易數據,並發出TransactionsLoaded狀態。 - 當接收到
ClearTransactions事件時,清空transactionBox中的所有交易數據,並發出TransactionsLoaded狀態,但在此之前會延遲一秒鐘以模擬異步操作。
- 使用
-
輔助方法:
void loadTransactions() { emit(TransactionsLoaded(_getTransactions())); } List<Transaction> _getTransactions() { return transactionBox.values.toList(); }loadTransactions()方法用於加載交易數據並發出TransactionsLoaded狀態。_getTransactions()方法用於從transactionBox中獲取所有交易數據並返回一個列表。
總結¶
該TransactionBloc類負責管理交易相關的業務邏輯,它通過處理不同的事件來添加、刪除和清除交易數據,並根據操作結果發出相應的狀態。
Last update :
13 novembre 2024
Created : 13 novembre 2024
Created : 13 novembre 2024