Как передать Future <void>_name (String _string) виджету во Flutter? - PullRequest
0 голосов
/ 21 марта 2020

Это код для моего класса ...

class List extends StatefulWidget {
@override
_ListState createState() => _ListState();
}

class _ListState extends State<List> {
  Future<void> _makePhoneCall(String url) async {
   if (await canLaunch(url)) {
    await launch(url);
    } else {
      throw 'Could not launch $url';
    }
}

@override
Widget build(BuildContext context) {
return Scaffold(
    appBar: customAppbar('Contact Us'),
    body: ListView(children: <Widget>[
      _listTile('1234-1234567-123', 'Exam Enquiry', Icons.call,
          _makePhoneCall('tel:12345'))
    ]));
}
}

И я хочу передать функцию _makePhoneCall в Widget _listTile, но получил ошибку:

Тип аргумента ' Future 'нельзя присвоить типу параметра' Future Function (String) '

Код для виджета _listTile следующий:

Widget _listTile(String title, String subTitle, IconData iconData,
Future<void> _makePhoneCall(String url)) {
return Padding(
padding: EdgeInsets.only(left: 24.0),
child: ListTile(
  title: Text(title),
  subtitle: Text(subTitle),
  trailing: Padding(
    padding: const EdgeInsets.all(0.0),
    child: RawMaterialButton(
      onPressed: () => _makePhoneCall,
      child: Icon(
        iconData,
        color: Colors.white,
      ),
      elevation: 2,
      shape: CircleBorder(),
      fillColor: Color(0xff7061aa),
    ),
  ),
),
);

}

1 Ответ

0 голосов
/ 21 марта 2020

Вот необходимые изменения:

    body: ListView(children: <Widget>[
      _listTile('1234-1234567-123', 'Exam Enquiry', Icons.call,
          _makePhoneCall)
    ]));
    child: RawMaterialButton(
      onPressed: () => _makePhoneCall('tel:12345'),
...