0

我是 Flutter 的新手,我无法在 futureBuilder 范围之外的小部件中显示 snapshot.data 值,可以这样做吗?如果不是,那么更好的方法是什么?

//...
  var result = '0.00';
  
  Row(children: [
    const Text('RESULT: '),
    FutureBuilder(
        future: Obj.mapaProvider(widget
            .property1
            .toString()),
        builder: (context, snapshot) {
          if (snapshot.connectionState == ConnectionState.done) {
            result = snapshot.data.toString();
            return Text(
             result,
              style: const TextStyle(
                fontWeight: FontWeight.bold,
              ),
            );
          } else {
            return const Text("WITHOUT RESULT");
          }
        }),                
  ]),
const Divider(
height: 20,
thickness: 5,
),
// In this widget need the new value of result variable from futurebuilder snapshot.data
OtherWidget(result), // PERHAPS SHOWS 0,00 **
//...
4

1 回答 1

0

你应该使用provider那个链接

  1. 您在应用程序中启动您的根 Build 方法:
@override
  Widget build(BuildContext context) {
    return MultiProvider(  // Multi means you can have more providers if you need
      providers: [
        ChangeNotifierProvider(builder: (context) => MyStateClass()),
      ],
      child: MaterialApp(....
  1. 现在您可以将所有需要共享的数据放在 MyStateClass() 中,并将底层 Widgets 放在里面:
Consumer<MyStateClass>(builder: (context, state, child) {

      // your code here - return(SomeOtherWidget());
    })
  1. 或在您的 Build 方法中:
  @override
  Widget build(BuildContext context) {
   MyStateClass state = Provider.of<MyStateClass>(context);
   // ... TODO  ... return (Widget)

现在您可以将 snapshot.data 分配给提供者,并且可以访问项目中的任何位置。

于 2022-01-05T04:12:22.697 回答