在 Flutter 中强制从抽屉重建小部件

问题描述 投票:0回答:1

我有一个带抽屉导航的 flutter 应用程序。打开时,抽屉与一个小部件重叠(我们称之为 Screen_1)。

我想在用户关闭抽屉时强制重建 Screen_1。最好的方法是什么?谢谢。

flutter drawer rebuild
1个回答
0
投票

我有一些可能对您有帮助的建议,您可以根据您的需要进行选择,您可以查看这些:

ValueNotifier:https://api.flutter.dev/flutter/foundation/ValueNotifier-class.html

如果您按下按钮将其关闭,您可以使用: Navigator.pushReplacement

或者最后 回调函数

示例:

    import 'package:flutter/material.dart';
    
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: HomeScreen(),
        );
      }
    }
    
    class HomeScreen extends StatelessWidget {
      void _rebuildScreen1(BuildContext context) {
        Navigator.pop(context); // Close the drawer
        Navigator.pushReplacement(
          context,
          MaterialPageRoute(
            builder: (context) => Screen_1(rebuildCallback: _rebuildScreen1),
          ),
        );
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text('Drawer Example'),
          ),
          drawer: Drawer(
            child: ListTile(
              title: Text('Close Drawer'),
              onTap: () => _rebuildScreen1(context), // Call the rebuild callback
            ),
          ),
          body: Screen_1(rebuildCallback: _rebuildScreen1),
        );
      }
    }
    
    class Screen_1 extends StatefulWidget {
      final VoidCallback rebuildCallback;
    
      Screen_1({required this.rebuildCallback});
    
      @override
      _Screen_1State createState() => _Screen_1State();
    }
    
    class _Screen_1State extends State<Screen_1> {
      @override
      Widget build(BuildContext context) {
        return Center(
          child: TextButton(
            onPressed: () => widget.rebuildCallback(), // Use the rebuild callback
            child: Text('Rebuild Screen 1'),
          ),
        );
      }
    }

© www.soinside.com 2019 - 2024. All rights reserved.