【发布时间】:2021-07-07 19:36:35
【问题描述】:
我在 Flutter 中遇到问题。我不习惯有效地使用未来函数。
我试图从有状态类的 InitSate 中的 Future 函数中获取一个值,然后使用 Future Builder 中的返回值。
但是,当我在 initstate 中执行 l_orders = await xyz(); 或 l_orders = xyz(); 时,它不起作用我的屏幕无法加载它总是只显示 CircularProgressIndicator。
但是,当我将 l_orders = xyz(); 移到 InitState 之外时,一切正常。我想在 InitState 中执行此操作,因为稍后我也想使用 setState。所以这是我在进入 setState 部分之前的第一步。
我们非常感谢任何形式的帮助。谢谢你
我的代码是 -
class _OrderScreenState extends State<OrderScreen> {
Future<String> xyz() async{
return("processing ....");
}
@override
Widget build (BuildContext context) {
final orders = Provider.of<Orders>(context);
var l_orders;
@override
void initState() async {
super.initState();
l_orders = await xyz();
}
return WillPopScope(
onWillPop: () async {
return false;
},
child: Scaffold(
appBar: AppBar(
title: Text('Orders'),
actions: <Widget>[Padding(
padding: const EdgeInsets.all(8.0),
//child: IconButton(icon:Icon(Icons.home, size: 30,),onPressed: (){Navigator.of(context).pushNamed(HomePage.routeName);},),
),],
),
body: FutureBuilder(
future: l_orders,
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (!snapshot.hasData) {
// while data is loading:
return Center(
child: CircularProgressIndicator(backgroundColor: Colors.red,valueColor: new AlwaysStoppedAnimation<Color>(Colors.blue)),
);
} else {
// data loaded:
return Text("Test");
}
},
),
floatingActionButton: FloatingActionButton(
onPressed: (){Navigator.of(context).pushNamed(HomePage.routeName);},
child: Icon(Icons.home,size: 40,),
//backgroundColor: Colors.green,
),
floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat,
),
);
}
}
【问题讨论】:
标签: flutter flutter-futurebuilder