首页 > 解决方案 > 从 dart 文件颤振中的本机代码重定向问题回调后

问题描述

我使用 MethodChannel 完成了颤振与本机代码之间的通信。它在颤振到本机之间的桥梁已经完成,但是当我尝试将本机屏幕重定向到颤振屏幕时,它不会重定向。我正在使用 Navigator 推送方法来重定向屏幕。请检查以下代码:

class MyHomePage extends StatelessWidget {

  BuildContext mcontext;

  static const platform = const MethodChannel(
      'flutter.rortega.com.basicchannelcommunication');
  final String title;

  MyHomePage({Key key, this.title}) : super(key: key) {
    platform.setMethodCallHandler(_handleMethod);
  }


  @override
  Widget build(BuildContext context) {
    mcontext = context;
    return new Scaffold(
      appBar: new AppBar(
        title: new Text(title),
      ),
      body: new Center(
        child: new Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            new RaisedButton(
              child: new Text('Show native view'),
              onPressed: _showNativeView,
            ),
          ],
        ),
      ),
    );
  }

  Future<Null> _showNativeView() async {
    await platform.invokeMethod('showNativeView', {"text": "Maulik"});
  }

  Future<dynamic> _handleMethod(MethodCall call) async {
    switch (call.method) {
      case "message":
        String alice = call.arguments['message'];

        print(alice);
        pushPreviewScreen(mcontext);
    }
  }

  pushPreviewScreen(BuildContext mcontext) {
    print("calledFunction::");
    Navigator.push(
      mcontext,
      MaterialPageRoute(builder: (context) => SecondScreen()),
    );
  }
}

这里“calledFunction::”在控制台中打印,但在 SecondScreen() 中不重定向。

标签: flutterkotlinnativeflutter-method-channel

解决方案


尝试以这种方式使用它,Using thenStatement

   await platform.invokeMethod('showNativeView', {"text": "Maulik"}).then((onValue) {
      //you can also check the returned `value` from native `code` and return `true` or `false` from the `native` `code`, and on the basis of that you can send the user to the screen like `if(value)` //send to home screen else //send back to screen
      Navigator.push(
        mcontext,
        MaterialPageRoute(builder: (context) => SecondScreen()),
      );
    });

如果这也不起作用,并且您在 dispose 之后调用了与 setStateerror相关的任何内容,那么试试这个,

       await platform.invokeMethod('showNativeView', {"text": "Maulik"}).then((onValue) {
          if (this.mounted) {
             setState(() {
                // Your Navigation Code Here
             });
           }
        });

推荐阅读