未处理的异常:异常:请在Flutter中提供ShowCaseView上下文

12
我正在尝试在Flutter应用程序中使用ShowoCaseView软件包,以下是我所做的步骤:

我正在尝试在Flutter应用程序中使用ShowoCaseView软件包,以下是我所做的步骤:

  GlobalKey _oneShowcaseKey = GlobalKey();

  startShowCase() {
    WidgetsBinding.instance.addPostFrameCallback((_) async {
      ShowCaseWidget.of(context).startShowCase([_oneShowcaseKey]);
    });
  }

  @override
  void initState() {
startShowCase();
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    super.build(context);
    return ShowCaseWidget(
        builder: Builder(
      builder: (context) => Scaffold(
                                child: Showcase(
                                  key: _oneShowcaseKey,
                                  title: 'Menu',
                                  description: 'Click here to see menu options',
                                  child: Column())

)

这是我在应用程序中实现该软件包的方式,但我遇到了以下错误:

[ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: Exception: Please provide ShowCaseView context
3个回答

5

我也遇到了这个问题。
我将"ShowCaseWIdget"写入其父部件中,如下所示,问题得以解决。

class SolvedStatelessWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: ShowCaseWidget(
            builder: Builder(builder: (context) => SolvedStatefulWidget())));
  }
}

class SolvedStatefulWidget extends StatefulWidget {
  @override
  _SolvedStatefulWidgetState createState() => _SolvedStatefulWidgetState();
}

class _SolvedStatefulWidgetState extends State<SolvedStatefulWidget> {
      GlobalKey _oneShowcaseKey = GlobalKey();
    
      startShowCase() {
        WidgetsBinding.instance.addPostFrameCallback((_) async {
          ShowCaseWidget.of(context).startShowCase([_oneShowcaseKey]);
        });
      }
    
      @override
      void initState() {
        startShowCase();
        super.initState();
      }
    
      @override
      Widget build(BuildContext context) {
        super.build(context);
        return yourWidget()
    
    )

4
不要将您的Scaffold包装在ShowCaseWidget内部。相反,将其包装到主导航点中。
例如: 使用onGenerateRoute:
return setTransition(ShowCaseWidget(
        builder: Builder(
          builder: (_) => DashboardView(map),
        ),
      ));

希望这可以解决您的问题,如果您仍然遇到任何问题,请告诉我。

谢谢。你能再解释一下吗? - Reza Nazeri

0
确保使用此密钥的展示小部件实际上在屏幕上显示或呈现。 对我来说,当以不呈现展示小部件的方式呈现屏幕时,但仍然调用startShowCase方法时会发生这种情况。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接