我正在使用顫振和塊狀態管理
當我將引數傳遞給路由時發生錯誤,它給了我這個錯誤:
引數型別“物件?” 不能分配給引數型別“EditProfileScreenArgs?
您可以在custom_router.dart中看到錯誤
custom_router.dart
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_insta_bloc_firebase/screens/screens.dart';
class CustomRouter {
static Route onGenerateRout(RouteSettings settings) {
print('Route : ${settings.name}');
switch (settings.name) {
case '/':
return MaterialPageRoute(
settings: const RouteSettings(name: '/'),
builder: (_) => Scaffold());
case SplashScreen.routeName:
return SplashScreen.route();
case LoginScreen.routeName:
return LoginScreen.route();
case NavScreen.routeName:
return NavScreen.route();
default:
return _errorRoute();
}
}
static Route onGenerateNestedRout(RouteSettings settings) {
print('Nested Route : ${settings.name}');
switch (settings.name) {
case EditProfileScreen.routeName:
return EditProfileScreen.route(args: settings.arguments);
default:
return _errorRoute();
}
}
static Route _errorRoute() {
return MaterialPageRoute(
settings: const RouteSettings(name: '/error'),
builder: (_) => Scaffold(
appBar: AppBar(
title: const Text('Error'),
),
body: const Center(
child: Text('Some Thing went wrong!'),
),
));
}
}
profile_button.dart
// ignore_for_file: deprecated_member_use
import 'package:flutter/material.dart';
import 'package:flutter_insta_bloc_firebase/screens/screens.dart';
class ProfileButton extends StatelessWidget {
final bool isCurrentUser;
final bool isFollowing;
const ProfileButton(
{Key? key, required this.isCurrentUser, required this.isFollowing})
: super(key: key);
@override
Widget build(BuildContext context) {
return isCurrentUser
? FlatButton(
color:
isFollowing ? Colors.grey[300] : Theme.of(context).primaryColor,
onPressed: () => Navigator.of(context).pushNamed(
EditProfileScreen.routeName,
arguments: EditProfileScreenArgs(
context: context)), //send context for editProfileScreen
child: Text(
'Edite Profile',
style: TextStyle(
color: isFollowing ? Colors.black : Colors.white,
fontSize: 16.0),
))
: FlatButton(
color:
isFollowing ? Colors.grey[300] : Theme.of(context).primaryColor,
onPressed: () {},
child: Text(
isFollowing ? 'Unfollow' : 'Follow',
style: TextStyle(
color: isFollowing ? Colors.black : Colors.white,
fontSize: 16.0),
));
}
}
Edit_Profile_screen.dart
import 'dart:js';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_insta_bloc_firebase/repository/repository.dart';
import 'package:flutter_insta_bloc_firebase/screens/edit_profile/cubit/edite_profile_cubit.dart';
import 'package:flutter_insta_bloc_firebase/screens/pages/profile/bloc/profile_bloc.dart';
import 'package:meta/meta.dart';
//with this class we can pass argumentfor go to profile_btn
class EditProfileScreenArgs {
final BuildContext context;
const EditProfileScreenArgs({required this.context});
}
class EditProfileScreen extends StatelessWidget {
static const String routeName = '/editProfile';
static Route route({EditProfileScreenArgs? args}) {
return MaterialPageRoute(
settings: const RouteSettings(name: routeName),
builder: (context) => BlocProvider<EditeProfileCubit>(
create: (context) => EditeProfileCubit(
userReposirory: context.read<UserReposirory>(),
storageRepository: context.read<StorageRepository>(),
profileBloc: args!.context.read<ProfileBloc>()),
child: EditProfileScreen(),
));
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Edit Profile'),
),
);
}
}
uj5u.com熱心網友回復:
您需要告訴傳遞引數的型別,否則它將被視為 type 的泛型Object?。在onGenerateNestedRout您的custom_router.
switch (settings.name) {
case EditProfileScreen.routeName:
return EditProfileScreen.route(args: settings.arguments as EditProfileScreenArgs?);
default:
return _errorRoute();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/457145.html
上一篇:如何取消cubit舊函式呼叫?
