Вызов URL-адреса из Firestore при использовании плагина запуска URL-адресов

Я использую плагин url_launcher и хочу вызывать URL-адрес из коллекции Firestore, а не жестко кодировать его в приложение.

Я пробовал множество способов сделать это (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';
  }
}

person cc976a    schedule 01.02.2021    source источник
comment
Вместо того, чтобы иметь URL-адрес в качестве константы... передайте значение URL-адреса в качестве параметра... готово.   -  person Mariano Zorrilla    schedule 01.02.2021
comment
Честно говоря, так просто, как я уверен, это - я думаю, это то, что я пробовал, и у меня ничего не получилось. Есть ли быстрый пример, который вы могли бы показать?   -  person cc976a    schedule 01.02.2021


Ответы (1)


Вы можете сделать это, используя FutureBuilder

  1. Вам нужно создать будущее, которое возвращает требуемое imageurl из firestore. Следующий код основан на моей структуре firestore, и вам, возможно, придется кое-что изменить.

    Future<DocumentSnapshot> geturl(){
    
     final result = FirebaseFirestore.instance.collection('users').doc(FirebaseAuth.instance.currentUser.uid).get();
    
     return result;
    }
    
  2. Используйте FutureBuilder для загрузки 'url' из firestore.

    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');
             }
         )
    

Я протестировал этот код, и он отлично работает.

person ASAD HAMEED    schedule 01.02.2021