162 lines
4.4 KiB
Markdown
162 lines
4.4 KiB
Markdown
# 🔄 迁移指南:从 GetX 到纯 Flutter 实现
|
|
|
|
本文档说明了移除 GetX 依赖并创建纯 Flutter 实现所做的更改。
|
|
|
|
## 📋 **更改内容**
|
|
|
|
### 1. **状态管理**
|
|
**之前 (GetX):**
|
|
```dart
|
|
class YxNetInspectorController extends GetxController {
|
|
final RxList<NetworkLogEntry> logs = <NetworkLogEntry>[].obs;
|
|
final RxInt requestCount = 0.obs;
|
|
|
|
void addLog(NetworkLogEntry log) {
|
|
logs.insert(0, log);
|
|
}
|
|
}
|
|
|
|
// Usage in widgets
|
|
Obx(() => Text('${controller.requestCount.value}'))
|
|
```
|
|
|
|
**之后 (纯 Flutter):**
|
|
```dart
|
|
class YxNetInspectorController extends ChangeNotifier {
|
|
final List<NetworkLogEntry> _logs = <NetworkLogEntry>[];
|
|
int _requestCount = 0;
|
|
|
|
List<NetworkLogEntry> get logs => List.unmodifiable(_logs);
|
|
int get requestCount => _requestCount;
|
|
|
|
void addLog(NetworkLogEntry log) {
|
|
_logs.insert(0, log);
|
|
notifyListeners();
|
|
}
|
|
}
|
|
|
|
// Usage in widgets
|
|
ListenableBuilder(
|
|
listenable: controller,
|
|
builder: (context, child) => Text('$requestCount'),
|
|
)
|
|
```
|
|
|
|
### 2. **导航**
|
|
**之前 (GetX):**
|
|
```dart
|
|
Get.dialog(MyDialog());
|
|
Get.back();
|
|
Get.to(() => MyPage());
|
|
```
|
|
|
|
**之后 (纯 Flutter):**
|
|
```dart
|
|
showDialog(context: context, builder: (context) => MyDialog());
|
|
Navigator.of(context).pop();
|
|
Navigator.of(context).push(MaterialPageRoute(builder: (context) => MyPage()));
|
|
```
|
|
|
|
### 3. **依赖注入**
|
|
**之前 (GetX):**
|
|
```dart
|
|
Get.put(YxNetInspectorController(), permanent: true);
|
|
YxNetInspectorController controller = Get.find();
|
|
```
|
|
|
|
**之后 (纯 Flutter):**
|
|
```dart
|
|
class YxNetInspectorController extends ChangeNotifier {
|
|
static YxNetInspectorController? _instance;
|
|
static YxNetInspectorController get instance {
|
|
return _instance ??= YxNetInspectorController._internal();
|
|
}
|
|
|
|
YxNetInspectorController._internal();
|
|
}
|
|
```
|
|
|
|
## 🎯 **纯 Flutter 实现的好处**
|
|
|
|
### **Zero Dependencies**
|
|
- **Before**: Required GetX package (~500KB)
|
|
- **After**: No external dependencies, pure Flutter
|
|
|
|
### **Better Performance**
|
|
- **Before**: GetX reactive system overhead
|
|
- **After**: Native Flutter ChangeNotifier, optimized for performance
|
|
|
|
### **Improved Compatibility**
|
|
- **Before**: Potential conflicts with other state management solutions
|
|
- **After**: Works seamlessly with any Flutter app architecture
|
|
|
|
### **Smaller Bundle Size**
|
|
- **Before**: Additional GetX package increases app size
|
|
- **After**: No additional dependencies, minimal impact
|
|
|
|
## 🔧 **现有用户的迁移步骤**
|
|
|
|
If you were using a previous version with GetX, here's how to migrate:
|
|
|
|
### 1. **更新你的 pubspec.yaml**
|
|
```yaml
|
|
dependencies:
|
|
yx_net_inspector: ^1.0.0 # New version without GetX
|
|
```
|
|
|
|
### 2. **无需代码更改**
|
|
The public API remains exactly the same:
|
|
```dart
|
|
YxNetInspector.simple(
|
|
child: MaterialApp(...),
|
|
)
|
|
|
|
// Logging still works the same
|
|
YxNetInspectorController.instance.logRequest(...);
|
|
```
|
|
|
|
### 3. **移除未使用的 GetX**
|
|
If you were only using GetX for this package, you can now remove it:
|
|
```yaml
|
|
dependencies:
|
|
# get: ^4.6.6 # Remove if no longer needed
|
|
```
|
|
|
|
## 📈 **性能比较**
|
|
|
|
| Aspect | GetX Version | Pure Flutter Version |
|
|
|--------|-------------|---------------------|
|
|
| Package Size | ~500KB | 0KB (no deps) |
|
|
| Memory Usage | Higher (reactive system) | Lower (native Flutter) |
|
|
| Build Performance | Slower (GetX overhead) | Faster (native widgets) |
|
|
| Compatibility | Potential conflicts | Universal compatibility |
|
|
| Learning Curve | Requires GetX knowledge | Standard Flutter patterns |
|
|
|
|
## 🛠 **技术实现细节**
|
|
|
|
### **State Management Pattern**
|
|
- Uses Flutter's built-in `ChangeNotifier` for state management
|
|
- `ListenableBuilder` for reactive UI updates
|
|
- Singleton pattern for global controller access
|
|
|
|
### **Memory Management**
|
|
- Proper disposal of resources in `dispose()` method
|
|
- Unmodifiable lists to prevent external mutations
|
|
- Efficient notification system to minimize rebuilds
|
|
|
|
### **Widget Architecture**
|
|
- Pure StatefulWidget implementations
|
|
- Native Flutter navigation and dialogs
|
|
- Standard Material Design components
|
|
|
|
## 🎉 **结论**
|
|
|
|
The migration to pure Flutter provides:
|
|
- ✅ **Zero dependencies** - No external packages required
|
|
- ✅ **Better performance** - Native Flutter optimizations
|
|
- ✅ **Universal compatibility** - Works with any Flutter app
|
|
- ✅ **Smaller bundle size** - No additional package overhead
|
|
- ✅ **Same API** - No breaking changes for users
|
|
|
|
This change makes `yx_net_inspector` more lightweight, performant, and universally compatible with any Flutter project architecture.
|