使用 URL Launcher Plugin 时从 Firestore 调用 URL

问题描述

我正在使用 url_launcher plugin 并希望从 Firestore 集合中调用 URL,而不是将其硬编码到应用程序中。

我尝试了很多方法来做到这一点(Streambuilder 等...)但都无济于事。在一个非常简单的示例中,使用下面的标准 url_launcher 示例代码,如何实现?

void main() {
  runApp(Scaffold(
    body: Center(
      child: RaisedButton(
        onpressed: _launchURL,child: Text('Show Flutter homepage'),),));
}

_launchURL() async {
  const url = 'https://Flutter.dev'; // HERE IS WHERE I WANT TO CALL THE URL FROM FIRESTORE
  if (await canLaunch(url)) {
    await launch(url);
  } else {
    throw 'Could not launch $url';
  }
}

解决方法

您可以使用 FutureBuilder

完成此操作
  1. 您需要创建一个从 imageurl 返回所需 firestore 的未来。以下代码基于我的 firestore 结构,您可能需要更改一些内容。

    Future<DocumentSnapshot> geturl(){
    
     final result = FirebaseFirestore.instance.collection('users').doc(FirebaseAuth.instance.currentUser.uid).get();
    
     return result;
    }
    
  2. 使用 FutureBuilder 从 firestore 加载“url”。

    FutureBuilder(
           future: geturl(),builder: (context,snapshot){
    
               if (snapshot.hasData){
                 final String url = snapshot.data.data()['imageUrl'].toString();
                 return GestureDetector(
                     onTap: () async{
                      await launch(url);
                     },child: Text('Firestore url')
                 );
               }
               return Text('loading url');
             }
         )
    

我已经测试了这段代码,它工作得很好。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...