生成的带有块Flutter的路由

btqmn9zl  于 2023-05-23  发布在  Flutter
关注(0)|答案(1)|浏览(121)

我正在使用generatedRoutesbloc状态管理库/模式开发一个简单的Flutter应用程序。我有一个简单的cubit,它生成一个随机数,还有一个Home Screen,它有一个按钮来生成新的随机数。**在运行应用程序时,一直显示白色屏幕,在调试控制台中,我收到isolate相关错误和通知,不断显示Xcode build正在运行,如下所示:-**x1c 0d1x
下面是我的代码:

NavigationCubit和NavigationState

class NavigationState {
  final int number;
  NavigationState(this.number);
}

class NavigationCubit extends Cubit<NavigationState> {
  NavigationCubit():super(NavigationState(0));

  void onStateChange() {

    var r = Random();
    emit(NavigationState(r.nextInt(1000)));
  }      
}

AppRouter类

class AppRouter {

  Route generateRoutes(RouteSettings settings) {
    switch(settings.name) {
      case '/':
        return MaterialPageRoute(builder: (context) =>
        BlocProvider<NavigationCubit>( create: (context) => NavigationCubit(),
          child: const HomeScreen(),
        ));
      default:return MaterialPageRoute(builder: (context) => const ErrorScreen());
    
    }
  }
}

主屏幕和错误屏幕

class HomeScreen extends StatelessWidget {
  const HomeScreen({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("Welcome to page routes"),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            BlocBuilder<NavigationCubit, NavigationState>(
              builder: (context, state) => Text(state.number.toString()),),
              ElevatedButton(onPressed: () {
                context.read<NavigationCubit>().onStateChange();
              }, child: const Text("Generate"))

          ],
        )),
    );
  }
}

class ErrorScreen extends StatelessWidget {
  const ErrorScreen({super.key});

  @override
  Widget build(BuildContext context) {
    return const Scaffold(
      body:  Center(child: Text("Error in routing")),
    );
  }
}

主文件(main.dart)

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  MyApp({super.key});

  final router = AppRouter();

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Generated Routes Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),

      onGenerateRoute: router.generateRoutes,
      initialRoute: '/',
    );
  }
}

**Flutter_bloc依赖版本:flutter_bloc: ^8.1.2

我尝试了多种解决方案,其中一个是由This提供的,所有的cubits/blocs都是手动处理的,但没有成功。
如何解决这个问题,我的方法有什么问题。

kzipqqlq

kzipqqlq1#

出现该错误是因为您应用程序不是从main.dart文件运行的。您可以通过将vscode中的launch.json文件添加到项目文件容器中的.vscode文件夹来修复该错误

{
"configurations": [
    {
        "name": "Flutter",
        "type": "dart",
        "request": "launch",
        "program": "lib/main.dart"
    }
  ]
}

相关问题