Flutter依赖注入使用指南

1. 手动依赖注入

最简单的方式,通过构造函数传递依赖:

Dart 复制代码
class ApiService {
  Future<String> fetchData() async {
    // API 调用
    return 'Data';
  }
}

class UserRepository {
  final ApiService apiService;
  
  UserRepository(this.apiService);
  
  Future<String> getUserData() {
    return apiService.fetchData();
  }
}

class MyWidget extends StatelessWidget {
  final UserRepository userRepository;
  
  MyWidget({required this.userRepository});
  
  @override
  Widget build(BuildContext context) {
    return Text('User: ${userRepository.getUserData()}');
  }
}

// 使用
void main() {
  final apiService = ApiService();
  final userRepository = UserRepository(apiService);
  runApp(MyApp(userRepository: userRepository));
}

2. 使用 Provider 包

最流行的 Flutter 状态管理和依赖注入方案:

Dart 复制代码
dependencies:
  provider: ^6.0.5
Dart 复制代码
import 'package:provider/provider.dart';

// 定义服务类
class CounterService {
  int _count = 0;
  int get count => _count;
  
  void increment() {
    _count++;
  }
}

void main() {
  runApp(
    MultiProvider(
      providers: [
        Provider<CounterService>(create: (_) => CounterService()),
        // 可以添加更多 provider
      ],
      child: MyApp(),
    ),
  );
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final counterService = Provider.of<CounterService>(context);
    
    return Scaffold(
      body: Center(
        child: Text('Count: ${counterService.count}'),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          counterService.increment();
        },
        child: Icon(Icons.add),
      ),
    );
  }
}

依赖注入是将对象的创建和使用分离,使代码更加灵活、可测试和可维护

相关推荐
yuanlaile3 小时前
2026年全新Flutter 跨平台开发全栈学习资料整理
flutter·getx·鸿蒙 next·flutter开发鸿蒙·flutter入门实战·flutter全栈
恋猫de小郭14 小时前
Genkit Dart 1.0 发布,Flutter 原生的 AI Agent 终于完整了
android·前端·flutter
第10086个小白14 小时前
flutter桌面端打包方式(Inno Setup Compiler)版本
前端·flutter
陆断枫1 天前
Flutter 3.47 动画引擎盘点:Impeller 全平台,和那些"新特性"
flutter
程序员老刘1 天前
Flet 1.0 思路很好,可惜来晚了
flutter·ai编程·客户端
m0_738185822 天前
Flutter 鸿蒙化实战:qr_code_scanner_plus 适配 OpenHarmony,二维码扫描
flutter·华为·harmonyos·鸿蒙
恋猫de小郭2 天前
Flutter + EmbeddingGemma 2,谷歌发布完全端侧的 AI Edge Foresight
android·前端·flutter
君赏2 天前
基于 FlutterPatch 快速接入 Flutter 热更新
flutter
律宏阔2 天前
Dart FFI 内存管理:用 using + Arena 替代嵌套 try-finally
前端·flutter
律宏阔2 天前
Flutter 调用 Go:从 c-shared + ffigen 到 @Native + Native Assets 踩坑记录
前端·flutter