简体   繁体   English

关于 flutter MultiProvider 的用法

[英]usage about flutter 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);
      },
    );
  }
}

The result on the screen is 333 , how do i get the second model if i want to display 222 ?屏幕上的结果是333 ,如果我想显示222 ,如何获得第二个 model? are there any way to achieve this such as through index?有没有办法通过索引来实现这一点?


The real problem in my project is: I have a page which is composed by a list of components, such as banner, carousel, audio player, etc. The order and amount of them are arbitrary, configured by a json like:我项目中的真正问题是:我有一个由组件列表组成的页面,例如横幅、轮播、音频播放器等。它们的顺序和数量是任意的,由 json 配置,例如:

{
  "settings": [
    {
      "type": "ComponentA",
      "data": "..."
    },
    {
      "type": "ComponentB",
      "data": "..."
    },
    {
      "type": "ComponentA",
      "data": "..."
    }
  ]
}

What i do is traverse the json and then create whole models.我所做的是遍历 json 然后创建整个模型。 ComponentAModel, ComponentBModel, ComponentAModel.组件 A 模型、组件 B 模型、组件 A 模型。 Then i put all of then into multi provider然后我把所有这些都放到了多提供商

now i have two ComponentA to render, but i can not distinguish the first ComponentAModel and the现在我有两个要渲染的 ComponentA,但我无法区分第一个 ComponentAModel 和
second ComponentAModel.第二个 ComponentAModel。

You can't use Providers to provide multiple models of the same type.您不能使用 Providers 来提供相同类型的多个模型。

Try riverpod instead.改用riverpod

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM