簡體   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