Я хочу добавить SnackBar в свое приложение флаттера.

Я хочу добавить закусочную, которая говорит пользователю прокручивать вверх, когда изображений, добавленных в тело, больше 2. виджет строительных лесов. Я новичок в вопросах, поэтому, возможно, я не правильно задал.

class App extends StatefulWidget {
  createState() {
    return AppState();
  }
}

class AppState extends State<App> {
  int counter = 0;
  List<ImageModel> images = [];

  void fetchImage() async {
    counter++;
    while (counter > 2) {
      Scaffold.of(context).showSnackBar(SnackBar(
        content: Text('Scroll Up'),
        duration: Duration(seconds: 2),
      ));
    }
    var response =
        await get('http://jsonplaceholder.typicode.com/photos/$counter');

    var imageModel = ImageModel.fromJson(json.decode(response.body));
    setState(
      () {
        images.add(imageModel);
      },
    );
  }

  Widget build(context) {
    return MaterialApp(
      home: Scaffold(
        body: ImageList(images),
        backgroundColor: Colors.blueGrey.shade200,
        bottomNavigationBar: BottomAppBar(
          shape: const CircularNotchedRectangle(),
          child: Container(
            height: 50.0,
            //color: Colors.blue,
          ),
        ),
        floatingActionButton: FloatingActionButton(
          backgroundColor: Colors.blueGrey,
          child: Icon(Icons.add),
          onPressed: fetchImage,
        ),
        floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
        appBar: AppBar(
          title: Text("Let's see images!"),
        ),
      ),
    );
  }
}

person Akanmu Ademola    schedule 15.12.2020    source источник


Ответы (2)


Вы можете попытаться отправить параметр контекста при вызове метода fetchImage() следующим образом:

   onPressed: () 
         {
           fetchImage(context);
         }

А потом:

   void fetchImage(BuildContext context) async {
   
person Akif    schedule 15.12.2020
comment
функция fetchImage возвращает пустоту, которую не может использовать функция onPressed. - person Akanmu Ademola; 15.12.2020
comment
Я улучшил ответ, изменив метод onPressed. - person Akif; 15.12.2020

Самый лучший и простой способ показать Snackbar — использовать GlobalKey. Просто создайте GlobalKey , назначьте его Scaffold и используйте этот ключ для отображения SnackBar. Например:

class _WidgetState extends State<YourStatefulWidget> {
  final scaffoldKey=GlobalKey<ScaffoldState>();
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      key:scaffoldKey,
      body: Center(
        child: RaisedButton(
        child:Text("Press Me"),
        onPressed:(){
            scaffoldKey.currentState.showSnackBar(
            SnackBar(content:Text("YO"))
            );
          },
        ),
      ),
    );
  }
}
person Vinay Jain    schedule 15.12.2020
comment
Я смог найти способ показать закусочную с помощью глобального ключа, но я понял, что не могу настроить закусочную с помощью цикла while. Мое устройство отключается. - person Akanmu Ademola; 17.12.2020