Właśnie zaczynam rozumieć Flutter, ale mam problem ze zrozumieniem, jak ustawić stan włączenia przycisku.
W dokumentach mówi, aby ustawić onPressed
na null, aby wyłączyć przycisk i nadać mu wartość, aby go włączyć. Jest to w porządku, jeśli przycisk nadal pozostaje w tym samym stanie przez cały cykl życia.
Odnoszę wrażenie, że muszę stworzyć niestandardowy widget Stateful, który pozwoli mi w jakiś sposób zaktualizować stan włączenia przycisku (lub wywołanie zwrotne onPressed).
Więc moje pytanie brzmi: jak miałbym to zrobić? Wydaje się, że jest to dość proste wymaganie, ale nie mogę znaleźć niczego w dokumentacji, jak to zrobić.
Dzięki.
Odpowiedzi:
Myślę, że możesz chcieć wprowadzić kilka funkcji pomocniczych do
build
swojego przycisku, a także widget Stateful wraz z pewną właściwością do wyłączenia.isButtonDisabled
)onPressed
wartości ani nanull
ani na jakąś funkcjęonPressed: () {}
isButtonDisabled
jako część tego warunku i zwróć jednąnull
lub jakąś funkcję.setState(() => isButtonDisabled = true)
aby odwrócić zmienną warunkową.build()
metodę z nowym stanem, a przycisk zostanie wyrenderowany znull
obsługą prasy i zostanie wyłączony.Oto trochę więcej kontekstu przy użyciu projektu licznika Flutter.
W tym przykładzie używam trójnika w wierszu, aby warunkowo ustawić
Text
ionPressed
, ale może być bardziej odpowiednie, aby wyodrębnić to do funkcji (możesz użyć tej samej metody, aby zmienić tekst przycisku):źródło
onPressed: _isButtonDisabled ? null : () => _incrementCounter
return () {}
więc jest to zamierzone. Nie chcę tutaj używać grubej strzałki, ponieważ chcę, aby funkcja wykonywała się, wracałanull
i wyłączała przycisk.disabled
nieruchomości, zespół Flutter? To po prostu nie jest intuicyjne: - /Według dokumentów:
„Jeśli wywołanie zwrotne onPressed ma wartość null, przycisk zostanie wyłączony i domyślnie będzie przypominał płaski przycisk w disabledColor”.
https://docs.flutter.io/flutter/material/RaisedButton-class.html
Więc możesz zrobić coś takiego:
źródło
disabledElevation
,disabledColor
iDisabledTextColor
nie będzie działać zgodnie z przeznaczeniem.Prosta odpowiedź brzmi:
onPressed : null
wyłączono przycisk.źródło
Oprawa
i
źródło
onPressed
jest zawsze funkcją, więc przycisk jest renderowany jako „klikalny”, chociaż będzie ignorował zdarzenie click, jeśliisEnabled
właściwość jest ustawiona. Aby naprawdę wyłączyć przycisk, użyjRaisedButton(onPressed: isEnabled ? _handleClick : null
W przypadku określonej i ograniczonej liczby widżetów zawijanie ich w widżet IgnorePointer robi dokładnie to: gdy jego
ignoring
właściwość jest ustawiona na true, pod-widget (a właściwie całe poddrzewo) nie jest klikalny.W przeciwnym razie, jeśli zamierzasz wyłączyć całe poddrzewo, zajrzyj do AbsorbPointer ().
źródło
Funkcje włączania i wyłączania są takie same dla większości widżetów.
Np. Przycisk, przełącznik, pole wyboru itp.
Po prostu ustaw
onPressed
właściwość, jak pokazano poniżejonPressed : null
zwraca Wyłączony widgetonPressed : (){}
lubonPressed : _functionName
zwraca włączony widżetźródło
Możesz również użyć AbsorbPointer i możesz go użyć w następujący sposób:
Jeśli chcesz dowiedzieć się więcej o tym widżecie, możesz sprawdzić poniższy link Flutter Docs
źródło
To moim zdaniem najłatwiejszy sposób:
źródło