你的状态对象必须是唯一命名的类型,否则Provider无法区分。
您可以创建一个基类 Person,然后将该基类扩展为 PersonA、PersonB 等。
那么它们可以单独控制,但仍然依赖于基类的功能。
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
class Person with ChangeNotifier {
String name;
Person(this.name);
void changeName(String newName) {
name = newName;
notifyListeners();
}
}
class PersonA extends Person {
PersonA(String value) : super(value);
}
class PersonB extends Person {
PersonB(String value) : super(value);
}
class ProviderDuplicatePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider(create: (_) => PersonA('Billy Boy')),
ChangeNotifierProvider(create: (_) => PersonB('Francis')),
],
child: Scaffold(
appBar: AppBar(
title: Text('Provider Duplicate Types'),
),
body: DuplicateProviderStateObjects(),
)
);
}
}
class DuplicateProviderStateObjects extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Center(
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
Column(
children: [
Text('Provider One:'),
Text(Provider.of<PersonA>(context).name),
ElevatedButton(
child: Text('Change Person A'),
onPressed: () => Provider.of<PersonA>(context, listen: false).changeName("Kong"),
)
],
),
Column(
children: [
Text('Provider Two:'),
Text(context.watch<PersonB>().name),
ElevatedButton(
child: Text('Change Person B'),
onPressed: () => Provider.of<PersonB>(context, listen: false).changeName("Godzilla"),
)
],
),
],
),
);
}
}