简体   繁体   English

是否可以将 Android Fragment 转换为 Flutter Widget?

[英]Is it possible to convert an Android Fragment into Flutter Widget?

I have a Native Android Fragment and I need to use inside a flutter project.我有一个原生 Android 片段,我需要在颤振项目中使用。

Inside a Android Project when you need to use a fragment something like在 Android 项目中,当您需要使用类似片段时

 supportFragmentManager.beginTransaction()
                            .replace(R.id.content_fragment, it1,
                                    "name")
                            .commit()

I would like to embed this fragment along with a BottonNavigationBar (second option for example).我想将此片段与 BottonNavigationBar 一起嵌入(例如第二个选项)。

I tried to follow some tutorials as:我尝试按照以下教程进行操作:

https://medium.com/flutter-community/flutter-platformview-how-to-create-flutter-widgets-from-native-views-366e378115b6 https://medium.com/flutter-community/flutter-platformview-how-to-create-flutter-widgets-from-native-views-366e378115b6

https://60devs.com/how-to-add-native-code-to-flutter-app-using-platform-views-android.html https://60devs.com/how-to-add-native-code-to-flutter-app-using-platform-views-android.html

But I wasn`t able to adapt these tutorials for fragment or even activities becase they talk about Views.但是我无法将这些教程改编为片段甚至活动,因为它们谈论的是视图。

Does anyone have any suggestions?有没有人有什么建议?

Obs: Just to clarify, I need to use a native screen inside a flutter screen. Obs:澄清一下,我需要在颤动屏幕中使用原生屏幕。

But you can use flutter BottomNavigationBar但是你可以使用 flutter BottomNavigationBar

here is a demo of BottomNavigationBar这是BottomNavigationBar的演示

and it looks same as Bottomnavigation with fragment in android它看起来与Android中带有fragment Bottomnavigation相同

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int index = 0;

  void currentindex(value) {
    setState(() {
      this.index = value;
    });
  }


  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        leading: Icon(
          MdiIcons.flower,
          color: Colors.white,
        ),
        title: Text(
          widget.title,
          style: TextStyle(color: Colors.white),
        ),
      ),
      bottomNavigationBar: BottomNavigationBar(
        items: [
          BottomNavigationBarItem(
            icon: Icon(MdiIcons.home),
            title: Text("Home"),
          ),
          BottomNavigationBarItem(
            icon: Icon(MdiIcons.human),
            title: Text("User"),
          ),
          BottomNavigationBarItem(
            icon: Icon(MdiIcons.imageAlbum),
            title: Text("Theme"),
          ),
        ],
        onTap: (index) => currentindex(index),
        elevation: 19.0,
        currentIndex: index,
      ),
      body: Navtabwidget()[this.index],
    );
  }

  List<Widget> Navtabwidget() {
    return [
      Homewidget(),
      Userlistwidget(),
      Settingwidget(),
    ];
  }
}

i hope it helps我希望它有帮助

I used this, in a similar problem:我在类似的问题中使用了这个:

class DetailsScreen extends StatefulWidget {
 @override
 DetailsScreenState createState() {
   return DetailsScreenState();
  }
}

class DetailsScreenState extends State<DetailsScreen>
   with SingleTickerProviderStateMixin {
 TabController tabController;

 @override
 void initState() {
   tabController = new TabController(length: 4, vsync: this);
   super.initState();
 }

 @override
 void dispose() {
  tabController.dispose();
  super.dispose();
 }

 @override
 Widget build(BuildContext context) {
   return Scaffold(
      appBar: PreferredSize(
        preferredSize: Size.fromHeight(67.0),
        child: AppBar(
          elevation: 10.0,
          automaticallyImplyLeading: false,
          flexibleSpace: Padding(
            padding: const EdgeInsets.only(top: 0.0),
            child: SafeArea(
              child: getTabBar(),
            ),
          ),
        ),
      ),
      body: getTabBarPages());
 }

 Widget getTabBar() {
   return TabBar(controller: tabController, tabs: [
    Tab(
        text: AppLocalizations.of(context).translate("nav_dieta"),
        icon: Icon(MdiIcons.silverwareForkKnife)),
    Tab(
        text: AppLocalizations.of(context).translate("nav_exercise"),
        icon: Icon(MdiIcons.dumbbell)),
    Tab(
        text: AppLocalizations.of(context).translate("_news"),
        icon: Icon(MdiIcons.newspaper)),
    Tab(
        text: AppLocalizations.of(context).translate("nav_info"),
        icon: Icon(MdiIcons.accountDetails)),
  ]);
 }

 Widget getTabBarPages() {
   return TabBarView(
      controller: tabController,
      physics: NeverScrollableScrollPhysics(),
      children: <Widget>[
        MealPlanScreen(),
        ExerciseScreen(),
        Container(color: Colors.blue),
        Container(color: Colors.yellow)
      ]);
 }
}

Where MealPlanScreen and ExerciseScreen are StatefulWidget and those two Containers will be replaced with other classes that contain StatefulWidget .其中 MealPlanScreen 和 ExerciseScreen 是StatefulWidget并且这两个容器将被其他包含StatefulWidget类替换。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM