Flutter 带Riverpod的颤振导航杆
我试图管理我的国家,但我真的做不到。我想学习如何使用riverpod包在管理页面底部创建导航栏 我设法管理我们单击的页面,但我不知道如何根据所选按钮返回正确的寻呼机 Main.dart: NavigationBarScreen.dart: NavigationNotifier.dart:Flutter 带Riverpod的颤振导航杆,flutter,dart,riverpod,Flutter,Dart,Riverpod,我试图管理我的国家,但我真的做不到。我想学习如何使用riverpod包在管理页面底部创建导航栏 我设法管理我们单击的页面,但我不知道如何根据所选按钮返回正确的寻呼机 Main.dart: NavigationBarScreen.dart: NavigationNotifier.dart: 似乎您已经实现了当用户单击底部栏时修改状态的所有逻辑 剩下的唯一一点就是倾听脚手架中可能出现的状态,并决定显示哪一页 一种可能性是写: 类NavigationBarScreen扩展了HookWidget{ @凌
似乎您已经实现了当用户单击底部栏时修改状态的所有逻辑 剩下的唯一一点就是倾听脚手架中可能出现的状态,并决定显示哪一页 一种可能性是写: 类NavigationBarScreen扩展了HookWidget{ @凌驾 小部件构建上下文上下文{ final pageModel=useProviderprovider.state; 控件体; 切换pageModel.page{ 案例导航barevent.HOME: 身体=家; 打破 案例导航BarEvent.profile: 身体:侧面; 打破 } 返回脚手架 身体:身体,, 底线:。。。 ; } }
似乎您已经实现了当用户单击底部栏时修改状态的所有逻辑 剩下的唯一一点就是倾听脚手架中可能出现的状态,并决定显示哪一页 一种可能性是写: 类NavigationBarScreen扩展了HookWidget{ @凌驾 小部件构建上下文上下文{ final pageModel=useProviderprovider.state; 控件体; 切换pageModel.page{ 案例导航barevent.HOME: 身体=家; 打破 案例导航BarEvent.profile: 身体:侧面; 打破 } 返回脚手架 身体:身体,, 底线:。。。 ; } }
谢谢你的帮助;谢谢你的帮助;在此常量表达式的ProviderScope RaiseValuation之前使用const会引发异常。此操作:void main{runApp ProviderScope child:MyApp,;}此常量表达式的ProviderScope RaiseValuation之前使用const会引发异常。此操作:void main{runApp ProviderScope child:MyApp,;}
import 'package:flutter/material.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:app/ui/screens/my_app/my_app_screen.dart';
void main() {
runApp(
const ProviderScope(child: MyApp()),
);
}
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
final provider = StateNotifierProvider((ref) => NavigationNotifier());
class NavigationBarScreen extends HookWidget
{
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
body : Container(
margin: EdgeInsets.only(left : 8, right : 8, bottom: 8),
decoration: BoxDecoration(
borderRadius: BorderRadius.only(
topRight: Radius.circular(20), topLeft: Radius.circular(20)),
boxShadow: [
BoxShadow(color: AppColors.colorShadowLight, spreadRadius: 0, blurRadius: 10),
],
),
child: ClipRRect(
borderRadius: BorderRadius.circular(50.0),
child: BottomNavigationBar(
type: BottomNavigationBarType.fixed,
backgroundColor: AppColors.colorBgDark,
fixedColor: AppColors.colorContrastOrange,
unselectedItemColor: AppColors.colorFontLight2,
currentIndex: 0,
showSelectedLabels: false,
showUnselectedLabels: false,
onTap: context.read(provider).selectPage,
items: [
BottomNavigationBarItem(
icon: Icon(Icons.home),
title: Text('Home'),
),
BottomNavigationBarItem(
icon: Icon(Icons.settings),
title: Text('Settings'),
),
],
),
),
),
),
);
}
}
import 'package:hooks_riverpod/hooks_riverpod.dart';
enum NavigationBarEvent { HOME, PROFIL}
class NavigationNotifier extends StateNotifier<PageModel> {
NavigationNotifier() : super(defaultPage);
static const defaultPage = PageModel(NavigationBarEvent.HOME);
void selectPage(int i){
switch (i) {
case 0:
state = PageModel(NavigationBarEvent.HOME);
break;
case 1:
state = PageModel(NavigationBarEvent.PROFIL);
break;
}
}
}
class PageModel {
const PageModel(this.page);
final NavigationBarEvent page;
}