использование о флаттере MultiProvider

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.


person Matt    schedule 16.12.2020    source источник


Ответы (1)


Вы не можете использовать Provider для предоставления нескольких моделей одного и того же типа.

Вместо этого попробуйте riverpod.

person Adnan Alshami    schedule 16.12.2020