繁体   English   中英

带有模板的 Flutter 包提供程序

[英]Flutter package provider with templates

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

日志:

==╡ 例外情况被小部件库捕获 ╞==================================== =================== 构建MyChildWidget(dirty)时抛出以下ProviderNotFoundError:错误:在此MyChildWidget Widget上方找不到正确的提供者

要修复,请:

  • 确保 Provider 是这个 MyChildWidget Widget 的祖先
  • 向 Provider 提供类型
  • 为消费者提供类型
  • 向 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);
}

乍一看您的代码,我可以看到您正在传递MyChildState("Hello world !")作为值,但稍后在MyParentWidget类中,您正在请求一个State对象final State state = Provider.of(context); .

尝试请求MyChildState而不是State

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

所有的抽象和代码的组织方式可能会在您稍后查看您编写的代码而不是帮助您时使您感到困惑。

暂无
暂无

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

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