在使用URL启动器插件时从Firestore调用URL



我正在使用url_launcher插件,并希望从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. 您需要创建一个future,从firestore返回所需的imageurl。下面的代码是基于我的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');
    }
    )
    

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

最新更新