Как добавить кнопку в активность панели приложений в flutter?

#android #flutter #dart

Вопрос:

это та часть, которая меня смущает:

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

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      title: 'Startup Name Generator',
      actions: <Widget>[
        IconButton(
          icon: const Icon(Icons.shopping_cart),
          tooltip: 'Open shopping cart',
          onPressed: () {
            // handle the press
          },
        ),
      ],
      home: RandomWords(),
    );
  }
}
 

Я следую руководству, предоставленному самим Google, но оно не работает:

https://codelabs.developers.google.com/codelabs/first-flutter-app-pt2

Я получаю эту ошибку:

The argument type 'List<Widget>' can't be assigned to the parameter type 'Map<Type, Action<Intent>>?'. dart(argument_type_not_assignable)

но в документах указано , что свойство actions равно a List<Widget> , поэтому я понятия не имею, что я сделал не так

Ответ №1:

Вы работаете не с тем родительским виджетом. Это actions MaterialApp не то, что вы ищете.

Перейдите к своему RandomWords виджету, убедитесь , что он создает Scaffold , добавьте appBar его в свой Scaffold и установите actions это AppBar .

Ты хочешь чего-то подобного.

 import 'package:flutter/material.dart';

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Test appbar'),
        actions: [
          IconButton(
            icon: const Icon(Icons.shopping_cart),
            tooltip: 'Open shopping cart',
            onPressed: () {
              // handle the press
            },
          ),
        ],
      ),
    );
  }
}
 

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

1. боже мой, я совершенно неправильно понял учебник… большое тебе спасибо, парень!

2. Не беспокойтесь, удачи и получайте удовольствие от обучения! Флаттер — такой отличный инструмент.