我試圖讓一個函式只運行一次(渲染一個小部件)。這是我對螢屏的主要構建功能。您可能會忽略大部分代碼,只需查看底部的注釋行即可。
Widget build(BuildContext context) {
workoutId = box.get('workoutId');
final arguments = ModalRoute.of(context)!.settings.arguments as Map;
exerciseName = arguments["exerciseName"];
exerciseId = arguments["exerciseId"];
return Scaffold(
appBar: AppBar(
leading: IconButton(
icon: const Icon(
Icons.arrow_back,
color: kBlack,
),
onPressed: () {
Navigator.pop(context);
}),
backgroundColor: Colors.transparent,
title: Text(
exerciseName,
style: const TextStyle(
color: kAppTextColor, fontSize: kAppButtonTextFontSize),
),
),
body: Container(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Expanded(
child: Container(
height: SizeConfig.screenHeight,
padding: const EdgeInsets.all(0),
child: ClipRRect(
child: BackdropFilter(
filter: ImageFilter.blur(sigmaX: 15, sigmaY: 15),
child: Container(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: [
_buildInputHeaderRowWidget(),
_buildInputRowWidget(),
_buildDataTable(),
const Padding(
padding: EdgeInsets.only(top: 10),
child: Divider(
height: 10,
color: Colors.grey,
thickness: 3,
),
),
//_buildDataTableForCompletedExercises(),
Expanded(
child: Container(
child: (workoutId != null)
? _buildDataTableForCompletedExercises() ///THIS NEEDS TO RUN ONLY ONCE
: const Text(
'Workout ID is null',
style: TextStyle(
fontSize: kAppButtonTextFontSize),
),
),
),
你是如何做到這一點的?我需要設定一個標志還是什么?
uj5u.com熱心網友回復:
好的,所以你想要做的基本上是“快取”你顯示的函式的結果,這是我認為你可以做的:
首先宣告一個可為空的小部件,您可以隨意呼叫它:
Widget? _completedExercises;
那么要么:
- 將其分配為 init 狀態的函式:
void initState() {
_completedExercises = _buildDataTableForCompletedExercises();
super.initState();
}
然后在構建方法上使用小部件:
...
child: (workoutId != null)
? _completedExercises!
: const Text(
...
或 2. 使函式本身快取值:
Widget _buildDataTableForCompletedExercises() {
if (_completedExercises == null) {
_completedExercises = Container(); // here put whatever your function used to be.
}
return _completedExercises!;
}
這個想法是函式第一次運行時,它會分配 的值,_completedExercises然后所有后續運行將只回傳前一個值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/374343.html
上一篇:如何在顫動中顯示影像滑塊?
