flutter 无法将数据传递到底部导航栏页面-抖动

1qczuiv0  于 2022-12-30  发布在  Flutter
关注(0)|答案(2)|浏览(169)

我有一个名为home.dart的主页,在这里我定义了其他页面,如下所示(我使用的是底部导航栏):'

late final List<Widget> _pageOptions;
@override
void initState() {
  appBarColor = colors[4];
  initializeCoins();
  _pageOptions = [
    ProScreen(Values.coins.toString()),
    CatScreen(),
    NotScreen(),
    FavScreen(),
    HomeScreen(),
  ];
  super.initState();
}

'
我正在从API接收一些数据,并在home. dart的appBar中显示它,它工作正常。问题是,当我尝试在ProScreen中显示相同的内容(将我在appbar中显示的相同变量传递给ProScreen的构造函数)时,它不工作,而是显示其默认值(0)我该怎么办?
x一个一个一个一个x一个一个二个x

ws51t4hk

ws51t4hk1#

我想这个应该可以
创建一个准备页面的异步函数(initPages),它将等待Values初始化,然后执行setState并创建页面
就像这样:

late final List<Widget> _pageOptions;

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

initPages() async {
  appBarColor = colors[4];
  await initializeCoins();
  setState(() {
    _pageOptions = [
      ProScreen(Values.coins.toString()),
      CatScreen(),
      NotScreen(),
      FavScreen(),
      HomeScreen(),
    ];
  });
}
p5fdfcr1

p5fdfcr12#

这是因为你传递的值和你想的不一样。当你下载数据时,它第一次就能正常工作,因为你使用的是接收到的数据,但是当你创建新的屏幕时,你使用的是你之前创建的静态值0。
在执行Values.coins.toString()时,您显式声明这是Values类的新“示例”。
尝试返回int,表示你正在接收Future<int> initializeCoins() async {return jsonDecode(response.body)['user']['score'],这样你就可以做类似的事情:

@override
void initState() async {
  appBarColor = colors[4];
  int coins = await initializeCoins();
  _pageOptions = [
    ProScreen(coins.toString()),
    CatScreen(),
    NotScreen(),
    FavScreen(),
    HomeScreen(),
  ];
  super.initState();
}

相关问题