[英]Display Widget onPressed button Flutter
我的目標是根據菜單中的點擊顯示某些小部件。 單擊標題時我需要的是顯示某個小部件。
這是完整的代碼:
class SideMenu extends StatelessWidget { const SideMenu({ Key? key, }): super(key: key); @override Widget build(BuildContext context) { return Drawer( child: SingleChildScrollView( // it enables scrolling child: Column( children: [ DrawerHeader( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ SizedBox( height: defaultPadding * 3, ), Image.asset( "assets/logo/logo_icon.png", scale: 5, ), SizedBox( height: defaultPadding, ), Text("Récolt"), ], )), DrawerListTile( title: "Tableau de bord", svgSrc: "assets/icons/menu_dashbord.svg", press: () {}, ), DrawerListTile( title: "Utilisateurs", svgSrc: "assets/icons/menu_profile.svg", press: () {}, ), DrawerListTile( title: "Collaborateurs", svgSrc: "assets/icons/menu_doc.svg", press: () {}, ), DrawerListTile( title: "Producteurs", svgSrc: "assets/icons/menu_store.svg", press: () {}, ), DrawerListTile( title: "Paramètres", svgSrc: "assets/icons/menu_setting.svg", press: () {}, ), ], ), ), ); } }
我有一個外部頁面來顯示我的小部件,如下所示:
SizedBox(height: defaultPadding), ListUserEntreprise(), SizedBox(height: defaultPadding), ListUserCollab(),
我不知道該怎么做,我嘗試在 onPressed 中使用 boolean 但它沒有用,我真的不知道如何聲明它並將它用於外部頁面。 有誰可以幫助我嗎?
使用 StatefulWidget 並嘗試使用帶有 onPressed、 setState()
的 boolean 來更新 UI
例子:
import 'package:flutter/material.dart';
class SideMenu extends StatefulWidget {
const SideMenu({
Key? key,
}) : super(key: key);
@override
State<SideMenu> createState() => _SideMenuState();
}
class _SideMenuState extends State<SideMenu> {
bool _isShow = false;
@override
Widget build(BuildContext context) {
return Drawer(
child: SingleChildScrollView(
// it enables scrolling
child: Column(
children: [
DrawerListTile(
title: "Tableau de bord",
svgSrc: "assets/icons/menu_dashbord.svg",
press: () {
setState(() {
_isShow = !_isShow;
});
},
),
Visibility(
visible: _isShow,
child: Container(
child: Text('Tableau de bord'),
))
],
),
),
);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.