Как передать параметр функции свойства future в FutureBuilder - PullRequest
1 голос
/ 07 августа 2020

Моя проблема в том, что я не знаю, как передать аргумент маршрута моей функции, которая находится внутри FutureBuilder.

Пожалуйста, посмотрите мой код ниже.

class StudyDetailsArguments {
  final String listid;

  StudyDetailsArguments(this.listid);
}

// A widget that extracts the necessary arguments from the ModalRoute.
class ExtractStudyDetails extends StatelessWidget {
  static const routeName = '/studydetails';
  
  @override
  Widget build(BuildContext context) => FutureBuilder(

  // Here I want to pass in the args.listid but I cant figure out how to get it in there
    future: getDetails("cc0e5c1f-02b0-4f4f-9f51-fa70ac7e9c08"),
    builder: (context, snapshot) {
     // here is fine to use the argument
      final StudyDetailsArguments  args = ModalRoute.of(context).settings.arguments;
      if (snapshot.hasData) {
        // Build the widget with data.
        //return Text('hasData: ${snapshot.data}');
        return Scaffold(
            appBar: AppBar(
            title: Text(snapshot.data),
      ),
            body:
            Center(
            child:
            Text('${snapshot.data}'))
              );
            } else {
              // We can show the loading view until the data comes back.
            return Scaffold(
            appBar: AppBar(
              title: Text("Loading..."),
            ),
            body:
            Center(
                child:
                Text('Loading...'))
        );
      }
    },
  );
}

Future<String> getDetails(listid) async {
  var details = "";
  await Firestore.instance
      .collection('list')
      .document(listid)
      .get()
      .then((DocumentSnapshot ds) {
        print(ds.data["title"]);
        // use ds as a snapshot
        details = ds.data["title"];
    return ds.data;
  });
  return details;
}

Я хочу использовать эту строку args.listid вместо cc0e5c1f-02b0-4f4f-9f51-fa70ac7e9c08, но, похоже, я не могу понять, как передать параметр. Как я отправляю значение параметра (которое сейчас не используется) в виджет - это в виджете:

 onTap: () => {
                    Navigator.pushNamed(context, ExtractStudyDetails.routeName,
                        arguments: StudyDetailsArguments(
                          study.listid,
                        ))
                  },

1 Ответ

2 голосов
/ 07 августа 2020
@override
Widget build(BuildContext context) {
  
  final StudyDetailsArguments args = ModalRoute.of(context).settings.arguments;

  return FutureBuilder(
    future: getDetails(args.listid),
    [...]
  )
}

Подробнее см. docs

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...