Флаттер, Как позволить высоте дочернего виджета соответствовать родителю в SingleChildScrollView? - PullRequest
1 голос
/ 12 марта 2019

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

...
Widget build(BuildContext context){
 return new RefreshIndicator(
   child:data.isEmpty?
     new SingleChildScrollView(
      child:new Center(
        child:new Text("this is a empty widget which needs to be center in parent!)
       ),
     )
     :
     new ListView.separated(...)
);
}

но он не может обновиться, когда я касаюсь экрана и двигаюсь, я думаю, что он слишком короткий, поэтому его недостаточно для прокрутки? Я пытаюсь определить Container instate Center как тот же результат, но если я определяю 1000 to Container s height, это можно обновить сейчас, как я могу это сделать?

1 Ответ

1 голос
/ 12 марта 2019

Необходимо убедиться, что представление прокрутки всегда прокручивается с помощью AlwaysScrollableScrollPhysics().

Вам также нужно сделать большую прокручиваемую область. Вы можете использовать Container и получить высоту экрана с помощью MediaQuery.

child: RefreshIndicator(
  onRefresh: () async {
    print('onRefresh called');
  },
  child: SingleChildScrollView(
    physics: const AlwaysScrollableScrollPhysics(),
    child: Container(
      alignment: Alignment.topCenter,
      padding: EdgeInsets.only(top: 50),
      height: MediaQuery.of(context).size.height,
      child: Text('hello'),
    ),
  ),
),

Это не идеальное решение. Функция обновления работает только тогда, когда пользователь перетаскивает пустое пространство вокруг текста. Если пользователь перетаскивает текст, он не видит символ обновления. Также они могут немного прокрутить.

Лучшее решение - использовать PageView с вертикальной прокруткой, всегда включенной, и одной страницей:

child: RefreshIndicator(
  onRefresh: () async {
    print('onRefresh called');
  },
  child: PageView(
    scrollDirection: Axis.vertical,
    physics: const AlwaysScrollableScrollPhysics(),
    children: <Widget>[
      Center(
        child: Text('hello'),
      )
    ],
  ),
),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...