我在 flutter 中遇到一個問題,我想將一個函式傳遞給按鈕小部件,當按下按鈕時,我希望呼叫該函式。然而,相反的情況正在發生。當我將函式傳遞給小部件時,該函式被呼叫,當我按下按鈕時,什么也沒有發生。該函式不會被呼叫。
這是按鈕小部件代碼
import 'package:flutter/material.dart';
import 'package:finsec/core/res/export_resources.dart';
import 'package:provider/provider.dart';
import 'package:reactive_dropdown_search/reactive_dropdown_search.dart';
import 'package:reactive_forms/reactive_forms.dart';
import '../../../income/data/models/AddEditIncomeModel.dart';
import '../../data/repositories/app_database.dart';
class SaveButtons extends StatefulWidget {
SaveButtons({
Key key,
this.onPressCallback
}) : super(key: key);
final VoidCallback onPressCallback;
@override
State<StatefulWidget> createState() {
return SaveButtonsState();
}
}
class SaveButtonsState extends State<SaveButtons> {
@override
Widget build(BuildContext context) {
return Row(
children: <Widget>[
Expanded(
child: button(save, database),
),
SizedBox(width: margin_10dp),
Expanded(
child: button(save_and_continue, database),
),
],
);
}
Widget button (String saveType, AppDatabase database) {
return ElevatedButton(
style: ElevatedButton.styleFrom(
primary: colorPrimary,
onPrimary: white,
shadowColor: Colors.grey,
elevation: margin_3dp,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(margin_5dp)),
minimumSize: Size(margin_100dp, margin_40dp), //////// HERE
),
onPressed: () {
onPressCallback;
},
child: Text(saveType, style: TextStyle(fontWeight: FontWeight.bold, fontSize: text_size_16, color: white)),
);
}
}
這是我如何將 printLine 函式傳遞給我的小部件 SaveButtons 的部分代碼
return Scaffold(
appBar: AppBar(title: Text(incomeTitle), backgroundColor: colorPrimary,),
floatingActionButtonLocation: FloatingActionButtonLocation.endTop,
floatingActionButton: FloatingActionButton(
backgroundColor: colorPrimary,
onPressed: () async { }
},
child: Icon(
Icons.save,
),
),
body: SingleChildScrollView(
physics: ClampingScrollPhysics(),
child: ReactiveForm(
formGroup: viewModel.form,
child: Container(
margin: EdgeInsets.all(margin_20dp),
child: Column(
children: [
SaveButtons(onPressCallback: printLine())
],
),
)
),
),
);
printLine() {print('TEST FUNCTION CALLBACK');}
呼叫 SaveButtons 時,將列印文本 TEST FUNCTION CALLBACK。我不希望在printLine呼叫 SaveButtons 時執行該函式。我希望 printLine 在SaveButtons小部件中按下按鈕時執行。目前,當我按下按鈕時,該printLine函式不會被呼叫。它僅在作為引數傳遞給 SaveButtons 時被呼叫,并且 SaveButtons 小部件從主類呼叫。有人可以幫我解決這個問題,以便執行正確的操作嗎?提前致謝
uj5u.com熱心網友回復:
改變:
final VoidCallback onPressCallback;
和:
final void Function() onPressCallback;
并改變這個:
SaveButtons(onPressCallback: printLine())
有了這個:
SaveButtons(onPressCallback: printLine)
并改變:
onPressed: () {
onPressCallback;
},
和:
onPressed: () {
onPressCallback();
},
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/535043.html
標籤:扑镖
