簡體   English   中英

為什么初始化期間flutter_riverpod出現state更改錯誤

[英]Why state change error occurs on flutter_riverpod during initialization

import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';

final dataProvider = StateNotifierProvider<DataNotifier, List<int>>((ref) {
  return DataNotifier();
});

class DataNotifier extends StateNotifier<List<int>> {
  DataNotifier() : super([]);

  Future<void> getData() async {
    state = [];
    await Future.delayed(const Duration(seconds: 2));
    state = [1, 2];
  }
}

void main() => runApp(ProviderScope(child: App()));

class App extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Home(),
    );
  }
}

class Home extends StatelessWidget {
  const Home({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        color: Colors.white,
        child: Center(
          child: ElevatedButton(
            onPressed: () {
              Navigator.of(context).push(
                MaterialPageRoute(builder: (_) => SecondPage()),
              );
            },
            child: const Text('Next page'),
          ),
        ),
      ),
    );
  }
}

class SecondPage extends ConsumerStatefulWidget {
  const SecondPage({Key? key}) : super(key: key);

  @override
  _SecondPageState createState() => _SecondPageState();
}

class _SecondPageState extends ConsumerState<SecondPage> {
  @override
  void initState() {
    super.initState();
    ref.read(dataProvider.notifier).getData();
  }

  @override
  Widget build(BuildContext context) {
    final numbers = ref.watch(dataProvider);
    return Scaffold(
      appBar: AppBar(),
      body: ListView.builder(
        itemBuilder: (_, index) {
          return Text('data: $index');
        },
        itemCount: numbers.length,
      ),
    );
  }
}

我是riverpod的新手,我在更改state時注意到了這個錯誤。

在上面的代碼中,當我第一次在重新開始時點擊“下一頁”按鈕時,它按預期工作,但是當我 go 返回並再次點擊“下一頁”按鈕時,會拋出如下所示的錯誤:

StateNotifierListenerError (At least listener of the StateNotifier Instance of 'DataNotifier' threw an exception
when the notifier tried to update its state.

有誰知道為什么會發生這種情況以及我該如何預防。

您可以使用autoDispose解決問題

final dataProvider = StateNotifierProvider.autoDispose<DataNotifier, List<int>>(
  (ref) => DataNotifier(),
);

對於Future我更喜歡使用FutureProvider

更多關於河莢

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM