在我的用戶界面螢屏上,我在一列中有兩個文本欄位。如果textFormFieldEntr是空的,就隱藏textFormFiel。如果textFormFieldEntr中有一個值,則讓另一個文本框可見。在我將控制器類中的bool active變數設定為false后,我在showText類中檢查了textFormFieldEntr中的值。我在UI螢屏上使用obx是錯誤的。文本欄位列在_formTextField方法中。你能通過解釋我分享的代碼上正確的obx用法來回答嗎?
class WordController extends GetxController {
TextEditingController controllerInput1 = TextEditingController()。
TextEditingController controllerInput2 = TextEditingController();
bool active = false.obs() 。
final translator = GoogleTranslator();
RxList data = [].obs;
@override
void onInit() {
getir()。
super.onInit()。
}
void showText() {
if (! controllerInput1.text.isEmpty) {
active = true;
}
}
ekle(Word word) async {
var val = await WordRepo().add(word) 。
showDilog("Kay?t Ba?ar?l?") 。
update()。
return val;
}
updateWord(Word word) async {
var val = await WordRepo().update(word)。
showDilog("Kay?t Ba?ar?l?"/span>)。
return val;
}
deleteWord(int? id) async {
var val = await WordRepo().deleteById(id!) 。
return val;
}
getir() async {
//此處從資料庫中讀取所有資料。
data.value = await WordRepo().getAll()。
print(data)。
return data;
}
translateLanguage(String newValue) async {
if (newValue == null || newValue.length == 0) {
return。
}
List list = ["I", "i"] 。
if (newValue.length == 1 && !list.contains(newValue)) {
return;
}
var translate = await translator.translate(newValue, from: 'en'/span>, to: 'tr')。)
controllerInput2.text = translate.toString()。
//addNote();.
return translate。
}
showDilog(String message) {
Get.defaultDialog(title: "Bilgi", middleText: message)。
}
addNote() async {
var word =
Word(wordEn: controllerInput1.text, wordTr: controllerInput2.text)。
await ekle(word)。
getir();
clear()。
}
clear() {
controllerInput2.clear()。
controllerInput1.clear()。
}
updateNote() async {
var word =
Word(wordEn: controllerInput1.text, wordTr: controllerInput2.text)。
await updateWord(word)。
await getir()。
update()。
}
}
UI:
class MainPage extends StatelessWidget{
bool _active=false.obs()。
String _firstLanguage = "English"。
String _secondLanguage = "土耳其語"。
WordController controller = Get.put(WordController())。
final _formKey = GlobalKey<FormState> ();
@override
Widget build(BuildContext context) {
controller.getir()。
return Scaffold(
drawer: _drawer,
backgroundColor: Colors.blueAccent,
appBar: _appbar,
body: _bodyScaffold,
floatingActionButton: _floattingActionButton,
);
}
SingleChildScrollView get _bodyScaffold {
return SingleChildScrollView(
孩子。列(
children: [
choiceLanguage,
translateTextView,
],
),
);
}
AppBar get _appbar {
return AppBar(
backgroundColor: Colors.blueAccent,
centerTitle: true,
標題。Text("TRANSLATE")。
海拔高度。0.0,
);
}
get chooseLanguage => Container(
高度。55.0,
decoration: buildBoxDecoration,
孩子。行(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
firstChooseLanguage,
changeLanguageButton,
第二個選擇語言。
],
),
);
get buildBoxDecoration {
return BoxDecoration(
color: Colors.white,
邊界。邊框(
底部。BorderSide(
寬度:3.5。
color: Colors.gray,
),
),
);
}
refreshList() {
控制器.getir()。
}
get changeLanguageButton {
return Material(
color: Colors.white,
孩子。IconButton(
圖示。Icon(
Icons.wifi_protected_setup_rounded,
color: Colors.indigo,
大小。30.0。
),
onPressed: () {},
),
);
}
get secondChooseLanguage {
return Expanded(
孩子。材料(
color: Colors.white,
孩子。InkWell(
onTap: () {},
孩子。中心(
child: 文本(
this._secondLanguage,
風格。TextStyle(
color: Colors.blue[600]。
字體大小。22.0,
),
),
),
),
),
);
}
get firstChooseLanguage {
return Expanded(
孩子。材料(
color: Colors.white,
child: InkWell(
onTap: () {},
孩子。中心(
child: 文本(
this._firstLanguage,
風格。TextStyle(
color: Colors.blue[600]。
字體大小。22.0,
),
),
),
),
),
);
}
get translateTextView => Column(
兒童。[
卡片(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.round(8.0) )。
),
margin: EdgeInsets.only(left: 2.0, right: 2.0, top: 2.0)。)
孩子。_formTextField,
),
容器(
高度。Get.height/1.6。
孩子。Obx(() {
return ListView.buildinger(
itemCount: controller.data.length,
itemBuilder: (context, index) {
return Card(
形狀。RoundedRectangleBorder(
borderRadius: borderRadius.all(Radius.round(5.0))。
),
margin: EdgeInsets.only(left: 2.0, right: 2.0, top: 0.8)。)
孩子。容器(
顏色: Colors.white30,
高度。70.0。
padding:
EdgeInsets.only(left: 8.0, top: 8.0, bottom: 8.0)。)
孩子。行(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
兒童。[
列(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceAround,
兒童。[
firstText(controller.data, index),
secondText(controller.data, index),
],
),
historyIconbutton,
],
),
),
);
},
);
}),
)
],
);
get _formTextField {
return Form(
key: _formKey,
孩子。列(
mainAxisAlignment: MainAxisAlignment.center,
兒童。[
容器(
color: Colors.white30,
高度。120.0。
padding: EdgeInsets.only(left: 16.0, top: 8.0, bottom: 8.0)。)
孩子。行(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
textFormFieldEntr,
favoriIconButton,
],
),
),
textFormField //buras? kapand?get textFormFieldEntr {
return Flexible(
孩子。容器(
孩子。TextFormField(
onTap: () {
showMaterialBanner()。
},
// onChanged: (text) {
// controller.translateLanguage(text);
// },
controller: controller.controllerInput1,
maxLines: 6。
驗證器。(controllerInput1) {
if (controllerInput1!.isEmpty) {
return "lütfen bir de?er giriniz"/span>。
} else if (controllerInput1.length > 22) {
return "en fazla 22 karakter girebilirsiniz" 。
}
return null;
},
裝飾。InputDecoration()
hintText: "Enter"。
contentPadding。const EdgeInsets.symmetric(vertical: 5.0) 。
),
),
),
);
}
void showMaterialBanner() {
ScaffoldMessenger.of(Get.context!).showMaterialBanner(MaterialBanner(
backgroundColor: Colors.red,
內容。Padding(
padding: const EdgeInsets.only(top: 30.0)。
兒童。列(
兒童。[
TextFormField(
controller: controller.controllerInput1,
maxLines: 6,
onChanged: (text) {
controller.translateLanguage(text);
controller.showText();
},
驗證器。(controllerInput2) {
if (controllerInput2! .length > 22) {
return "en fazla 22 karakter girebilirsiniz" 。
}
return null;
},
裝飾。InputDecoration()
suffixIcon: IconButton(onPressed: () {
FocusScope.of(Get.context!).unfocus()。
closeBanner();
}, icon: Icon(Icons.clear),)。
contentPadding。const EdgeInsets.symmetric(vertical: 5.0) 。
),
),
SizedBox(高度:80.0)。
TextFormField(
controller: controller.controllerInput2,
maxLines: 6,
驗證器。(controllerInput2) {
if (controllerInput2! .length > 22) {
return "en fazla 22 karakter girebilirsiniz" 。
}
return null;
},
裝飾。InputDecoration(
contentPadding。const EdgeInsets.symmetric(vertical: 5.0)。
),
),
],
),
),
行動。[
IconButton(
onPressed: () {
closeBanner()。
},
圖示。Icon(
Icons.arrow_forward_outlined,
color: Colors.indigo,
大小。36。
),
),
]));
}
void closeBanner() {
ScaffoldMessenger.of(Get.context!).hideCurrentMaterialBanner()。
}
// } controller.controllerInput1.text==""? _active=false: _active=true;
get textFormField {
return Visibility(
visible: controller.active,
孩子。容器(
color: Colors.white30,
高度。120.0。
padding: EdgeInsets.only(left: 16.0, right: 42.0, top: 8.0, bottom: 8.0)。)
孩子。容器(
child: TextFormField(
controller: controller.controllerInput2,
maxLines: 6,
驗證器。(controllerInput2) {
if (controllerInput2! .length > 22) {
return "en fazla 22 karakter girebilirsiniz" 。
}
return null;
},
裝飾。InputDecoration(
contentPadding。const EdgeInsets.symmetric(vertical: 5.0)。
),
),
),
),
);
FutureBuilder<dynamic> get historyWordList {
return FutureBuilder(
future: controller.getir(),
builder: (context, AsyncSnapshot snapShot) {
if ( snapShot.hasData) {
var wordList = snapShot.data;
return ListView.buildinger(
itemCount: wordList.length,
itemBuilder: (context, index) {
return Card(
形狀。RoundedRectangleBorder(
borderRadius: borderRadius.all(Radius.round(5.0))。
),
margin: EdgeInsets.only(left: 8.0, right: 8.0, top: 0.8)。)
孩子。容器(
顏色: Colors.white30,
高度。70.0。
padding: EdgeInsets.only(left: 8.0, top: 8.0, bottom: 8.0)。)
孩子。行(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
兒童。[
列(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceAround,
兒童。[
firstText(wordList, index),
secondText(wordList, index),
],
),
historyIconbutton,
],
),
),
);
},
);
} else {
return Center();
}
},
);
}
IconButton get historyIconbutton {
return IconButton(
onPressed: () {},
圖示。Icon(Icons.history),
iconSize: 30.0。
);
}
Text firstText(wordList, int index) {
return Text(
"?ngilizce: ${wordList[index].wordEn ? ""}"。
風格。TextStyle(
fontWeight: FontWeight.w600,
),
maxLines: 1。
溢位。TextOverflow.ellipsis。
);
}
Text secondText(wordList, int index) {
return Text(
"Türk?e: ${wordList[index].wordTr ? ""}"。
風格。TextStyle(
fontWeight: FontWeight.w400,
),
maxLines: 1。
溢位。TextOverflow.ellipsis。
);
}
get favoriIconButton {
return IconButton(
對齊。Alignment.topRight,
onPressed: () async {
bool validatorKontrol = _formKey.currentState!.validate()。
if (validatorKontrol) {
String val1 = controller.controllerInput1.text;
String val2 = controller.controllerInput2.text;
print("$val1 $val2") 。
await controller.addNote();
await refreshList();
}
await Obx(() => textFormField(
controller: controller.controllerInput2,
));
await Obx(() => textFormField(
controller: controller.controllerInput1,
));
},
圖示。Icon(
Icons.forward,
color: Colors.blueGrey,
大小。36.0。
),
);
}
FloatingActionButton get _floattingActionButton {
return FloatingActionButton(
onPressed: () {
Get.to(WordListPage())。
},
孩子。Icon(
Icons.app_registration,
大小。30。
),
);
}
Drawer get _drawer {
return Drawer(
孩子。ListView(
// Important: 洗掉ListView中的任何padding。
padding: EdgeInsets.zero。
children: <Widget>[
userAccountsDrawerHeader,
drawerFavorilerim,
drawersettings,
drawerContacts,
],
),
);
}
ListTile get drawerContacts {
return ListTile(
領導。Icon(Icons.contacts)。
標題。Text("Contact Us")。
onTap: () {
Get.back();
},
);
}
ListTile get drawersettings {
return ListTile(
領導。Icon(Icons.settings)。
標題。Text("Settings")。
onTap: () {
Get.back()。
},
);
}
ListTile get drawerFavorilerim {
return ListTile(
領導。圖示(
Icons.star,
color: Colors.yellow,
),
標題。Text("Favorilerim")。
onTap: () {
Get.to(FavoriListPage())。
},
);
}
UserAccountsDrawerHeader get userAccountsDrawerHeader {
return UserAccountsDrawerHeader(
帳戶名。Text("UserName")。
accountEmail。Text("E-mail")。
currentAccountPicture。CircleAvatar(
backgroundColor: Colors.gray,
孩子。文本(
""。
風格。TextStyle(fontSize: 40.0)。
),
),
);
}
}
uj5u.com熱心網友回復:
你可以簡單地這樣做
class ControllerSample extends GetxController{
最后 active = false.obs
functionPass(){
active(!active.value)。
}
}
在頁面上
final sampleController = Get.put(ControllerSample()) 。
Obx(
()=> Form(
key: yourkeyState,
孩子。列()
兒童。[
TextFormField(
//一些其他需要的。
//把函式放在onChanged上。
onChanged:(value){
if(value.isEmpty){
sampleController.functionPass()。
}else{
sampleController.functionPass()。
}
}
),
可見性(
visible: sampleController.active.value,
孩子。TextFormField(
//some other info
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/313097.html
標籤:
