6.設定main
設定main.dart¶
Code¶
import 'package:flutter/material.dart';
import 'bloc/transaction_bloc.dart';
import 'package:hive_flutter/hive_flutter.dart';
import 'view/home_page.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'models/expense.dart';
void main() async {
// var box = Hive.box('transactions');
// await box.deleteFromDisk();
await Hive.initFlutter();
Hive.registerAdapter(TransactionAdapter());
final transactionBox = await Hive.openBox<Transaction>('transactions');
runApp(
BlocProvider(
create: (context) => TransactionBloc(transactionBox),
child: MyApp(),
),
);
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Expense Tracker',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: const HomePage(),
);
}
}
解釋¶
這段代碼是一個 Flutter 應用程序的主入口文件。讓我們來逐步解釋:
-
main函數是 Dart 應用程序的入口點,它會首先執行應用程序的初始化工作,然後調用runApp函數來啟動應用程序。 -
await Hive.initFlutter():這行代碼初始化了 Hive 數據庫,用於在 Flutter 應用程序中進行本地數據存儲。Hive.initFlutter()函數會返回一個 Future,因此使用await關鍵字來等待初始化完成。 -
Hive.registerAdapter(TransactionAdapter()):這行代碼注冊了一個自定義的 Hive 數據模型適配器,用於將 Dart 對象和 Hive 數據庫中的數據進行相互轉換。 -
final transactionBox = await Hive.openBox<Transaction>('transactions'):這行代碼打開了一個名為 ‘transactions’ 的 Hive 數據存儲盒子,用於存儲交易數據。使用await關鍵字等待盒子打開完成。 -
BlocProvider:這是一個用於管理 BLoC(Business Logic Component)狀態的 Flutter 小部件,它接收一個create方法來創建 BLoC 實例,並將其提供給應用程序的所有子部件。 -
create: (context) => TransactionBloc(transactionBox):這行代碼創建了一個TransactionBloc的實例,並將打開的交易數據盒子傳遞給它。TransactionBloc是一個用於管理交易數據狀態的 BLoC。 -
MyApp類是應用程序的根小部件,它繼承自 StatelessWidget,用於構建整個應用程序的 UI。 -
MaterialApp是一個 MaterialApp 小部件,用於創建一個遵循 Material Design 規範的應用程序。它接收一些參數,如標題、主題和主頁等。 -
home: const HomePage():這行代碼指定了應用程序的初始頁面為HomePage。HomePage是應用程序的主界面,用於顯示交易記錄和交易操作按鈕等。
這段代碼的作用是初始化應用程序的各項配置,包括初始化 Hive 數據庫、注冊數據模型適配器、打開數據存儲盒子,並創建並提供一個 TransactionBloc 實例,最後啟動應用程序並顯示主界面。
Created : 13 novembre 2024