小编nic*_*tdr的帖子

具有共享首选项的LiveData

我有一个设置屏幕,在其中设置一些值。设置这些值时,它将保存在共享首选项中,并且在我对网络api调用的请求中需要这些值作为参数。

现在,我可以在活动中使用侦听器共享首选项,然后进行api调用并获取新数据,但是我想将其与LiveData一起使用。

如何使用LiveData侦听共享首选项中的更改,然后使用新参数进行网络呼叫。

android android-sharedpreferences android-livedata

10
推荐指数
3
解决办法
6597
查看次数

Android 测试由于 Hilt 依赖而失败

我有以下 android 测试类

@HiltAndroidTest
@UninstallModules(PreferencesModule::class, CacheModule::class)
class PlayerRepositoryTest {

private val fakeServer = FakeServer()
private lateinit var repository: PlayerRepository
private lateinit var api: GameApi
private lateinit var cache: Cache

@get: Rule
var hiltRule = HiltAndroidRule(this)

@get: Rule
var instantTaskExecutorRule = InstantTaskExecutorRule()

@Inject
lateinit var database: GameDatabase

@Inject
lateinit var retrofitBuilder: Retrofit.Builder


@Inject
lateinit var apiPlayerMapper: ApiPlayerDetailsMapper

@Inject
lateinit var apiPaginationMapper: ApiPaginationMapper

@BindValue
@JvmField
val preferences: Preferences = FakePreferences()

@Module
@InstallIn(SingletonComponent::class)
object TestCacheModule {

