купертинский эквивалент `Материала`

#flutter #material-design #flutter-cupertino

Вопрос:

Я провел долгое исследование в Интернете об этом (что я считаю вредным) использовании Material виджета во flutter, любой разработчик flutter сталкивался с No Material widget found. исключением даже при использовании виджетов дизайна купертино.

Простой пример, который нужно привести, это

 import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

class Example extends StatelessWidget {
  const Example({Key key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return CupertinoPageScaffold(
      navigationBar: CupertinoNavigationBar(
        middle: Text('Example'),
        leading: IconButton(
          onPressed: () {},
          icon: Icon(
            Icons.close,
            color: Colors.black54,
          ),
        ),
      ),
      child: Center(
        child: IconButton(
          onPressed: () {},
          icon: Icon(
            Icons.close,
            color: Colors.black54,
          ),
        ),
      ),
    );
  }
}
 

Ни navigationBar то, ни body IconButton другое не будет работать, что приведет к одному и тому же исключению.

Сталкиваясь с этим исключением, я всегда заворачиваю его внутрь Material , чтобы обойти его, но я думаю, что делаю это неправильно. IconButton это не единственный виджет, и я много искал безрезультатно.

Пожалуйста, скажите мне, что я упускаю ? и заранее спасибо.

Комментарии:

1. @Faizan Дарвеш и @JaffaKetchup никто не знает, что флаттер не знает о MaterialApp том, что вопрос заключается в его замене, и это похоже на потомков Material , потому что от них зависит много нематериальных виджетов, таких как IconButton

2. У меня тоже есть такой же вопрос по этому поводу. Когда я использую MaterialApp => > CupertinoTabScaffold и использую TextField , он показывает ошибку, подобную этой, виджеты текстового поля требуют, чтобы материальная локализация была предоставлена предком виджета локализации. Библиотека материалов использует локализации для создания сообщений, надписей и сокращений. . У кого-нибудь есть какое-нибудь решение ? Спасибо.

Ответ №1:

Не уверен насчет части Купертино, но (afaik) вам нужно обернуть свое приложение, MaterialApp() чтобы получить доступ к виджетам материалов и другим методам и т.д.

Ответ №2:

Вам нужно обернуть свой корневой виджет, MaterialApp() чтобы вы могли получить доступ к компонентам материала.

Например,

 import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}