+
+
+
+
+
+ Describes the part of the user interface represented by this widget.
+The framework calls this method when this widget is inserted into the tree
+in a given BuildContext and when the dependencies of this widget change
+(e.g., an InheritedWidget referenced by this widget changes). This
+method can potentially be called in every frame and should not have any side
+effects beyond building a widget.
+The framework replaces the subtree below this widget with the widget
+returned by this method, either by updating the existing subtree or by
+removing the subtree and inflating a new subtree, depending on whether the
+widget returned by this method can update the root of the existing
+subtree, as determined by calling Widget.canUpdate.
+Typically implementations return a newly created constellation of widgets
+that are configured with information from this widget's constructor and
+from the given BuildContext.
+The given BuildContext contains information about the location in the
+tree at which this widget is being built. For example, the context
+provides the set of inherited widgets for this location in the tree. A
+given widget might be built with multiple different BuildContext
+arguments over time if the widget is moved around the tree or if the
+widget is inserted into the tree in multiple places at once.
+The implementation of this method must only depend on:
+
+If a widget's build method is to depend on anything else, use a
+StatefulWidget instead.
+See also:
+
+- StatelessWidget, which contains the discussion on performance considerations.
+
+
+
+
+
+
+ Implementation
+ @override
+Widget build(BuildContext context) {
+ final sessionManager = castFramework.castContext.sessionManager;
+
+ Widget _getEmptyState(BuildContext context) {
+ if (emptyListStateBuilder == null) return defaultEmptyState();
+ return emptyListStateBuilder!(context, false, null);
+ }
+
+ Widget _getErrorState(BuildContext context, Object? error) {
+ if (emptyListStateBuilder == null) return defaultEmptyState();
+ return emptyListStateBuilder!(context, false, error);
+ }
+
+ Widget _getLoadingState(BuildContext context) {
+ if (emptyListStateBuilder == null) return defaultEmptyState();
+ return emptyListStateBuilder!(context, true, null);
+ }
+
+ Widget _getList(int count) {
+ return ListView.builder(
+ itemCount: count,
+ itemBuilder: (context, index) {
+ return QueueListItemHolder(
+ castFramework: this.castFramework,
+ index: index,
+ listItemBuilder: listItemBuilder,
+ emptyItemStateBuilder: emptyItemStateBuilder,
+ );
+ },
+ );
+ }
+
+ return FutureBuilder<int>(
+ future: sessionManager.remoteMediaClient.mediaQueue.getItemCount(),
+ builder: (context, snapshot) {
+ if (snapshot.hasData) {
+ final count = snapshot.data;
+ if (count == null || count < 0) {
+ return _getEmptyState(context);
+ }
+
+ return _getList(count);
+ } else if (snapshot.hasError) {
+ return _getErrorState(context, snapshot.error);
+ } else {
+ return _getLoadingState(context);
+ }
+ },
+ );
+}
+
+
+
+
+
+
+
+
+
+