这是我的两节课(两页)。这两个班级多次开放。我将调试点放在 futurebuilder 中的两个类中。调试点运行,
我将我的两个类上传到 GitHub,请告诉我问题是什么。
MainCategory 代码:https : //github.com/bhanuka96/ios_login/blob/master/MainCategory.dart 子Category 代码:https : //github.com/bhanuka96/ios_login/blob/master/subCategory.dart
pso*_*pso 15
如文档中所述,您不应在小部件的构建事件期间为 Futurebuilder 获取 Future。
https://docs.flutter.io/flutter/widgets/FutureBuilder-class.html
未来必须更早获得,例如在 State.initState、State.didUpdateConfig 或 State.didChangeDependencies 期间。在构造 FutureBuilder 时,它不能在 State.build 或 StatelessWidget.build 方法调用期间创建。如果future和FutureBuilder同时创建,那么每次重建FutureBuilder的parent时,异步任务都会重新启动。
因此,尝试将您对getRegister方法的调用移到build 方法之外,并将其替换为返回的 Future 值。
例如,下面我有一个返回 Future 值的类,它将在 FutureBuilder 的帮助下使用。
class MyApiHelper{
static Future<List<String>> getMyList() async {
// your implementation to make server calls
return List<String>();
}
}
Run Code Online (Sandbox Code Playgroud)
现在,在您的小部件中,您将拥有如下内容:
class _MyHomePageState extends State<MyHomePage> {
Future<List<String>> _myList;
@override
void initState() {
super.initState();
_myList = MyApiHelper.getMyList();
}
@override
Widget build(BuildContext context) {
return Scaffold(body: FutureBuilder(
future: _myList,
builder: (_, AsyncSnapshot<List<String>> snapLs) {
if(!snapLs.hasData) return CircularProgressIndicator();
return ListView.builder(
itemCount: snapLs.data.length,
itemBuilder: (_, index) {
//show your list item row here...
},
);
},
));
}
}
Run Code Online (Sandbox Code Playgroud)
如上所示,Future 在initState函数中获取并在build方法内部使用,并由FutureBuilder.
我希望这可以帮到你。谢谢。
| 归档时间: |
|
| 查看次数: |
4400 次 |
| 最近记录: |