當你開始進行 Flutter App開發時,設計清晰的應用藍圖至關重要。無論是專案結構的規劃,還是模組化的代碼設計,都能幫助你打造高效、易維護的應用程式。本文將從專案結構、Dart 命名約定、模組化思維等方面進行解析,並通過範例深入講解 StatelessWidget 和 StatefulWidget 的實際應用。
Flutter 預設的專案結構簡單直觀,了解其組織方式和最佳實踐,能幫助你更高效地管理代碼。
Flutter 專案的主要資料夾和文件包括:
💡 提示:保持資料夾結構清晰,便於日後維護和擴展。
💡 良好的命名習慣能提升代碼的可讀性,特別是在多人協作時。
新建專案後,Flutter 提供了一個預設範例模板。以下是模板中關鍵部分的解析:
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(primarySwatch: Colors.blue),
home: const MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
final String title;
const MyHomePage({Key? key, required this.title}) : super(key: key);
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
void _incrementCounter() {
setState(() {
_counter++;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text(widget.title)),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
const Text('You have pushed the button this many times:'),
Text('$_counter', style: Theme.of(context).textTheme.headline4),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: const Icon(Icons.add),
),
);
}
}
模組化設計能讓應用程式更易於維護和擴展。以下是模組化設計的核心思維與實踐。
Flutter 的 UI 是由 Widget 層層組合而成。合理的層次結構能提升代碼的可讀性和可維護性:
Widget 層次結構圖
----------------
Container
└── ColoredBox
└── Column / Row
├── Image
├── Text
├── RawImage
└── RichText
這樣的層次結構非常適合處理複雜的界面布局,並且每層 Widget 都有清晰的職責,便於維護和擴展。
範例:
class MyTitle extends StatelessWidget {
final String title;
MyTitle({required this.title});
@override
Widget build(BuildContext context) {
return Text(
Title,
style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
);
}
}
範例:
class CounterWidget extends StatefulWidget {
@override
_CounterWidgetState createState() => _CounterWidgetState();
}
class _CounterWidgetState extends State<CounterWidget> {
int _counter = 0;
void _incrementCounter() {
setState(() {
_counter++;
});
}
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text("Counter: $_counter", style: TextStyle(fontSize: 20)),
ElevatedButton(
onPressed: _incrementCounter,
child: Text("Increment"),
),
],
);
}
}
學習 Flutter 專案結構、掌握模組化設計和充分理解 StatelessWidget 與 StatefulWidget,能幫助你打造高效的應用程式。透過合理的組件劃分與代碼重用,你的應用將更加靈活、易於維護。
立即應用這些技巧,為你的 Flutter 項目畫下完美的開發藍圖吧! 🚀