带有模板的Flutter软件包提供商

时间:2019-11-29 08:21:40

标签: flutter dart flutter-provider

我正在尝试将provider与模板一起使用,但是Provider.of似乎无法正常工作。

日志:

  

══╡小工具图书馆的例外情况提示   ╞═════════════════════════════════════════════════ ══════════   以下ProviderNotFoundError被抛出   MyChildWidget(dirty):错误:找不到正确的   MyChildWidget小部件上方的提供程序

     

要修复,请:

     
      
  • 确保提供者是此MyChildWidget小部件的祖先
  •   
  • 向提供者提供类型
  •   
  • 为消费者提供类型
  •   
  • 将类型提供给Provider.of()
  •   
  • 始终使用包导入。例如:`import'package:my_app / my_code.dart';
  •   
  • 确保使用正确的context
  •   

您知道任何解决方案吗?

显示问题的示例:

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

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

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Provider<MyChildState>.value(
          value: MyChildState("Hello world !"),
          child: MaterialApp(
            home: MyChildWidget(),
          )),
    );
  }
}

abstract class MyParentWidget<State extends MyParentState> extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final State state = Provider.of(context);
    return Text(state.text);
  }
}

abstract class MyParentState {
  final String text;

  MyParentState(this.text);
}

class MyChildWidget<MyChildState> extends MyParentWidget{
}

class MyChildState extends MyParentState {
  MyChildState(String text) : super(text);
}

1 个答案:

答案 0 :(得分:0)

乍一看您的代码,我可以看到您正在传递MyChildState("Hello world !")作为值,但是稍后在MyParentWidget类中,您正在请求State对象{{1} }。

尝试请求final State state = Provider.of(context);而不是MyChildState

阅读代码后,我的第一印象是您来自另一种编程语言,现在您正在尝试Flutter。一个友好的建议是使一切尽可能简单

所有的抽象以及代码的组织方式可能会在以后审核您编写的代码而不是帮助您时使您感到困惑。