Flutter Error: How to pass data one widget class to another normal class?
Flutter Error: How to pass data one widget class to another normal class?
我需要将数据 s_id 从 Stateful class (TeamButton) 传递到 NetReq class。
两个class都在同一个file.I不明白怎么办?
我不明白怎么办?我不明白怎么办?
我怎样才能做到?
这是我的有状态小部件。
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,它位于有状态小部件
下方
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');
}
}
}
您可以使用 State
class 的 widget
参数来执行此操作。
future: NetReq.fetchTeams(widget.s_id)
widget
参数在 State<T>
class 中可用,它包含对您的 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);
我需要将数据 s_id 从 Stateful class (TeamButton) 传递到 NetReq class。 两个class都在同一个file.I不明白怎么办? 我不明白怎么办?我不明白怎么办? 我怎样才能做到?
这是我的有状态小部件。
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,它位于有状态小部件
下方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');
}
}
}
您可以使用 State
class 的 widget
参数来执行此操作。
future: NetReq.fetchTeams(widget.s_id)
widget
参数在 State<T>
class 中可用,它包含对您的 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);