调用参数函数获取Flutter中的数据

e0bqpujr  于 2022-11-25  发布在  Flutter
关注(0)|答案(2)|浏览(111)

我正在学习并尝试在从API获取数据时调用函数中的参数时添加参数,但我对如何在小部件中调用它们有点困惑。

static Future<Map<String, DataKuliahModel>> getDataKuliah(String smt) async {
    String url = Constant.baseURL;
    String token = await UtilSharedPreferences.getToken();
    await Future.delayed(const Duration(milliseconds: 1000));
    // String responseJson = await rootBundle.loadString('assets/1.json');

    Map<String, DataKuliahModel> finalResult = {};
    final response = await http.get(
      Uri.parse(
        '$url/auth/mhs_siakad/perwalian/get_paket',
      ),
      headers: {
        'Authorization': 'Bearer $token',
      },
    );
    final result = jsonDecode(response.body)['data'] as Map<String, dynamic>;
    result.forEach((key, value) {
      DataKuliahModel dataKuliah = DataKuliahModel.fromMap(value);
      finalResult.addAll({
        key: dataKuliah,
      });
    });
    return finalResult;
  }

我想在这里叫他

jogvjijk

jogvjijk1#

当您宣告具有位置参数的函式时,您必须在呼叫该函式时提供这些参数。

import 'package:flutter/material.dart';

class Services {
  static Future<String> greeting(String name) async {
    /// this function doesn't need to be Future
    /// but when you call API to get some data it should be a Future

    return 'Hello $name';
  }
}

class MyWidget extends StatelessWidget {
  const MyWidget({super.key});

  @override
  Widget build(BuildContext context) {
    return FutureBuilder(

      /// pass positional parameter to [greeting] here
      future: Services.greeting('Dash'), 
      builder: (context, AsyncSnapshot<String> snapshot) {
        return Center(
          child: Text(snapshot.data ?? 'default'),
        );
      },
    );
  }
}

结果:Hello Dash
在您的示例中,smt似乎是int而不是String,您必须将其作为查询参数传递给http请求,如下所示

static Future<Map<String, DataKuliahModel>> getDataKuliah(int smt) async {
    String url = Constant.baseURL;
    String token = await UtilSharedPreferences.getToken();
    await Future.delayed(const Duration(milliseconds: 1000));
    // String responseJson = await rootBundle.loadString('assets/1.json');

    Map<String, DataKuliahModel> finalResult = {};
    final response = await http.get(
     // Uri.parse(
      //  '$url/auth/mhs_siakad/perwalian/get_paket',
     // ),
        Uri.http(url, '/auth/mhs_siakad/perwalian/get_paket', 
        {'smt':smt}),
      headers: {
        'Authorization': 'Bearer $token',
      },
    );
    final result = jsonDecode(response.body)['data'] as Map<String, dynamic>;
    result.forEach((key, value) {
      DataKuliahModel dataKuliah = DataKuliahModel.fromMap(value);
      finalResult.addAll({
        key: dataKuliah,
      });
    });
    return finalResult;
  }
6mw9ycah

6mw9ycah2#

您看过Uri replace方法吗?
您可以执行以下操作:

Uri.parse('$url/auth/mhs_siakad/perwalian/get_paket').replace(queryParameters:{ "smt":"$smt"});

FutureBuilder上的更新:

// Put this outside your build function
Future<Map<String, DataKuliahModel>> DK ; 

// Put this in your initState if you want the future to run on page load or use it for events like onTap 
DK = Service.getDataKuliah(<PARAM>); 

// This is in your build method
FutureBuilder(

future:DK,
builder: (context, snapshot) {
// add wigets to display results here

}

)

相关问题