Как правильно отобразить будущее внутри ряда? - PullRequest
0 голосов
/ 23 марта 2020

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

Вот весь код: https://dartpad.dev/82623d8d78149484eed5ae3be50dc297

Фрагмент моей проблемы (внутри виджета сборки):

@override
  Widget build(BuildContext context) {
    return Scaffold(
        body: tabs[_currentIndex],
        bottomNavigationBar: BottomAppBar(
            shape: CircularNotchedRectangle(),
            color: Colors.red,
            child: Container(
              padding: EdgeInsets.only(left: 10.0, right: 10.0),
              height: 70,
              color: Colors.white,
              child: Row(
mainAxisAlignment: // Should return _spacing here, but can't because it is a future and await doesn't work., 
children: // Should return buildChildren() here, but can't because it is a future and await doesn't work.),
            )));
  }

1 Ответ

1 голос
/ 23 марта 2020

Вы хотите использовать FutureBuilder для достижения этой цели. Внесите следующие изменения в свой код:

Измените функцию getMemberShip:

Future<int> getMembership() async {
    // Your code
}

Измените функцию buildChildren:

List<IconButton> buildChildren(int level) {
var builder = [
   // Your code
];

if (level != 1) {
   // Your code
}
return builder;

}

Изменить функция _spacing:

_spacing(int level) {
   if (level != 1) {
     return MainAxisAlignment.spaceEvenly;
   } else {
     return MainAxisAlignment.spaceBetween;
   }
}

Реализуйте свой метод сборки следующим образом:

@override
Widget build(BuildContext context) {
   return Scaffold(
     body: tabs[_currentIndex],
     bottomNavigationBar: BottomAppBar(
       shape: CircularNotchedRectangle(),
       color: Colors.red,
       child: Container(
         padding: EdgeInsets.only(left: 10.0, right: 10.0),
         height: 70,
         color: Colors.white,
         child: FutureBuilder(
           builder: (context, snapshot) {
             if (snapshot.hasData) {
               int level = snapshot.data;
               return Row(
                   mainAxisAlignment: _spacing(level),
                   children: buildChildren(level));
             } else if (snapshot.error) {
               return Text('Error occured');
             } else {
               return CircularProgressIndicator();
             }
           },
           future: getMembership(),
         ),
       ),
     ),
   );
}
...