import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
void main() {
runApp(App());
}
class Model extends ChangeNotifier {
String id;
Model({this.id});
}
class App extends StatelessWidget {
@override
Widget build(BuildContext context) {
var model1 = Model(id: '111');
var model2 = Model(id: '222');
var model3 = Model(id: '333');
return MaterialApp(
home: Scaffold(
backgroundColor: Colors.white,
body: MultiProvider(
providers: [
ChangeNotifierProvider.value(value: model1),
ChangeNotifierProvider.value(value: model2),
ChangeNotifierProvider.value(value: model3),
],
child: Center(child: Foo()),
),
));
}
}
class Foo extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Consumer(
builder: (ctx, Model model, child) {
return Text(model.id);
},
);
}
}
Результат на экране: 333. Как мне получить вторую модель, если я хочу отобразить 222? Есть ли способ добиться этого, например, с помощью индекса?
Настоящая проблема в моем проекте: у меня есть страница, состоящая из списка компонентов, таких как баннер, карусель, аудиоплеер и т. Д. Их порядок и количество произвольны и настраиваются с помощью json, например:
{
"settings": [
{
"type": "ComponentA",
"data": "..."
},
{
"type": "ComponentB",
"data": "..."
},
{
"type": "ComponentA",
"data": "..."
}
]
}
Что я делаю, так это просматриваю json, а затем создаю целые модели. ComponentAModel, ComponentBModel, ComponentAModel. Затем я помещаю все это в мульти провайдера
теперь у меня есть два ComponentA для рендеринга, но я не могу различить первую ComponentAModel и
вторую ComponentAModel.