Флаттер государственного управления - PullRequest
0 голосов
/ 28 февраля 2020

Если я хочу, чтобы у виджета и его потомков был указан c поставщик, но не во всем приложении, как мне этого добиться?

// not this
  void main() {
     runApp(
    MultiProvider(
      providers: [
        ChangeNotifierProvider(create: (context) => CartModel()),
        Provider(create: (context) => SomeOtherClass()),
      ],
      child: MyApp(),
       ),
     );
   }

Ответы [ 2 ]

0 голосов
/ 28 февраля 2020

Вы можете заключить этот виджет с провайдером и использовать его как

final _myProvider=Provider.of<MyProvider>(context, listen: false);

или используя

Consumer<MyProvider>(
 builder: (BuildContext context, MyProvider myProvider, Widget child) {
   return child;
),
0 голосов
/ 28 февраля 2020

Вам просто нужно обернуть MultiProvider в нужный виджет. Как это:

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MultiProvider(
        providers: [Provider(create: (context) => TestModel(index: 1)),],
        child: MyHomePage(title: 'Flutter Demo Home Page')
      ),
    );
  }
}
...