Czy mogę stworzyć coś podobnego do Toast we Flutter? Tylko malutkie okienko powiadomień, które nie znajduje się bezpośrednio przed użytkownikiem i nie blokuje ani nie przesłania widoku za nim?
167
Możesz uzyskać dostęp do rodzica ScaffoldState
za pomocąScaffold.of(context)
Następnie zrób coś takiego
Scaffold.of(context).showSnackBar(SnackBar(
content: Text("Sending Message"),
));
Snackbary to oficjalny „Toast” z Material Design. Zobacz https://material.io/design/components/snackbars.html#usage
Oto w pełni działający przykład:
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: const Home(),
);
}
}
class Home extends StatelessWidget {
const Home({
Key key,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Snack bar'),
),
/// We use [Builder] here to use a [context] that is a descendant of [Scaffold]
/// or else [Scaffold.of] will return null
body: Builder(
builder: (context) => Center(
child: RaisedButton(
child: const Text('Show toast'),
onPressed: () => _showToast(context),
),
),
),
);
}
void _showToast(BuildContext context) {
final scaffold = Scaffold.of(context);
scaffold.showSnackBar(
SnackBar(
content: const Text('Added to favorite'),
action: SnackBarAction(
label: 'UNDO', onPressed: scaffold.hideCurrentSnackBar),
),
);
}
}
showSnackBar()
powinno miećScaffold
rodzica.Użyj tej wtyczki
źródło
Unhandled Exception: MissingPluginException(No implementation found for method showToast on channel PonnamKarthik/fluttertoast)
SnackBar
jest zdecydowanie właściwą klasą do użycia, jak zauważył Darky.Jedną trudną rzeczą
showSnackBar
jest dotarcie doScaffoldState
, jeśli próbujesz wywołaćshowSnackBar
w ramach metody kompilacji, w której konstruujesz plikScaffold
.Możesz zobaczyć taki błąd, który zawiera tekst wyjaśniający, jak rozwiązać problem.
Można też przekazać
GlobalKey
doScaffold
konstruktora:Lub możesz użyć a,
Builder
aby utworzyćBuildContext
element podrzędny Rusztowania.Wreszcie, możesz podzielić swój widget na wiele klas, co jest najlepszym podejściem długoterminowym.
źródło
I/flutter ( 4965): The following assertion was thrown while handling a gesture: I/flutter ( 4965): type 'LabeledGlobalKey<ScaffoldState>' is not a subtype of type 'BuildContext' of 'context' where I/flutter ( 4965): LabeledGlobalKey is from package:flutter/src/widgets/framework.dart I/flutter ( 4965): ScaffoldState is from package:flutter/src/material/scaffold.dart I/flutter ( 4965): Scaffold is from package:flutter/src/material/scaffold.dart I/flutter ( 4965): BuildContext is from package:flutter/src/widgets/framework.dart
GlobalKey
jako argumentu, w którymBuildContext
oczekuje się a. Nie mogę pomóc w dalszym debugowaniu tego problemu bez przeglądania większej ilości kodu. Opublikuj wiersz kodu, który zgłasza wyjątek, prawdopodobnie po prostu nie używasz właściwych argumentów.Builder
podanej przez Ciebie opcji działa dobrze. Wpadłem na ten problem i to rozwiązało go dla mnie.final key = new GlobalKey<ScaffoldState>();
poza kompilację Widgetu naprawiło go.aby wyświetlić komunikat toast, możesz użyć wtyczki flutterToast, aby użyć tej wtyczki, którą musisz
fluttertoast: ^3.1.0
$ flutter packages get
import 'package:fluttertoast/fluttertoast.dart';
użyj tego w ten sposób
Aby uzyskać więcej informacji, sprawdź to
źródło
fluttertoast: ^ 3.1.3
źródło
Chciałbym przedstawić alternatywne rozwiązanie do korzystania z pakietu flushbar. https://github.com/AndreHaueisen/flushbar
Jak wspomniano w pakiecie: Użyj tego pakietu, jeśli potrzebujesz więcej dostosowań podczas powiadamiania użytkownika. Dla programistów Androida ma zastąpić tosty i batoniki.
Kolejna sugestia użycia flushbar Jak wyświetlić snackbar po navigator.pop (kontekst) we Flutterze?
Możesz również ustawić pozycję flushbarPosition na TOP lub BOTTOM
źródło
Zaimportuj plik lib
fluttertoast: 3.1.3
Użyj jak poniżej
);
źródło
Na wypadek, gdyby podany dotychczas pakiet Fluttertoast nie działał ... W takim razie zasugeruję, abyś spróbował toast .
Bez fanaberii i bez ceremonii.
Po prostu działa.
Zauważyłem jednak błąd w przykładzie podanym w pliku Readme:
Toast.show("Toast plugin app", duration: Toast.LENGTH_SHORT, gravity: Toast.BOTTOM);
Chociaż metoda wymaga kontekstu. Warto więc dodać `` kontekst '' w następujący sposób:
Toast.show("Toast plugin app", context, duration: Toast.LENGTH_SHORT, gravity: Toast.BOTTOM);
Jest szansa, że zostanie to naprawione do czasu, gdy sprawdzałeś, chociaż przesłałem już PR.
źródło
pub.dartlang.org/packages/fluttertoast
wtyczki. Ten jest dużo bardziej przejrzysty [zwięzły] i łatwiejszy do dostosowania.Istnieją trzy sposoby wyświetlania tostów w aplikacji flutter.
Opowiem ci o wszystkich trzech znanych mi sposobach i wybierzesz, z którego chcesz skorzystać. Poleciłbym drugą.
1: korzystanie z pakietu zewnętrznego.
jest to pierwsza metoda, która jest najłatwiejszym sposobem pokazania tostów w aplikacji flutter.
przede wszystkim musisz dodać ten pakiet w pubspec.yaml
następnie zaimportuj pakiet do pliku, w którym chcesz wyświetlić toast.
i ostatni krok pokaż toast.
2: używając oficjalnego sposobu.
ta metoda jest również prosta, ale musisz sobie z nią poradzić. Nie mówię, że to jest trudne, jest proste i czyste. Poleciłbym tę metodę.
dla tej metody wszystko, co musisz zrobić, to pokazać toast, używając poniższego kodu.
ale pamiętaj, że musisz użyć kontekstu rusztowania.
3: przy użyciu natywnego interfejsu API.
teraz ta metoda nie ma już sensu, jeśli masz już dwie powyższe metody. używając tej metody musisz napisać natywny kod dla Androida i iOS, a następnie przekonwertować go na wtyczkę i jesteś gotowy do pracy. ta metoda pochłonie Twój czas i musisz na nowo wynaleźć koło. który został już wynaleziony.
źródło
Dla tych, którzy szukają
Toast
czegoś, co przetrwa zmianę trasy,SnackBar
może to nie być najlepsza opcja.Overlay
Zamiast tego spójrz na .https://api.flutter.dev/flutter/widgets/Overlay-class.html
źródło
Dodaj flutter_just_toast do swoich zależności w swoim Pubspecs.yaml
zależności:
Następnie zaimportuj pakiet do swojej klasy:
Zaimplementuj Toast z komunikatem
źródło
po prostu użyj SnackBar (content: Text ("hello"),) wewnątrz dowolnego wydarzenia, takiego jak onTap i onPress
możesz przeczytać więcej o Snackbar tutaj https://flutter.dev/docs/cookbook/design/snackbars
źródło
W tym celu istnieją różne wersje.
1) Przede wszystkim możesz użyć SnackBar, który jest widżetem we Flutterze.
2) Możesz korzystać z bibliotek takich jak toast, flutter_toast z pub.dev.
3) Trzecia wersja tworzy Twój niestandardowy widżet. Można go utworzyć za pomocą widżetu Nakładka i Animacji w aplikacji Flutter.
Możesz skorzystać z tego samouczka, aby dowiedzieć się więcej na ten temat. Oto link
źródło
W przypadku tostów z oryginalną grafiką na Androida możesz użyć tego: https://pub.dartlang.org/packages/fluttertoast
Działa dobrze na Androidzie i iOS. wprowadź opis obrazu tutaj
źródło
https://pub.dev/packages/toast użyj tego do tostów ta biblioteka jest dość łatwa w użyciu i doskonale działa na iOS i Android,
Składnia show Toast:
źródło
Krok 1:
zależności:
Krok 2:
Krok 3:
źródło
użyj tej zależności:
toast: ^0.1.3
następnie zaimportuj zależność toast na stronie:import 'package:toast/toast.dart';
następnie onTap () widżetu:Toast.show("Toast plugin app", context,duration: Toast.LENGTH_SHORT, gravity: Toast.BOTTOM);
źródło
możesz użyć tego pakietu: toast
dodaj tę linię do swoich zależności
następnie użyj tego w ten sposób:
źródło
pobierz trzepotliwy pakiet tostów tutaj
Dodaj ten pakiet do zależności projektu w pubspec.yaml
Wtedy, gdy chcesz, aby Toast był wyświetlany jak po dotknięciu przycisku
źródło
Nie ma widżetu do tostów w trzepotaniu, możesz przejść do tej wtyczki Przykład zastosowania:
źródło
Możesz użyć biblioteki „fluttertoast”. Aby to zrobić, dodaj go do pliku pubspec.yaml, na przykład:
Następnie zaimportuj tę bibliotekę do pliku rzutek, którego potrzebujesz, i napisz swój kod. Na przykład odwołaj się do następującego kodu:
źródło
Zaimportuj
cupertino_icons: ^0.1.2
i napisz poniższy kodźródło
Dla wiadomości toast we flutterze użyj biblioteki bot_toast . Ta biblioteka zapewnia bogate funkcje, obsługę wyświetlania powiadomień, tekstu, ładowania, załączników itp. Toast
źródło
To całkiem proste,
Musimy tylko zainstalować pakiet tostów flutter. Zapoznaj się z następującą dokumentacją: https://pub.dev/packages/fluttertoast
W zakładce instalacji otrzymasz zależność, którą musisz wkleić do pliku pubspec.yaml, a następnie zainstalować.
Następnie wystarczy zaimportować pakiet:
import 'package: fluttertoast / fluttertoast.dart';
Podobnie jak w powyższej linii.
A następnie, używając klasy FlutterToast, możesz użyć swojego fluttertoast.
Jesteś skończony!!!
źródło
Wyświetlenie wiadomości toastowej we Flutterze jest dość łatwe.
Scaffold.of(context).showSnackBar(SnackBar( content: Text("Toast Text Here"), ));
źródło
Możesz użyć czegoś takiego jak FlutterToast
Zaimportuj plik lib
Użyj jak poniżej
Otóż to..
źródło