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),
),
);
}
}
依赖注入是将对象的创建和使用分离,使代码更加灵活、可测试和可维护