【问题标题】:Flutter code "Navigator.pop(context);" undefiend i don't know why颤振代码“Navigator.pop(context);”我不知道为什么
【发布时间】:2020-08-31 08:57:20
【问题描述】:

我想在我的设备上配置返回按钮, 我有问题未定义的“Navigator.pop(context);”在这段代码中,任何人都可以对我进行编辑。谢谢

import 'dart:js';

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


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

class MyApp extends StatelessWidget {
  void backButton() {
     Navigator.pop(context);
  }

  @override
  Widget build(BuildContext context) {
    return WillPopScope(
      onWillPop: () {
        backButton();
        return Future.value(false);
      },
      child: MaterialApp(
        debugShowCheckedModeBanner: false,
        title: 'Welcome to Flutter',
        home: Scaffold(
          body: WebView(
            initialUrl: "https://halgoom.com",
            javascriptMode: JavascriptMode.unrestricted,
          ),
        ),
      ),
    );
  }
}

【问题讨论】:

  • 我认为 context 没有在你调用它的地方提供。(我的意思是 backButton() 函数)
  • 您使用StatelessWidget,它没有自己的类作用域context。您应该将context 作为backButton 函数的参数传递,或者在onWillPop 回调中调用Navigator.pop
  • @Prostandy 如果答案解决了您的问题。请记住将其标记为正确,以帮助将来遇到相同问题的用户。

标签: flutter webview


【解决方案1】:

您需要将context 传递给构建方法之外的方法。它应该可以解决您的问题。

void backButton(context) {
  Navigator.pop(context);
}

backButton(context);

【讨论】:

    【解决方案2】:

    您的context 未定义,因为您的MyApp 中没有任何BuildContext context。您的上下文变量在您的 Widget Build method 内。
    而不是创建一个函数来调用Navigator.pop()void backButton(){...},只需将它放在你的onWillPop:(){}函数中:

     onWillPop: () {
            Navigator.pop(context);
            return Future.value(false);
          },
    

    默认情况下,如果您返回 true,onWillPop 将执行 Navigator.pop(context);。因此,不要在 onWillPop 中调用 Navigator.pop(),只需这样做:

     onWillPop: () =>true,
    

    【讨论】:

      【解决方案3】:

      您不能在 onWillPop 函数中弹出(。这是多余的。只需执行操作。 事实是 onWillpop 已经流行了...

      【讨论】:

        【解决方案4】:

        首先你不需要import 'dart:js'; 打赌它是为了解决“上下文”问题而添加的。

        那我就放个

        Navigator.pop(context);
        

        进入你调用 backButton() 的实际位置; 将它作为一个单独的函数没有任何意义,并且代码将来会更短且更易于阅读。另一方面,如果您绝对需要将其分开,您可以按照此处其他人的建议,将上下文传递给此函数。

        【讨论】:

          【解决方案5】:

          尝试将上下文传递给后退按钮方法

          void backButton(BuildContext context){ 
              Navigator.pop(context);
          }
          

          并在调用方法时传递上下文。

          【讨论】:

            猜你喜欢
            • 2021-07-02
            • 2021-12-27
            • 1970-01-01
            • 1970-01-01
            • 2015-05-05
            • 2020-09-19
            • 2014-01-17
            • 1970-01-01
            • 2017-04-01
            相关资源
            最近更新 更多