WedX - журнал о программировании и компьютерных науках

Можно ли преобразовать фрагмент Android в виджет Flutter?

У меня есть собственный фрагмент Android, и мне нужно использовать его внутри проекта флаттера.

Внутри Android-проекта, когда вам нужно использовать что-то вроде фрагмента

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

Я хотел бы встроить этот фрагмент вместе с BottonNavigationBar (например, второй вариант).

Я пытался следовать некоторым руководствам как:

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

Но я не смог адаптировать эти руководства для фрагментов или даже действий, потому что они говорят о представлениях.

У кого-нибудь есть предложения?

Замечания: Чтобы уточнить, мне нужно использовать собственный экран внутри флаттер-экрана.

11.12.2019

Ответы:


1

Но вы можете использовать флаттер BottomNavigationBar

вот демонстрация BottomNavigationBar

и выглядит так же, как Bottomnavigation с fragment в android

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(),
    ];
  }
}

Я надеюсь, что это помогает

12.12.2019

2

Я использовал это в аналогичной проблеме:

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)
      ]);
 }
}

Где MealPlanScreen и ExerciseScreen равны StatefulWidget, и эти два контейнера будут заменены другими классами, содержащими StatefulWidget.

11.12.2019
  • Спасибо за ответ, но мне нужно вставить собственный фрагмент как элемент getTabBarPages. 12.12.2019
  • Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]