【问题标题】:unable to open a browser URL through flutter app无法通过颤振应用打开浏览器 URL
【发布时间】:2019-04-22 12:23:24
【问题描述】:

我正在制作一个新闻应用程序,它显示了一个新闻列表,其中包含其来源网站的标题、描述和 url。 这是我的 newsDetail.dart 页面

import 'package:flutter/material.dart';
import 'package:scoped_model/scoped_model.dart';
import 'package:url_launcher/url_launcher.dart';

import '../scoped_models/main.dart';
import '../models/news.dart';

class NewsDetailPage extends StatelessWidget {

  _launchURL(String url) async {
    String url1 = url;
    if (await canLaunch(url1)) {
      await launch(url1);
    } else {
      throw 'Could not launch $url1';
    }
  }
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return ScopedModelDescendant<MainModel>(
      builder: (BuildContext context, Widget child, MainModel model) {
        return WillPopScope(
          onWillPop: () {
            print('back button presses');
            Navigator.pop(context, false);
            return Future.value(false);
          },
          child: ScopedModelDescendant<MainModel>(
              builder: (BuildContext context, Widget child, MainModel model) {
            final News news = model.allnews[model.selectedIndex];
            print('news details main');
            print(news);
            return Scaffold(
              appBar: AppBar(
                title: Text(news.title),
              ),
              body: Column(
                children: <Widget>[
                  Container(
                    padding: EdgeInsets.all(20.0),
                    child: Text(
                      news.description,
                      style: TextStyle(
                        fontSize: 20.0,
                      ),
                    ),
                  ),
                  Center(
                    child: FlatButton(
                      onPressed: (){
                        _launchURL(news.url);
                      },
                      child: Text('further details'),
                    ),
                  ),
                ],
              ),
            );
          }),
        );
      },
    );
  }
}

news.url 是一个字符串,其中包含选定新闻的 url。我已经在 _launchURL 方法中传递了 url。 (此方法与此链接完全相同:https://pub.dartlang.org/packages/url_launcher#-readme-tab-

但是每当我点击那个 FlatButton 时它都会给我一个错误:

[ERROR:flutter/shell/common/shell.cc(186)] Dart Error: Unhandled exception:
E/flutter ( 5959): MissingPluginException(No implementation found for method canLaunch on channel plugins.flutter.io/url_launcher)
E/flutter ( 5959): #0      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:291:7)
E/flutter ( 5959): <asynchronous suspension>
E/flutter ( 5959): #1      canLaunch (package:url_launcher/url_launcher.dart:111:25)
E/flutter ( 5959): <asynchronous suspension>
E/flutter ( 5959): #2      NewsDetailPage._launchURL (package:project/widgets/newsdetail.dart:12:15)
E/flutter ( 5959): <asynchronous suspension>
E/flutter ( 5959): #3      NewsDetailPage.build.<anonymous closure>.<anonymous closure>.<anonymous closure> (package:project/widgets/newsdetail.dart:52:25)
E/flutter ( 5959): #4      _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:507:14)
E/flutter ( 5959): #5      _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:562:30)
E/flutter ( 5959): #6      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:102:24)
E/flutter ( 5959): #7      TapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:242:9)
E/flutter ( 5959): #8      TapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:175:7)
E/flutter ( 5959): #9      PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:315:9)
E/flutter ( 5959): #10     PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:73:12)
E/flutter ( 5959): #11     PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:101:11)
E/flutter ( 5959): #12     _WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:180:19)
E/flutter ( 5959): #13     _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:158:22)
E/flutter ( 5959): #14     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:138:7)
E/flutter ( 5959): #15     _WidgetsFlutterBinding&BindingBase&GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:101:7)
E/flutter ( 5959): #16     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:85:7)
E/flutter ( 5959): #17     _invoke1 (dart:ui/hooks.dart:173:13)
E/flutter ( 5959): #18     _dispatchPointerDataPacket (dart:ui/hooks.dart:127:5)

我有 url_launcher: ^5.0.2 已经安装在 py pubspec.yaml 文件中。请告诉错误是什么,以及解决方法。

【问题讨论】:

  • 再次尝试更新 yaml 中的依赖项
  • 试过了,不行,和我的SDK版本有关系吗?

标签: dart flutter unhandled-exception flutter-dependencies


【解决方案1】:

尝试使用不带'await'的函数launch.() 希望它有效 只是:launch()

【讨论】:

  • 这对我有用!有人能解释一下为什么吗?
  • 我也想知道为什么...
【解决方案2】:

尝试重启应用。 不是热重启或热重载;完全重启

【讨论】:

    【解决方案3】:

    我删除了应用程序并重新安装在android中工作

      launchURL()  async {
      const url = 'https://flutter.dev';
      if (await canLaunch(url)) {
           await launch(url,
            forceSafariVC: true,
            enableJavaScript: true,);
        } else {
          throw 'Could not launch $url';
        }
      }
    

    【讨论】:

      猜你喜欢
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 2011-06-29
      • 2019-05-15
      • 2017-02-05
      • 2015-10-16
      相关资源
      最近更新 更多