尝试在 Flutter 中的 MaterialPageRoute 之后显示对话时出现“'context != null': is not true”错误?

P_e*_*021 5 mobile dart dart-pub flutter

我目前能够从 Flutter 中的 Home 应用程序 MaterialRoute 到页面,并显示弹出对话框。但是,从第二页路由到第三页(其中包含一个应该显示对话框的按钮)时,我收到此错误:[VERBOSE-2:ui_dart_state.cc(157)] Unhandled Exception: 'package:flutter/src/widgets/localizations.dart': Failed assertion: line 446 pos 12: 'context != null': is not true.

触发该错误的 showDialogue 如下所示:


class ThirdPageWidgetState extends State<ThirdPageWidget> {

  StreamSubscription<ScanResult> scanSubscription;

  @override
  void initState() {
    super.initState();
  }
Future<void> alert(deviceName) async {
    return showDialog<void>(
      barrierDismissible: false, // user must tap button!
      builder: (BuildContext context) {
        return AlertDialog(
          title: Text('Button Pressed!'),
          content: SingleChildScrollView(
            child: ListBody(
              children: <Widget>[
                Text('test'),
              ],
            ),
          ),
          actions: <Widget>[
            FlatButton(
              child: Text('Ok'),
            ),
          ],
        );
      },
    );
  }

  'Build function omitted'
}
Run Code Online (Sandbox Code Playgroud)

第二页到第三页的路由如下所示:

void routeAppToThirdPage() async {
    Navigator.push(
      context,
      MaterialPageRoute(
        builder: (context) => ThirdPageWidget(),
      ),
    );
  }
Run Code Online (Sandbox Code Playgroud)

P_e*_*021 3

showDialogue<void>()需要一个context:context参数,但编译器没有捕获该参数。

return showDialog<void>(
      context: context // THIS WAS MISSING
      barrierDismissible: false, // user must tap button!
      builder: (BuildContext context) {
        return AlertDialog(
          title: Text('Button Pressed!'),
          content: SingleChildScrollView(
            child: ListBody(
              children: <Widget>[
                Text('test'),
              ],
            ),
          ),
          actions: <Widget>[
            FlatButton(
              child: Text('Ok'),
            ),
          ],
        );
    ```
Run Code Online (Sandbox Code Playgroud)