    @Provides
    fun provideRoomDatabase(): GameDatabase {
        return Room.inMemoryDatabaseBuilder( …
Run Code Online (Sandbox Code Playgroud)

android android-testing dagger-hilt

8
推荐指数
0
解决办法
566
查看次数

如何在 SliverToBoxAdapter 中有一个可滚动的列表

我在 CustomSrollView 中使用以下 SliverToBoxAdapter:

        SliverToBoxAdapter(
            child: Stack(
            children: <Widget>[
              Container(
                width: double.infinity,
                height: 50,
                decoration: BoxDecoration(color: pink),
              ),
              Padding(
                padding: const EdgeInsets.symmetric(horizontal: 30),
                child: ListView.builder(
                  padding: const EdgeInsets.all(0),
                  shrinkWrap: true,
                  itemBuilder: (context, index) {
                    return buildSongRow(songs[index]);
                  },
                  itemCount: songs.length,
                ),
              )
            ],
          ))
Run Code Online (Sandbox Code Playgroud)

问题是列表不滚动,这很明显,因为它有框约束。我在这里使用 SliverToBoxAdapter,因为我必须将我的列表堆叠在列表顶部的某个 Container 上。如何让我的列表滚动?如果使用 SliverToBoxAdapter 无法完成,我还有其他选择吗?

list scrollable dart flutter flutter-sliver

6
推荐指数
1
解决办法
1311
查看次数

DraggableScrollableSheet 在拖动时不给出工作表的当前位置

在 flutter 中,我们有一个小部件DraggableScrollableSheet。现在我想要孩子在拖动时的当前位置或当前大小。目前无法获得该值。它在其 builder 方法中提供了一个 ScrollController ,但这是在列表滚动时而不是在拖动时使用的。那么还有另一种方法可以跟踪列表的当前拖动位置吗?

我尝试添加 NotificationListener ,但这只给了我 dragstartnofification 和 dragendnotification 而没有给 dragupdate :

DraggableScrollableSheet(
          initialChildSize: .70,
          minChildSize: .70,
          builder:
              (BuildContext context, ScrollController scrollcontroller) {
            return NotificationListener(
              onNotification: (notification) {
                print("$notification");
              },
              child: Container(
                child: ListView.builder(
                    controller: scrollcontroller,
                    itemCount: widget.songs.length,
                    itemBuilder: (BuildContext context, int index) {
                      return buildSongRow(widget.songs[index]);
                    }),
              ),
            );
          }),
Run Code Online (Sandbox Code Playgroud)

flutter

5
推荐指数
1
解决办法
3166
查看次数

无法为dart导入intl包

嗨,我正在尝试在flutter项目中使用intl包。包获取命令成功运行,但导入包时显示错误。

我的pubspec.yaml文件

对于我的dart文件中的导入,我正在使用以下导入

import 'package:intl/intl.dart';
Run Code Online (Sandbox Code Playgroud)

我还使用flutter upgrade命令从终端升级了flutter。

dart flutter

4
推荐指数
1
解决办法
5363
查看次数

颤动容器内的图像

我想在卡片小部件中显示网络图像。我希望图像具有卡片的宽度和一些固定的高度。下面是代码。

ListView.builder(
              itemCount: events.length,
              padding: const EdgeInsets.all(8.0),
              itemBuilder: (BuildContext context, int index) {
                return Card(
                  child: Column(
                    mainAxisAlignment: MainAxisAlignment.start,
                    children: <Widget>[
                      FadeInImage.assetNetwork(
                        placeholder: placeholder,
                        image: events[index].image,
                        fit: BoxFit.fitWidth,
                        height: 300,
                      )
                    ],
                  ),
                );
              })
Run Code Online (Sandbox Code Playgroud)

当我给图像一个固定的高度时,它的行为很奇怪。图像在卡片内部居中,顶部和底部有一些填充。我希望图像与顶部对齐。

问题

flutter

4
推荐指数
1
解决办法
2万
查看次数

kotlin中的合成导入不起作用

在一个Fragment,Kotlins合成导入提供的布局Anko是行不通的.我试图设置视图的可见性,但它说视图为空.我有以下代码.

class HistoryFragment : Fragment(), HistoryContract.view, LoaderManager.LoaderCallbacks<List<SongEntity>>{

    private lateinit var mPresenter : HistoryContract.Presenter
    private lateinit var adapter: HistoryAdapte
    private val loaderId : Int = 101

    override fun onLoadFinished(loader: Loader<List<SongEntity>>?, data: List<SongEntity>?) {
        hideLoadingIndicator()

        if (data == null) {
            showErrorView()
        } else {
            //update the adapter
            adapter.updateDataset(data)
        }
    }

    override fun onLoaderReset(loader: Loader<List<SongEntity>>?) {
    }

    override fun onCreateLoader(id: Int, args: Bundle?): Loader<List<SongEntity>> {
       showLoadingIndicator()

       return object : AsyncTaskLoader<List<SongEntity>>(activity!!.baseContext){
            override fun loadInBackground(): List<SongEntity>? {
                return mPresenter.fetchSongs()
            }
        } …
Run Code Online (Sandbox Code Playgroud)

android kotlin

3
推荐指数
1
解决办法
1495
查看次数

添加由 Flutter 中的 CustomScrollView 中的函数返回的 Sliver 的动态列表

我试图在 CustomScrollView 中添加 Sliverlist 的动态列表,但它似乎不起作用。该方法正确返回了条子列表,我通过调试验证了这一点。这是我想要实现的示例代码

CustomScrollView(
          key: PageStorageKey<String>(myKey),
          slivers: _getSlivers(model.data, context),
        ),
Run Code Online (Sandbox Code Playgroud)

这是 _getSlivers 方法:

List<Widget> _getSlivers(List myList, BuildContext context) 
{
  List<Widget> slivers = myList.map((key) => SliverList(
              delegate: SliverChildBuilderDelegate(
                (BuildContext context, int index) {
                   buildRow(index)
                  }
                },
                childCount: myList.length,
              ),
            ),
      ).toList();
    return slivers;
   }
 }
Run Code Online (Sandbox Code Playgroud)

flutter flutter-sliver

2
推荐指数
1
解决办法
4473
查看次数

耀斑动画图标的尺寸太小

我在颤动中使用耀斑动画。我在flare 帐户上创建了自己的动画。 这是我的耀斑文件的链接

现在,当我在我的 flutter 应用程序中使用这个动画时,动画图标太小了。我正在使用如下的耀斑动画:

   Container(
        width: 50,
        height: 50,
        child: Center(
          child: FlareActor(
            "flare_animations/heart.flr",
            animation: "go",
          ),
        ),
      )
Run Code Online (Sandbox Code Playgroud)

我可以看到动画正在发生,但它太小了。增加容器的大小并为 FlareActor 尝试不同的 boxfit 也无济于事。

flutter

1
推荐指数
1
解决办法
1121
查看次数

再次构建后,ListVIew 不会滚动到正确的偏移位置

我希望列表视图以偏移量开始。我试图通过在 ListView 中使用以下代码来实现。

控制器:ScrollController(initialScrollOffset:30 * ITEM_HEIGHT),

最初在第一次加载时,列表以正确的偏移量加载。

当通过从父小部件调用 set state 再次构建列表时,列表会更新,但滚动偏移的行为很奇怪。

有两种情况:

  1. 我不滚动列表:在此之后,如果设置状态被称为一切正常。列表得到更新并始终处于正确的偏移量。
  2. 我滚动列表:如果我滚动列表然后重建列表,则滚动偏移量会减少一些项目。列表得到更新,这很好。

是因为当我滚动时它会保留最后一个滚动位置并抵消我的计算吗?我认为这不应该发生,因为它是一个无状态小部件。

class DaysManager extends StatelessWidget {
  final int daysBeforeFocusDate = 30;
  final int totalDaysToInit = 61;
  static final double ITEM_HEIGHT = 108.00;

  ScrollController scrollController;

  List<Day> days;

  DaysManager({DateTime focusDate}) {
      final DateTime startDate =
      focusDate.subtract(Duration(days: daysBeforeFocusDate));
      days = List.generate(totalDaysToInit, (int index) {
      return Day(
       date: startDate.add(
        Duration(days: index),
    ),
  );
});

scrollController = ScrollController(initialScrollOffset: 30 *ITEM_HEIGHT);
}

  @override
  Widget build(BuildContext context) {
   return _buildScrollView();
  }

  ListView _buildScrollView() …
Run Code Online (Sandbox Code Playgroud)

flutter

1
推荐指数
1
解决办法
1856
查看次数