Files
flutter_provider_demo/lib/pages/multi_provider_page.dart
2025-02-17 21:26:52 +08:00

87 lines
1.9 KiB
Dart

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
class CounterA extends ChangeNotifier {
int _count = 0;
int get count => _count;
void increment() {
_count++;
notifyListeners();
}
}
class CounterB extends ChangeNotifier {
int _count = 0;
int get count => _count;
void increment() {
_count++;
notifyListeners();
}
}
class MultiProviderPage extends StatelessWidget {
const MultiProviderPage({super.key});
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider(create: (_) => CounterA()),
ChangeNotifierProvider(create: (_) => CounterB()),
],
child: Scaffold(
appBar: AppBar(
title: const Text('MultiProvider Example'),
),
body: const Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
CounterAWidget(),
SizedBox(height: 20),
CounterBWidget(),
],
),
),
),
);
}
}
class CounterAWidget extends StatelessWidget {
const CounterAWidget({super.key});
@override
Widget build(BuildContext context) {
return Column(
children: [
Text('Counter A: ${context.watch<CounterA>().count}'),
Text('Counter B: ${context.watch<CounterB>().count}'),
ElevatedButton(
onPressed: () => context.read<CounterA>().increment(),
child: const Text('Increment Counter A'),
),
],
);
}
}
class CounterBWidget extends StatelessWidget {
const CounterBWidget({super.key});
@override
Widget build(BuildContext context) {
return Column(
children: [
Text('Counter B: ${context.watch<CounterB>().count}'),
ElevatedButton(
onPressed: () => context.read<CounterB>().increment(),
child: const Text('Increment Counter B'),
),
],
);
}
}