我確信我錯過了一些很明顯的東西,但是,我無法理解為什么會發生這種情況。
我呼叫了一個名為 readJSON 的方法,該方法將一個 JSON 檔案讀入一個物件。我使用該長度來渲染頁面,每個頁面都有一個基于主物件索引的復選框串列。
我已經使用了。https://github.com/afzalali15/onboarding_demo來在我的應用程式中構建這個入職任務。
*需要注意的是,在我執行這個任務時,我看到熱多載的作業非常順利。當我關閉 VSCode 并在之后再次打開時,readJSON 方法從未運行。
class _OnboardingPageState extends State< OnboardingPage> {
List<OnboardingTodo> onboardingTasks = []。
final _controller = OnboardingController();
String response = ''/span>;
bool value = false;
Future<void> readJson() async {
response = await rootBundle.loadString('assets/cfg/onboarding_tasks.json') 。
final onboardingTodo = onboardingTodoFromJson(response);
onboardingTasks.addAll(onboardingTodo.values)。
print("onboarding length - "/span> onboardingTasks.length.toString())。
}
@override
void initState() {
readJson()。
super.initState()。
}
@override
Widget build(BuildContext context) {
return Scaffold(
體。SafeArea(
孩子。堆疊(
children: [
PageView.builder(
控制器。_controller.pageController,
onPageChanged: _controller.selectedPageIndex,
itemCount: onboardingTasks.length,
itemBuilder。(context, index) {
return Container(
孩子。列(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Image.asset(
_controller.onboardingPages[index].imageAsset,
高度。100,
width: 100,
),
SizedBox(高度:32)。
文本(
_controller.onboardingPages[index].title,
風格。TextStyle(
字體大小。24, fontWeight: FontWeight.w500)。)
),
SizedBox(高度:32)。
擴展的(
孩子。容器(
child: ListView.builder(
padding: const EdgeInsets.all(8) 。
itemCount: onboardingTasks[index].tasks.length,
itemBuilder:
(BuildContext context, int chkBoxindex) {
return CheckboxListTile(
controlAffinity:
ListTileControlAffinity.leading,
value: 值。
標題。文本(
'${onboardingTasks[index].tasks[chkBoxindex].title})。)
onChanged: (bool newVal) {
setState(() {
value = newVal;
});
},
);
},
),
),
),
],
),
);
},
),
//顯示頁面索引的圓點。
...
//下一個/結束按鈕。
...
],
),
),
);
}
}
感謝任何幫助,或建議。謝謝
。uj5u.com熱心網友回復:
嘗試 void initState() { super.initState(); WidgetsBinding.instance .addPostFrameCallback((_) => readJson(); ); }
或使用加載器如
bool loading = true;
Future<void> readJson() async {
setState(() => loading = true) 。
response = await rootBundle.loadString('assets/cfg/onboarding_tasks.json') 。
final onboardingTodo = onboardingTodoFromJson(response);
onboardingTasks.addAll(onboardingTodo.values)。
print("onboarding length - "/span> onboardingTasks.length.toString())。
setState(() => loading = false) 。
}
并把加載器放到UI中,就像
一樣itemBuilder: (context, index) {
return loading ? YourProgressIndicatorWidget : 容器(child: ......)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/326618.html
標籤:
