【问题标题】:Flutter Error: How to pass data one widget class to another normal class?Flutter 错误:如何将一个小部件类的数据传递给另一个普通类?
【发布时间】:2021-08-06 18:40:02
【问题描述】:

我需要将数据 s_id 从 Stateful 类 (TeamButton) 传递给 NetReq 类。 两个类都在同一个文件中。我不明白怎么办? 我不明白怎么办?我不明白怎么办? 我怎样才能做到?

这是我的有状态小部件。

import 'dart:convert';

import 'package:fi_digital_earn/DashBoards/TeamFile/team_list.dart';
import 'package:fi_digital_earn/DashBoards/TeamFile/team_model.dart';
import 'package:flutter/material.dart';
import 'package:flutter/foundation.dart';
import 'package:http/http.dart' as http;

import '../../drawercontent.dart';

class TeamButton extends StatefulWidget {
  final s_id;

  const TeamButton({Key? key, this.s_id}) : super(key: key);

  @override
  _TeamButtonState createState() => _TeamButtonState();
}

class _TeamButtonState extends State<TeamButton> {
  @override

  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Color(0xff392850),
        title: Row(
          // crossAxisAlignment: CrossAxisAlignment.center,

          // mainAxisAlignment: MainAxisAlignment.center,
          children: [
            InkWell(
                onTap: () {
                  Navigator.pop(context);
                },

                child: Icon(Icons.arrow_back)),
            SizedBox(
              width: 10.0,
            ),
            Text(

              "Teams",
              style: TextStyle(fontStyle: FontStyle.italic),
            ),
          ],
        ),

        actions: [
          IconButton(
            icon: Icon(Icons.person),
            onPressed: () => print("open cart"),
          ),

        ],
      ),
      drawer: Drawer(
        child: DrawerContent(),
      ),

      body: Column(
        children: [
          SizedBox(height: 50),
          Flexible(
            // ignore: missing_required_param

            child: FutureBuilder<List<Model>>(
              future: NetReq.fetchTeams(),
              builder: (context, snapshot) {
                if (snapshot.hasError) {
                  return Text("Error ${snapshot.error}");

                } else if (snapshot.hasData) {
                  return Container(
                      child: GridView.count(
                          childAspectRatio: 1.0,
                          padding: EdgeInsets.only(left: 20, right: 20),

                          crossAxisCount: 2,
                          crossAxisSpacing: 18,
                          mainAxisSpacing: 18,
                          children: snapshot.data!.map((team) {
                            return GestureDetector(

                              onTap: () {
                                print(team.teamType);
                                Navigator.push(
                                  context,
                                  MaterialPageRoute(

                                      builder: (context) => List1(
                                            teamUniqId: team.teamUniqId,
                                            teamType: team.teamType,
                                            user: team.user,
                                          )),

                                );
                              },
                              child: Container(
                                decoration: BoxDecoration(
                                    color: Color(0xffd8d7f5),

                                    borderRadius: BorderRadius.circular(10)),
                                child: Column(
                                  mainAxisAlignment: MainAxisAlignment.center,
                                  children: <Widget>[
                                    Center(

                                      child: Text(team.teamType,
                                          style: TextStyle(
                                              color: Colors.black,
                                              fontSize: 20,
                                              fontWeight: FontWeight.w600)),

                                    ),
                                  ],
                                ),
                              ),
                            );

                          }).toList()));
                }
                return Center(
                  child: CircularProgressIndicator(),
                );

              },
            ),
          ),
        ],
      ),

    );
  }
}

这是我在有状态小部件下面的另一个类

class NetReq {
  static var url = Uri.parse(
      "https://www.a2rstore.in/api_mlm/v1/teamListApi.php?sid=123&uid=kkk");
  static List<Model> parseTeams(String responseBody) {
    var list = json.decode(responseBody) as List<dynamic>;
    List<Model> photos = list.map((model) => Model.fromJson(model)).toList();

    return photos;
  }

  static Future<List<Model>> fetchTeams() async {
    
    // final response = await http.get(url);
    var response = await http.get(url);
    if (response.statusCode == 200) {
      return compute(parseTeams, response.body);
    } else {

      throw Exception('Can\'t get Data');
    }
  }
}

【问题讨论】:

    标签: flutter dart flutter-layout flutter-dependencies flutter-test


    【解决方案1】:

    您可以使用 State 类的 widget 参数来执行此操作。

    future: NetReq.fetchTeams(widget.s_id)
    

    widget 参数在 State&lt;T&gt; 类中可用,它包含对您的 StatefulWidget 的引用,在您的情况下为 TeamButton

    然后,在 fetchTeams 函数中使用它。

    既然您想将s_id 添加到您的主字符串中,请像这样更改您的代码。

    static String baseUrl = "https://www.a2rstore.in/api_mlm/v1/teamListApi.php?sid=#sid&uid=kkk";
    
    static Future<List<Model>> fetchTeams(var s_id) async {
        Uri url = Uri.parse(baseUrl.replaceFirst("#sid", s_id.toString());
        var response = await http.get(url);
    

    【讨论】:

    • @NishanthReddy 实际上我想做这样的静态 var url = Uri.parse("a2rstore.in/api_mlm/v1/teamListApi.php?sid=${s_id}&uid=kkk");我想在这个 sid=${s_id} 中添加 s_id
    • 其实我想这样做 static var url = Uri.parse("a2rstore.in/api_mlm/v1/teamListApi.php?sid=${s_id}&uid=kkk");我想在这个 sid=${s_id} 中添加 s_id
    • 您好,您的url是静态变量,不能这样直接使用。我已经更新了我的答案以实现类似的东西。看看吧。
    • 很高兴有帮助:D
    • 我是 Flutter 的新手。我必须学习与此相关的所有内容,我也不明白学习和后端是如何的,并且在youtube上没有发现任何特别的东西,你能帮我学习
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-13
    • 1970-01-01
    • 1970-01-01
    • 2017-08-13
    • 2015-07-09
    相关资源
    最近更新 更多