#flutter #flutter-sliver
#порхание #flutter-sliver
Вопрос:
Я столкнулся с проблемой, пытаясь заполнить a SliverFixedExtentList
дочерними элементами из ответа API JSON. У меня есть функция _getMyListOfCustomJsonObjects()
, которая возвращает a Future<'List<'CustomJsonObject>>
. Я довольно новичок в flutter, но, насколько я понимаю SliverLists
, они должны вести себя аналогично a ListView
. Я смог заполнить один ListView
из этих дочерних элементов, используя FutureBuilder
и ListView.builder
. Однако внесение изменений в a SliverList
вызывает у меня ошибку.
Ниже приведен пример моего кода
CustomScrollView(
slivers: [
SliverAppBar(),
FutureBuilder(
future: _getMyListOfCustomJsonObjects,
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.data != null)
return SliverFixedExtentList(
itemExtent: 150,
delegate: SliverChildBuilderDelegate(
(BuildContext context, int index) {
return
Container(
color: Colors.red,
child: Text('${snapshot.data[index].Name}'));
},
childCount: snapshot.data.length),
);
else {
return Padding(
padding: EdgeInsets.only(top:50),
//alignment: Alignment.center,
child: Stack(
alignment: Alignment.bottomCenter,
children: <Widget>[
new CircularProgressIndicator(
value: null,
strokeWidth: 4,
backgroundColor: Color(0xFFe5ac3b),
semanticsLabel: "Loading",
valueColor:
new AlwaysStoppedAnimation<Color>(Color(0xFF12336c)),
),
],
),
);
}
},
),
],
),
Я думаю, что, возможно, я близок к этому, но я впервые пытаюсь использовать Slivers, поэтому я не уверен, что мне не хватает ключевого компонента, чтобы все это работало. Ниже приведены ошибки, которые я получаю при попытке запустить этот код.
flutter: Another exception was thrown: 'package:flutter/src/widgets/framework.dart': Failed assertion: line 4345 pos 14: 'owner._debugCurrentBuildTarget == this': is not true.
flutter: Another exception was thrown: Duplicate GlobalKeys detected in widget tree.
Любые предложения по заполнению a SliverList
с Future<List<CustomJSONObject>>
помощью?
Комментарии:
1. Можете ли вы предоставить всю трассировку стека? похоже, что перед теми, которые вы упомянули, есть исключение, поскольку они оба говорят «Было выдано другое исключение».
2. Хорошо — после более глубокого изучения трассировки стека я обнаружил, что именно содержимое Else {} выдавало мне ошибки, которые я получал. Чтобы исправить это, я использовал SliverFillRemaining() внутри Else{}- однако, похоже, что асинхронный снимок возвращает null . Будет ли это иметь какое-либо отношение к тому, когда создается виджет?