Необработанное исключение: тип String не является подтипом типа Future <String>в приведении типа - PullRequest
0 голосов
/ 18 июня 2020

Я получаю эту ошибку, может ли кто-нибудь помочь мне разобраться с этой ошибкой

static Future<String> get_video_lecture_subject(int schoolId,int classroom) async {

  var body;
   body = jsonEncode({
  "school_id": schoolId,
  "classroom": classroom,
  });

  final response = await http.post(
      'https://b5c4tdo0hd.execute-api.ap-south-1.amazonaws.com/testing/get-video-lecture-subjects',
      headers: {"Content-Type": "application/json"},
      body: body,
  );

   print(response.body.toString());
   return response.body.toString();
 }

Я использовал вышеуказанную функцию в функции getpref ()

 getpref() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    int classNo = int.parse(prefs.getString("class")[0]);
    int schoolId = prefs.getInt("school_id");

      print("hello");
      response=(await ApiService.get_video_lecture_subject(schoolId, classNo)) as Future<String> ;
      print(response);
  }

Ответы [ 3 ]

0 голосов
/ 18 июня 2020

Замените строку на эту

      final res = await ApiService.get_video_lecture_subject(schoolId, classNo);

Обновление: измените имя переменной (возможно, ее тип был инициализирован как Future)

0 голосов
/ 18 июня 2020

Посмотрите этот пример и дайте мне знать, работает ли он

import 'dart:async';

import 'package:flutter/material.dart';

void main() {
  getPrefs();
  runApp(MyApp());
}

void getPrefs() async {
  String value = await yourfunction();
  print(value);
}

Future<String> yourfunction() {
  final c = new Completer<String>();

  // Below is the sample example you can do your api calling here
  Timer(Duration(seconds: 1), () {
    c.complete("you should see me second");
  });
  // Process your thigs above and send the string via the complete method.
  // in you case it will be c.complete(response.body);

  return c.future;
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        home: Scaffold(
      body: SafeArea(
          child:
              /* FutureBuilder<String>(
            future: yourfunction(),
            builder: (context, snapshot) {
              if (snapshot.hasData) {
                return Text(snapshot.data);
              }

              return CircularProgressIndicator();
            }), */
              Text('')),
    ));
  }
}

0 голосов
/ 18 июня 2020

Выражение:

(await ApiService.get_video_lecture_subject(schoolId, classNo)) as Future<String>

вызывает ваш метод get_video_lecture_subject. Это возвращает Future<String>. Затем вы ждете этого будущего, что приводит к String.

Затем вы пытаетесь преобразовать это String в Future<String>. Это не удается, потому что строка - это не будущее.

Попробуйте удалить as Future<String>.

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