在 flutter

如何解决在 flutter

Watch this video to understand the problem properly.

当我构建项目时,小部件没有显示,但是当我重新保存项目时,小部件正在显示。我在下面给出我的代码。

  • main.dart :-

(这是保存到每个页面的路由的主文件)

import 'package:flutter/material.dart';
import 'package:player_profile/first.dart';
import 'package:player_profile/second.dart';
import 'package:player_profile/third.dart';

void main() {
  runApp(MaterialApp(
    initialRoute: '/first',routes: {
      '/first': (context) => First(),'/second': (context) => Second(),'/third': (context) => Third()
    },));
}
  • first.dart :-

(这是应用程序的第一页,其中包含所有团队数据的小部件列表。点击团队的小部件后,它将转到第二页)

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'package:player_profile/teamData.dart';
import 'dart:convert' as convert;

class First extends StatefulWidget {
  @override
  _FirstState createState() => _FirstState();
}

class _FirstState extends State<First> {
  List<Widget> teamList = [];

  void getTeamList() async {
    var url = Uri.parse('https://www.balldontlie.io/api/v1/teams');
    http.Response response = await http.get(url);
    if (response.statusCode == 200) {
      var jsonData = convert.jsonDecode(response.body) as Map<String,dynamic>;

      if (jsonData['data'] != null) {
        jsonData['data'].forEach((v) {
          // teamData.add(new TeamData.fromJson(v));
          teamList.add(Padding(
            padding: const EdgeInsets.all(8.0),// ignore: deprecated_member_use
            child: RaisedButton(
                onPressed: () {
                  Navigator.pushNamed(context,'/second');
                },child: Column(
                  mainAxisAlignment: MainAxisAlignment.center,crossAxisAlignment: CrossAxisAlignment.center,children: [
                    Text(
                      'Name : ${TeamData.fromJson(v).name}',style: TextStyle(
                        color: Colors.red,fontSize: 15.0,),Text(
                      'Abbreviation : ${TeamData.fromJson(v).abbreviation}',style: TextStyle(
                        color: Colors.blue,Text(
                      'City : ${TeamData.fromJson(v).city}',Text(
                      'Conference : ${TeamData.fromJson(v).conference}',Text(
                      'Division : ${TeamData.fromJson(v).division}',)
                  ],)),));
        });
      }
    }
  }

  @override
  void initState() {
    super.initState();
    getTeamList();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        backgroundColor: Colors.black,appBar: AppBar(
          title: Text('Team'),body: GridView.count(
          crossAxisCount: 2,children: teamList,));
  }
}
  • second.dart :-

(这是应用程序的第二页,其中包含从 http 调用接收的所有播放器详细信息小部件。它从 http 接收数据,但小部件未显示。小部件仅在重新保存项目后显示。在 setState() 之后,它不是重新构建页面。)

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'dart:convert' as convert;
import 'package:player_profile/singlePlayer.dart';

class Second extends StatefulWidget {
  @override
  _SecondState createState() => _SecondState();
}

class _SecondState extends State<Second> {
  List<SinglePlayerData> playersList = [];
  List<Widget> showPlayers = [];

  getAllPlayers() async {
    var url = Uri.parse('https://www.balldontlie.io/api/v1/players');
    http.Response response = await http.get(url);
    if (response.statusCode == 200) {
      var jsonData = convert.jsonDecode(response.body) as Map<String,dynamic>;

      jsonData['data'].forEach((v) {
        SinglePlayerData playerData = SinglePlayerData(
            v['id'],v['first_name'],v['height_feet'],v['height_inches'],v['last_name'],v['position'],v['weight_pounds'],v['team']['id'],v['team']['abbreviation'],v['team']['city'],v['team']['conference'],v['team']['division'],v['team']['full_name'],v['team']['name']);
        playersList.add(playerData);
        setState(() {
          print('setState');
          showPlayers.add(Padding(
            padding: const EdgeInsets.all(8.0),'/third',arguments: {'data': playerData});
                },children: [
                    Container(
                        height: 75.0,width: 75.0,child: Image(image: AssetImage('images/player2.png'))),Padding(
                      padding: const EdgeInsets.all(5.0),child: Text(
                        'Name : ${playerData.firstName} ${playerData.lastName}',style: TextStyle(fontSize: 15.0,color: Colors.red),Text(
                      'Team : ${playerData.name}',color: Colors.blue),child: Text(
                        'Position : ${playerData.position}',color: Colors.purple),));
        });
      });
      print(playersList[1].firstName);
    }
  }

  @override
  void initState() {
    print('initState');
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    print('build');
    getAllPlayers();
    return Scaffold(
        backgroundColor: Colors.black,appBar: AppBar(
          title: Text('Players'),children: showPlayers,));
  }
}
  • teamData.dart(模型类):-

    (这是团队数据的模型类)

     class TeamData {
       int? id;
       String? abbreviation;
       String? city;
       String? conference;
       String? division;
       String? fullName;
       String? name;
    
       TeamData(this.id,this.abbreviation,this.city,this.conference,this.division,this.fullName,this.name);
    
       TeamData.fromJson(Map<String,dynamic> json)
           : id = json['id'],abbreviation = json['abbreviation'],city = json['city'],conference = json['conference'],division = json['division'],fullName = json['full_name'],name = json['name'];
    
       Map<String,dynamic> toJson() {
         final Map<String,dynamic> data = new Map<String,dynamic>();
         data['id'] = this.id;
         data['abbreviation'] = this.abbreviation;
         data['city'] = this.city;
         data['conference'] = this.conference;
         data['division'] = this.division;
         data['full_name'] = this.fullName;
         data['name'] = this.name;
         return data;
       }
     }
    
  • singlePlayer.dart(模型类):-

(这是玩家详细数据的模型类)

class TeamData {
  int? id;
  String? abbreviation;
  String? city;
  String? conference;
  String? division;
  String? fullName;
  String? name;

  TeamData(this.id,this.name);

  TeamData.fromJson(Map<String,dynamic> json)
      : id = json['id'],name = json['name'];

  Map<String,dynamic> toJson() {
    final Map<String,dynamic>();
    data['id'] = this.id;
    data['abbreviation'] = this.abbreviation;
    data['city'] = this.city;
    data['conference'] = this.conference;
    data['division'] = this.division;
    data['full_name'] = this.fullName;
    data['name'] = this.name;
    return data;
  }
}

解决方法

当您想为将来获取某些东西时,请使用 FutureBuilder


  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.cyan,body: FutureBuilder<Transaction>(
        future: getAllPlayers(),builder: (context,snapshot) {
          if (snapshot.connectionState == ConnectionState.waiting)
            return CircularProgressIndicator();
          if (snapshot.hasError)
            return Column(
              children: [
                Text(
                  snapshot.error.toString(),),],);
          if (snapshot.hasData) {
            var data = snapshot.data!;
            ///todo:: add you design model
            return GridView.count(
          crossAxisCount: 2,children: showPlayers,);
          }
          return Text('Something was wrong!');
        },);
  }

如果它解决了您的问题,请告诉我。

,

我认为您只需要在 setState((){}); 的末尾调用 getTeamList()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res